This is the third edition of my Salesforce CPQ series which is intended to give an overview of CPQ concepts and how they can be implemented in Salesforce CPQ. I would recommend you to go through the earlier editions on Salesforce certified CPQ Specialist resources and Salesforce CPQ – C in CPQ – Configure Products & Bundles before reading this through.
This post is intended to cover specific features related to pricing & discounting after configuring the products, using Salesforce CPQ. I didn’t want to make it too detailed since we already have quite detailed documentation on SteelBrick’s CPQ Knowledge base.
Ok! So, let’s assume the product manager has configured the products to be sold by the sales agents in your company. The next step is to finalise the pricing related aspects of the new products.
Pricing & Discounts
There are 4 types of pricing mechanisms which can be used to configure prices:
This is used to sell the products based on the list price configured in the price book. Depending on the pricebook to which the product is added, and selected in the quote, the product appears for selection.
This is used to sell the products based on the cost of the product, example: handheld devices can be sold at 10% markup more than the actual cost price.
This can be used if we want to sell a product in blocks. Example, Google Drive uptil 15 GB is free, but 15 GB uptil 100 GB will cost $1.99/month and 100 GB uptil 1 TB will cost $9.99/month. Note that it is specified as “uptil” because Salesforce CPQ considers lower bound as inclusive and upper bound as exclusive. So, 100 GB in this case will fall into the third tier and not the second.
Block pricing can be used along with one discount schedule for tiered pricing, example in the above Google Drive use case, the pricing model could be so that uptil 100 GB, the cost is $9.99/month, and every GB above that will cost about $0.05/month.
Percent of Total
This pricing method can be used in the case of products who’s pricing depends on the prices of rest of the products bought in same bundle. Example: In the case of Gold ornaments, the making charges are calculated based on the weight of the gold ornament being sold (generally 10% of the ornament cost). In this case, the product can be priced using the pricing method ‘Percent of total’ with the actual ornament being sold to be included in percent of total calculation.
At a high level, pricing works as follows. To be read as, Regular price is derived from list price with the application of discount, premium (or markup in the case of cost price)
- List price -> Discount / premium -> Regular price
- Regular price -> Discount Schedule -> Customer Price
- Customer Price ->Partner Discount -> Partner Price
- Partner Price ->Distributor Discount -> Net price
Price dimensions can be used in cases where there are multiple fees – example: to setup a Fixed broadband connection at home, there could be a one-time installation fee, one-time charges for the modem / router and then a recurring fee every month for the broadband service.
Price dimensions can also be used in the case of price differentiation on an yearly basis, example Google could give a first-year price of $30/user and then an yearly price of $40/user for it’s GSuite products. In this case also price dimensions can be used.
Multi-dimensional quotes have their own quote line editor view and also the document generated as a tabular column. First Segment Term end date and Subscription Term impact the dates in this case
Price rule configuration is similar to product rules. The price rules is a separate object and is used to inject prices for one or many products during different stages in the quote creation, example application of discounts or overrides prices based on a configurable lookup object. Price rules have the following information:
- Product: If a price rule is targeted at a specific product, the product to which the price rule is to be applied can be selected at the price rule level thereby reducing one price condition.
- Evaluation Scope: Calculator (Quote Line Editor) or Configurator level
- Configurator Evaluation Event: Edit, Save, None. Indicates if the price action should be triggered while editing in configurator or while saving, for those rules which have evaluation scope as Configurator.
- Calculator Evaluation Event: Before calculate, after calculate, on calculate, on initialise events. Indicates the event at which the price actions should be performed in the calculator.
- Lookup object: Price rules can also be configured separately as a lookup object based on the requirements at hand instead of creating multiple rules. This will significantly reduce the number of rules.
Since there are many events and scope, it is advisable to use price rules instead of workflow rule or custom triggers to ensure consistency and avoid racing conditions.
There can be multiple pricing conditions which can be run to identify if a given quote line is applicable for the price action. Advanced condition with combination of AND / OR can be written for price conditions. The price condition can also specify the product code or a product family to which the price action should be done, as mentioned in the screenshot.
Pricing actions change the prices of products in the quote as per the configuration. In this case, a discount % of 10% is applied on the mentioned product. Price action can also be used to apply discounts or override part of price action. One example is the case where Special Price and Special Price Type can be set for contracted pricing or to override discount schedules.
Actions on Quote (example, editing markup % or changing price book) will not dynamically reflect prices on quote line immediately. We need price rules separately or we need to edit quote lines and recalculate. Separate scripts to perform the same in bulk from backend is also possible.
Discount schedules can be used to give discounts (absolute amounts, % discounts or volume discounts). They can be mapped at different places – product feature, product option, product, Account (contracted prices), Order, Order Product, Pricebook, Quote.
An example of contracted prices is shown below, wherein a contracted price at account level is configured such that a 20% discount is to be applied on the list price of the product ‘Google Pixel 2’.
When the sales agent searches for this product in the Quote line editor, the list price is shown as given below:
Once the sales agent selects the product, the contracted price is applied based on the discount schedule record to show the net price after the 20% discount as given below:
Contracted prices apply only when adding a product. Adding a product and then creating a contracted price will not automatically apply to an already added product.
Alternatively, discounts can also be given on more complex calculations using price rules to inject the discounted price. This can be done using one price rule with multiple price conditions which can have AND / OR logics to perform one price action as explained in the price rules section above.
I hope this page helps you in your learning journey. Please feel free to add any of your blogs or point out to any missing / incorrect details in the comments section.