CPQ Pricing

Overview

Companies that sell products or services can be broken down into two different categories, B2B (Business-to-Business) or B2C (Business-to-Consumer). CPQ's primary focus is providing tools that help make B2B companies more successful, whether selling to other companies directly, or via self-service. One business function that can yield the highest payback on improvements is pricing. In this topic we will describe pricing concepts and CPQ's role in pricing.

Value and PriceWhat is a Price?

A price is the amount of money given by a customer in exchange for a product or service. Historically cost has been the basis for pricing the sale of tangible goods. But two factors are driving companies to reconsider their pricing strategies. Modern pricing science indicates that for many companies cost is only an internal concept which is not relevant to your customers. With the rise of the subscription economy and anything-as-a-service (XaaS), older cost-based pricing approaches don't deliver the best profitability. To increase profitability customers should view price as a function of value. Essentially, price is the value of the product to the customer and will vary depending on the context. In other words, price is the amount a customer is willing to pay. Consider the following extreme examples that illustrate this concept:

Dynamic Pricing

Since the VALUE of a product will vary by customer and context, you can use dynamic pricing to capture more value from customers. Dynamic Pricing is a best practice that…

As shown in the following image, static pricing employs a single price point for all customers while dynamic pricing incorporates multiple price points for the same product depending on the dynamic context of the pricing.

Dynamic Pricing

So how can you price dynamically to collect more value from customers? Examples of dynamic pricing include pricing differently:

The diagram below illustrates an example of where the pricing differs between small self-service customers and larger customers with a sales agreement.

Dynamic pricing example

Using methods such as these to define differential pricing is collectively referred to as pricing segmentation. Dynamic pricing can even be based on a combination of many factors (which is commonly referred to as micro-segmentation).


CPQ's Role in Pricing

Pricing consists of four major business functions: Price Setting, Price Execution, Price Negotiation, and Rating.

CPQ's pricing features focus on the functions of price execution and price negotiation.

CPQ Pricing Focus

Key Price Points

When defining and managing prices for an enterprise, there is almost never ‘one’ price. Multiple price points are typically used to manage pricing and there are three key price points used by most enterprises which are supported by CPQ for any product or service: Base Price, List Price, and Net Price. In addition to these, customers can implement many additional price points and discounts in Pricing Engine.

The following example of these unit prices.

Line Item Grid example

To summarize, Base Price and List Prices are calculated and returned by the CPQ Pricing Function, whereas Net Prices are calculated in CPQ Commerce based on the user’s entry of manual or custom discounts.

The combination of these price points define the price calculation for product or service on a quote line. CPQ pricing calculates the List Price by sequentially applying one or more different price calculation methods that are evaluated every time a price is updated on a quote or configuration.


CPQ Pricing Methods

CPQ provides many different ways to do pricing, which are listed below. At run-time when the user is editing the quote or configuration, the CPQ Pricing Function calculates ALL of the defined Price Methods shown in the first column in a predefined sequence to return the final unit List Price. Formulas and BML pricing methods are applied as subsequent steps to populate custom-defined pricing attributes in CPQ Commerce and are not included in the CPQ Pricing Function.

Calculated by CPQ Pricing Function

Method

*Productized Pricing Feature

Description

YES

Part Base Pricing

YES

A Part Base Price defined as the base price set up on the CPQ part record

YES

Price Book Price

YES

An Association of Parts and Prices ('Price Book Association') defined in Price book administration

YES

Model Base Pricing

YES

Model Base Prices defined in the base price setup on the Configuration Model Administration page

YES

BOM Pricing
(BOM Mapping)

YES

Assignment of a Price for a BOM Item defined in the BOM Item Definition Table

YES

Recommended
Item Price

YES

Prices defined through a Recommended Item Rule in Configuration

YES

Attribute
Value Pricing

YES

Prices defined using Configuration Menu Attributes

YES

Configuration
Pricing Rule

YES

Configuration-specific prices at the Product Family, Product Line or Model level

YES

Pricing Engine

YES

