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.
What 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:
- Example 1: If you were in a desert and dying of thirst, you would pay whatever you could for a bottle of water. You would not be willing to pay the same amount for the same bottle of water at a local convenience store where water is much more available.
- Example 2: During the COVID-19 pandemic people were not driving as much and the demand for gasoline was very low. This drove the price for a barrel of oil below zero, because the cost for buyers to store the oil exceeded the amount they were able to sell.
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…
- Applies different prices for the same product
- Depending on relevant contextual factors or attribute values
- In order to maximize capture of revenue
- From customers based on their perceived willingness to pay and perceived value
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.
So how can you price dynamically to collect more value from customers? Examples of dynamic pricing include pricing differently:
-
In one region versus another (based on what these segments of customers will pay)
-
For one set of customers versus another set (based on size or industry some may be willing to pay more)
-
In one channel versus another (ex. self service vs. direct sales)
-
For urgent orders versus ones with longer lead time
-
For customers willing to commit to buying a large quantity versus those that do not
The diagram below illustrates an example of where the pricing differs between small self-service customers and larger customers with a sales agreement.
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.
-
Price Setting - The defining of price and discount guideline values while considering all relevant factors (e.g. competitor prices, demand analysis, cost to produce products, etc.).
-
Price Execution - The application of price and discount policies at run-time. Quote optimization, enforcing policies, and evaluating profitability are some of the driving factors in successful price execution. It also includes:
-
The import and entry of prices.
-
The calculation at run-time of dynamic prices.
-
-
Price Negotiation - Deal negotiation guides sales representatives in achieving optimal prices and discounts for their customers using analytics and metrics.
-
Rating – The calculation of periodic invoice amounts for subscription and consumption based pricing.
CPQ's pricing features focus on the functions of price execution and price negotiation.
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.
- Price Execution automatically calculates base and list prices using values set by business policies. This is a best practice vs. sales user entry.
- Base Price – the highest, starting price for a product.
List Price – the dynamically calculated price that takes into consideration the specific customer, quantity, channel, etc.
Note: The following Commerce attributes contain the list price value:
The line item ‘Unit Price’ (
_price_unit_price_each
) from the sub-document Price Attribute Set.The charge item 'Unit Price' (
_chargeSet_unitPrice
) from the sub-document Charge Set.
-
Price Negotiation values are defined by a sales user but typically require approvals.
- Net Price - the quote-specific negotiated price that will display on the invoice line.
The following example of these unit prices.
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 |
YES |
Assignment of a Price for a BOM Item defined in the BOM Item Definition Table |
YES |
Recommended |
YES |
Prices defined through a Recommended Item Rule in Configuration |
YES |
Attribute |
YES |
Prices defined using Configuration Menu Attributes |
YES |
Configuration |
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.
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:
When this product is added to a transaction, the product price will display in the Line Item Grid as shown below.
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.
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.
-
Line item Price Attribute Set attributes are returned to Commerce by the Pricing Function for all productized pricing methods product pricing.
-
Line item Charge Set attributes are returned to Commerce by only the Pricing Engine.
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; |
Model Base Price |
Configurable Price |
_price_configurable_price |
BOM Price OR |
|
List Price |
_price_list_price_each |
Configurable Price; |
|
Pricing Rule Price |
_pricing_rule_price_each |
Pricing Engine Price |
|
Unit Price |
_price_unit_price_each |
Pricing Rule 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
-
Update Action
-
Add to Transaction (in transition to Commerce)
In Commerce/ Quoting
-
Configure Inbound/Commerce Invocation (when add from catalog or search or quick add)
-
Add to Transaction Actions: Add from Part Search, from Favorite, from Recommended Items
-
Modify Actions – both main document and sub-document
-
Update Line Items action (some other actions implicitly call this Action)
-
Recalculate (_calculate_price_action on sub-document)
-
Any main document and sub-document action of type Modify
-
Import Line Item
-
SaveBOM BML
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.
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:
-
Pricing Administrator refers to the Oracle CPQ user that is accessing CPQ Pricing Portal.
-
Product Manager refers to an Oracle Sales user that is accessing the CPQ Product Workbench (formerly known as Product Launch).
All CPQ customers can manage Pricing Engine prices via the Pricing Portal. For more information, refer to Pricing Portal. Customers using CPQ with Oracle Sales can also manage pricing using the Product Workbench. For more information, refer to Product Workbench.