Skip to main content

Salesforce CPQ Pricing Models

This post briefly covers the different pricing models which Salesforce CPQ has currently :-

1. Discount Schedule

It has two types :-

    a> Slab
    b> Range

Steps to implement :-

- Create a discount schedule record , select slab or Range as type and Percent/Amount as discount unit.
- Create discount tiers with the unit range.

Tier Name  Lower Boundary Upper Boundary Discount(%)
1-10 Units 1 11 0
11-20 Units 11 21 5
21-30 Units 21 31 10
30+ Units 31 41 15

 - Add this discount schedule to the Product you want to apply the pricing.

Calculation :-

if Type = Slab , List price = $100 and Quantity = 11
Total Price = Tier 1 Quantity * List Price * (1- Disc.%) + Tier 2 Quantity * List Price * (1- Disc. %)
                  =  10 * 100 * (1-0)  + 1* 100 * (1-0.05)
                  =  1000 + 85 = $ 1085

if Type = Range, List price = $100 and Quantity = 11
Total Price = Total Quantity* List Price * (1- Disc.%)
                  =  11 * 100 * (1- 0.05) = $ 935

Note : -

  • Upper boundary excludes the value , say for example for Tier Name (1-10 Unit) has upper bound = 11 , so 11 is excluded.
  • Discount Schedule at Product Feature level get precedent over the Discount Schedule at Product Option Level.
2. Block Pricing + Overage Rate

Steps to implement :-

- Go to product record and update the "Pricing Method" field to BLOCK.
- Create Block Prices record , this would be a related record on the product.
- Associate the block price records to a price-book.

Tier Name  Lower Boundary Upper Boundary Price Overage Rate
1-10 Units 1 11 15
11-20 Units 11 21 30
21-30 Units 21 31 45
30+ Units 31 41 50 $25

- Create a custom field on "Block Price" object called "Overage Rate" as mentioned in the table above.

Calculation :-

If Quantity(Number of units) =  31
Block Price = Price of block + (Quantity - minimum quantity of block)* Overage
                    = $50 + (31-30)* 25 = $75
                   
3. Block Pricing+ Discount

You can use it as an alternative approach to Block + Overage

Steps to implement :-

- Go to product record and update the "Pricing Method" field to BLOCK.
- Create Block Prices record , this would be a related record on the product.
- Associate the block price records to a price-book.

Tier Name  Lower Boundary Upper Boundary Discount(%) Price
1-10 Units 1 11 $100
11-20 Units 11 21 $150
21-30 Units 21 31 45%
30+ Units 31 41 50%

- Create a discount Schedule records on the product and add the last two rows highlighted in BLUE
   as Discount Tier Records.

Calculation :-

Unit Price =  $10
if quantity(# units) =  32
Total Price = Block Price + Extra Unit * Unit Price * Discount Percent
                  = $150 + 2 *10* 0.45 = $150 +$9 = $159

4. Multi Dimensional Quoting

If there are different multiple yearly/monthly segments to a subscription product this method is your method of choice.

Steps to implement :-

- Create the price dimension (related list on Product) records.

Dimension Name Type Unit Price
Maintenance Yearly
Activation One-Time $50

5. Compound Discount

This pricing method applies the discount on each unit of product.

Steps to implement :-

- Update the "Compound Discount (%)" field on Product.

Calculation :-

Discount Percent  =  1 / Quantity^(Compound Discount/100)
If Unit Price = $100 , Quantity = 2 & Discount = 25%

Discount Percent = 1/2 ^(25/100) = 1/2^0.25 = 0.84
Net Price =  Unit Price * Discount Percent = $100 * 0.84 = $ 84

6. Percent of Total Pricing

This pricing model will apply when Subscription Pricing is selected as "Percent of total"  for a product.
It applies on the list price.

Steps to implement :-

Update these fields on Product
Subscription Pricing = Percent of Total
Percent of total Base = List

Calculation :-

Percent of total (%) = 15
Total Price = $100

A maintenance product option is set to percent of total with above mentioned configuration
Maintenance price = Total price * Percent of total(%)
                                = $100 * 0.15 = $15


7. Cost + Markup

Steps to implement :-

- For this pricing model please select "Pricing method" field on product to COST

Calculation :-

if Cost price = $100 , Discount = 15 %  ,  Markup = $10 & Quantity =11
Total Price  = (Cost Price * (1- Discount%) + Markup) * Quantity
                   = ($100 * (1-0.15) + $10 ) * 11
                   = $95 * 11 = $1,045
                                         




Comments

Popular posts from this blog

Einstein Bot user authentication

Using Bot for data manipulation use case in your company requires need of implementing some extra security layer to make it spoof proof. One of exciting salesforce feature we have is the well known Einstein Bot which many companies have implemented. I am going to cover detail step-by-step implementation of User validation use case using encrypted token. STEP-1: Create a Site & Site User go to setup > Sites & Domains > Sites Create a Site and make your user as "Site Contact". This is a prerequisites for live agent or Embedded Service setup. STEP-2 : Create a Embedded Service(formerly snap-ins) go to Service setup > Embedded Service Create a new Embedded Service Deployment record and copy the embedded service code snipped generated in a notepad. STEP-3  : Create a Visualforce page to test the chatbot (it will simulate the actual web portal which is going to consume the embedded service snipped.) BotController.apxc public class BotControlle...

Dynamically populate lightning:combobox

In order to dynamically populate values in lightning:combobox using javascript we can create a list variable and push the values. We also require the values like ids associated to the particular option for back-end logic. For example  : If we want to show the list of contacts using lightning:combobox component where the option should display the contact name but the value should be the contact id which will be used for back-end logic For this we can create a temporary Map variable in our lightning component and set the value and label parameters of the lightning:combobox. Here is the code for this component Combo.app <aura:application extends="force:slds" access="global" description="Lightning Combo Demo"> <c:Combo_Cmpt/> </aura:application> Combo_Cmpt.cmp <aura:component implements="flexipage:availableForAllPageTypes" access="global" controller="ComboController"> <!-- ...

Use of wrapper class in lightning:datatable

As you guys know the wrapper class concept in visualforce pages , we generally use it to create a data-table which fetches data from different objects or if we want to redirect user to some other page on click of a link as one of the column of data-table.        For example we want a column "Account Name" on the data-table which is a link and once user clicks it should redirect respective account record. Or , suppose we want to display a column with some images or icons as a visual indicator Or what not. These requirements require us to use a wrapper on the lighting data-table (lightning:datatable) I am going to use my previous account search example ( Account Search Lightning Component ) and explain the use of wrapper. AccountSearchWrapper.app <aura:application extends="force:slds" access="global" >     <c:AccountSearchWrapper /> </aura:application> AccountSearchWrapper.cmp <aura:component controller="...