Layered pricing such as Customer Specific Pricing, Matrix based pricing, Subscription pricing and/or other Complex Pricing scenarios set up in Pricing Engine Price Models.

NO

Formulas

Custom

Excel-like formulas to calculate prices in CPQ Commerce.

NO

BML (with or without Data Tables)

Custom

Pricing Scripts which frequently reference Data Tables that are typically run as part of CPQ Commerce

Notes:

* Productized Features are those that provide explicit support for populating standard pricing attributes in Commerce and Configuration. Custom Features are those which require customers to specify as customizations which attributes to update with which business logic.

Each of these methods define pricing in a different way and return the resulting prices in different parts of the CPQ user experience as shown below. The following table illustrates which pricing methods populate prices in the associated CPQ user interface or REST API. Note that the Methods highlighted in yellow may not update the productized Commerce pricing attributes.

Method User Interface Calculate Price
REST API
Commerce
Line Item Grid
Configuration Shopping Cart Favorites Parts Search
Part Base Pricing X X X X X X
Price Book Price X X X X X X
Model Base Pricing X X X X N/A X*
BOM Pricing (BOM Mapping) X X N/A N/A N/A N/A
Recommended Item Price X X X X N/A N/A
Attribute Value Pricing X X X X N/A N/A
Model Configuration Pricing Rule X X X X N/A N/A
Pricing Engine X X N/A N/A X X

Formulas

X N/A N/A N/A N/A N/A
BML (with or without Data Tables) X+ X+ X X N/A X++

Notes:

X = pricing from this method is visible / available in the consumer UI or response

N/A = prices are not populated by this method

* SOAP getPrice API is available

+ Would require multiple instances of the BML being invoked separately in different parts of CPQ

++ Only if the BML is used as part of an Advanced Price Model in Pricing Engine.

While any or all of these methods may be applied in pricing a single product, and all carry some advantages, Pricing Engine is CPQ’s strategic solution to address all of these pricing methods in the future. Unlike many of these other methods Pricing Engine offers you a way to return the same, dynamically calculated prices in all modules of CPQ, and to external consumers of CPQ pricing via the Calculate Price REST API. Pricing Engine also enables you to define sophisticated, flexible, extensible, multi-layered pricing and discounting with native support for multiple price types (one time, recurring usage), multiple charges or prices for a single product, BOM-specific pricing, and complex consumption pricing involving rate plans and rate cards.

We strongly recommend that new pricing or new implementations use the CPQ Pricing Engine. If you have already implemented pricing using other pricing methods and want to transition to the CPQ Pricing Engine, see Adopting CPQ Pricing Engine.


What are Product Prices and Charge Prices?

CPQ prices are of two types: Product Prices and Charge Prices, both of which are written into CPQ Commerce and returned in the Calculate Price REST API by the CPQ Pricing Function. Whereas Product Prices are returned by all CPQ Pricing Methods, Charge Prices can only be defined in the CPQ Pricing Engine.

Product Prices

Product Prices are the traditional way to price products in CPQ when there is only one price for each product. These may also be referred to as ‘primary charges’ when multiple prices apply to a product and can be used in combination with Charge Prices. Product Prices are written directly into the Commerce Transaction Line attributes in the Price Attribute Set and can be displayed in the CPQ quoting run-time Line Item Grid as shown below.

Product Price Example

Charge Prices

Charge Prices are used when multiple prices are needed for a single product. They may be used in addition to Product Prices, or instead of Product Prices. For example, the prices for the subscription service ‘ SP_SECURITY’ can be set up in a Price Model to have a monthly recurring product price and a one-time activation charge as shown below:

Product Charge Example

When this product is added to a transaction, the product price will display in the Line Item Grid as shown below.

Product Charge in Line Item Grid

The symbol shown on the left on the row indicates that one or more charges are also present. These may be viewed by selecting the row and clicking on the ‘Charge Details’ action. The additional charge price is then displayed in a drawer UI as shown below.

Product Charge in Charge Details drawer

When no product price is defined for a product, the price shown in the Commerce Line Item Grid will be zero, and the charge or charge pricing will still be displayed in the Charge Drawer UI.

All CPQ pricing methods can return Product Prices to the consumers noted above. This is the legacy behavior for CPQ. Only with the CPQ Pricing Engine method can both Product Prices and Charge Prices be calculated and returned to CPQ Commerce, CPQ Configuration and in the Calculate Price REST API. In addition, while other pricing methods return only unit price values, prices defined by Pricing Engine, whether Product Prices or Charge Prices, may have a specified Price Type (i.e. one time or recurring) and a Price (recurrence) Period and Charge Definition.


What Attribute Values does the CPQ Pricing Function Populate?

While the CPQ Pricing Function returns prices to many CPQ UIs and in the response of the Calculate Price REST API, the most robust set of price values are written into Line and Charge Attributes in CPQ Commerce for display as part of the sales transaction.

For more information refer to the following Commerce sub-document Price Attribute Set and Charge Set.


CPQ Pricing Order of Operations

The currency-based pricing attributes in the Line Price Attribute Set are populated by different CPQ Pricing Methods in a sequence or order of operations as noted below.

CPQ adheres to a defined order of operations for pricing items. If the same part is in multiple pricing rules, and within price models within a rule, the pricing rule price value is derived from the first rule (as shown in the list of rules on the Administration page) and the first price model within the rule (as shown in the Linked Price Models section for the rule).

• Unit Price is written to other Unit Price attributes within CPQ.

• CPQ uses the first value found. If no value is found, the evaluation continues or returns a zero price.

• User input, Formulas or BML may take precedence over the pricing values for most of these attributes, depending on customizations present in your site implementation.

You can use any or all of these price attributes for pricing your transaction lines in CPQ Commerce.

The Unit Price returned by the CPQ Pricing Function is also applied to pricing in Parts Search, Configuration, Favorites, and the Shopping Cart.

Commerce Price Attribute Set Attributes Item Type being Priced
Display Name Variable Name Part Model

Item Price

_price_item_price_each

Price Book Price;
ELSE Part Base Price
ELSE ZERO

Model Base Price
+ Model Config Pricing Rule Price
+ Attribute Value Price;
ELSE ZERO

Configurable Price

_price_configurable_price

BOM Price OR
Recommended Item Price;
ELSE ZERO

List Price

_price_list_price_each

Configurable Price;
ELSE Item Price;

Pricing Rule Price

_pricing_rule_price_each

Pricing Engine Price

Unit Price

_price_unit_price_each

Pricing Rule Price
ELSE list Price;


How Does the CPQ Pricing Function Calculate a Price?

When a sales user is editing a quote or configuration at ‘run-time’, the productized CPQ Pricing Function continually reprices the products involved by applying ALL of the pricing methods that are defined in your setup (with the exception of Formulas and BML as noted above) when any of the following triggering actions occur:

In Configuration

In Commerce/ Quoting

The following diagram shows illustrates the relationship between the CPQ pricing methods calculated by the productized CPQ Pricing Function.

When base and list prices are set in Configuration using any of the methods indicated, these prices are passed to a Commerce quote via the Configuration "Add to Transaction" action. The "Add to Transaction" action will then automatically populates the Commerce Price Attribute Set and Charge Set attributes.

The Pricing Methods shown in the Configuration box (Model Base Price, etc.) only calculate during configuration.

Those shown in the center of the diagram (Part (Base Price) etc.) populate price values in both Configuration and Commerce during the sales users’ run-time experience.

Those shown in the Commerce box only calculate during quote editing.

CPQ Pricing Methods


Where can Prices be Defined for the CPQ Pricing Engine?

There are two user experiences available for defining pricing in the CPQ Pricing Engine by different user roles or personas: Product Workbench, and Pricing Portal.

The following roles are referenced for pricing tasks within pricing:

All CPQ customers can manage Pricing Engine prices via the Pricing Portal. For more information, refer to Pricing Portal. Customers using CPQ with Oracle CX Sales can also manage pricing using the Product Workbench. For more information, refer to Product Workbench.


Related Topics

Related Topics Link IconSee Also