In the previous chapter, we discussed how product configuration and CPQ automation help reps sell the right products at accurate prices. Adding the correct combination of products to a customer's quote is crucial for all businesses. It is equally important to sell products at the right price. For example, you may have a few customers who are eligible for special pricing and additional discounts. The same pricing structure may not be applicable for all your other customers. Also, you may be using different currencies in various countries. In addition, you may be selling products at a different price to your retail customers, compared to your wholesale customers. In these cases, how do you make sure the rep is always able to add the right pricing? Salesforce CPQ provides a lot of out-of-the-box functionalities that allow administrators to configure and tailor prices as per their needs. This helps reps automatically price products and add appropriate discounts. In this chapter, you will learn about the important pricing functionalities that CPQ offers.
In this chapter, we will be covering the following topics:
We know that Salesforce provides price books to maintain the list prices of products. A price book is a standard object, which is also available for non-CPQ users. When a rep is working on an opportunity, they can choose the price book from which the products and pricing data will be pulled. Most businesses have different pricing requirements based on the customer to whom they are selling – retail, wholesale, government, commercial, and so on. These requirements can be handled by creating different price books but maintaining this data takes more work. For instance, you may need to change a price book entry only for a specific customer, or price a product based on the volume the customer is buying. Businesses too typically need to adjust pricing year on year. In these and many more such complex scenarios, CPQ pricing helps rather than creating new price books for these scenarios.
When your reps create a quote from an opportunity, it uses the standard selected price book. However, pricing exceptions can be added automatically when needed using CPQ configuration. The same product from the same price book can show two different prices when added to a quote based on the business requirements. The same product can also be added at zero-dollar cost when sold in a bundle and can be changed when sold separately. This configuration could be used in a scenario where you are selling laptops. You don't want your rep to add a price for a charger when sold with the laptop. But you want to charge your customer for the same product when sold outside the bundle. CPQ can help configure these use cases using price rules and other automations.
Price books are mandatory for all products. Make sure the products are active and have been assigned to a price book. If a product entry is missing from your price book and a rep creates a quote using that price book, then that product won't be available until you add it to the price book.
Salesforce CPQ provides several pricing methods. A product's price is defined using the associated price method. Based on your business process, admins can decide which pricing method is appropriate. In the next section, let's learn about pricing methods in detail.
Quote the Price Book
At any point, a quote can be associated with only one price book and one currency. Only active price book entries can be added to quotes. A quote should have the same price book as the related opportunity. Incongruous price books will cause syncing from quote lines back to opportunity products to fail.
CPQ can adjust and modify the price of a product that is derived from the price book. Pricing methods can be used to perform price changes when a rep adds a product to a quote. In the previous chapter, while creating products, we saw that we had a section related to pricing, where we can define product pricing attributes. A pricing method is a standard field in the product object. Salesforce CPQ offers the following four pricing methods out of the box:
Let's learn more about each of these pricing methods and how an admin can configure them in CPQ. Each pricing method is a picklist value in the product object.
For the list price value, the price is retrieved from the price book entry of a product. This leverages the native price book and multi-currency features.
To set up the list price for a product, navigate to App launcher Products (select any product from your org). In this example, we are setting the price of the product Packt Pro 13 Laptop by navigating to Packt Pro 13" Laptop Edit Details Salesforce CPQ Pricing List.
The cost price is the cost of a product plus the markup. Unlike the list price, the cost price starts with a base price and the rep can adjust this price by an amount or a percentage. For example, when customers have raw materials like wood, metal, and gas, the pricing may often change but not the markup that reps have agreed with the customer. So, the cost plus markup allows an organization to control raw material pricing outside of a price book (which is unfortunately challenging) and into cost records, which allows for the integration of an admin process to keep them up to date.
In CPQ, the cost is a child object of the product object and is very similar to a price book entry as there can be only one cost per product per currency. CPQ selects the cost based on the currency of the quote. Even though there is no price book associated with the cost price, we still need price book entries for these products. Without the price book entries, these products won't be available for selection while adding to a quote. As an admin, let's create a product with the cost price. In this example, let's create a sample product Cost Price. To do this, first, we will create the product by navigating to App Launcher Products New Product Name. Enter Cost Price in the Product Name field and click Save.
Once the product is created, we can set the cost price by navigating to the product: Cost Price Salesforce CPQ Pricing Pricing method Cost Save.
Once you save the record, the product gets created, as shown here:
To add the product to the price book, click on the Related section of this product and then click on the button Add to Price Book. To define the cost for this product, create a cost record by clicking the New button. The following screenshot shows the price book entry and the cost record for our sample product, Cost Price:
When the cost price is configured for a product, the list price in the price book is set to zero.
Now, this product is ready to be added to a quote. A rep can add this product to a quote by navigating to any sample quote using the path Quote Edit lines Add Products Search Cost Price Select. This will take you to the Quote Line Editor (QLE) page, as shown in Figure 4.3. If the UNIT COST and MARKUP fields are not available in the QLE field set in the Salesforce org that you are working on, make sure your admin adds these fields to the field set.
As you can see in the preceding figure, the UNIT COST for our sample product, Cost Price, is $100.00, and when a rep adds a MARKUP of 15%, the NET UNIT PRICE is calculated automatically. The rep can also edit the MARKUP field in the QLE as needed.
The block price is tier-based pricing. Tier-based pricing means that the price of the product depends on the quantity that a customer is purchasing. The price is also based on the range of the quantity and not the individual product. This is similar to applying volume-based discounts. Let's consider an example where your company is selling printer paper and you want to set a block price for this product. To configure block pricing, let's define the size of the range and prices for the printer paper as per the range. An admin can set up block pricing as shown here:
Salesforce provides out-of-the-box functionality for block price configuration, which can be defined in the block price object. We are using the example shown in Figure 4.4 to configure the block price of our Salesforce instance. For this example, we are selecting Printer Paper A4, which is a sample product in the Salesforce org. To set up block pricing for this product, navigate to App Launcher Salesforce CPQ Products Related list Block Price New. This will open the screen shown here:
Following are a few important fields included in the block price configuration:
Similarly, we can create the other blocks and save the record. The following screenshot shows all three blocks in our example:
Any quantity between 1 and 100 will have a price of $25 when added to the QLE. Similarly, the price for other blocks will be applied as configured in Figure 4.6. Block price is the absolute price for the quote line and NOT the unit price that gets multiplied by quantity to arrive at the final price.
Let's see how the pricing is displayed when a rep adds a product to the QLE. For this, navigate to any sample quote and search the product you want to add to this quote. In this example, let's choose Printer Paper A4 by navigating to Quote Edit Lines Add Products Search Printer Paper A4 select.
We have added the same product two times, as shown in the preceding figure, to show the block price. For the first line, the quantity is 50 and it falls into tier 1, hence the list price is $25. For the second line, the quantity is 150, which falls into tier 2, and the price is $50.
What if your customer wants to buy just a few more additional units than the last block? In this example, let's say tier 3 ends at 300 and the customer wants to buy 305 units of paper. To help with this, CPQ provides another feature called OverageRate pricing. This is a CPQ special field. This feature allows us to define the per-unit price for any quantity above our highest tier.
The block price is the price for the applicable block + (additional units *overage rate).
In our example, let's set the OverageRate price as a dollar for each additional unit. The price for 305 units of paper will be the tier 1 block price ($75) + OverageRate per unit ($5).
To configure the OverageRate, admins need to create a special custom currency field in the block price object. To do this, navigate to App Launcher Object Manager Block Price Fields & Relationship New Currency Next Field Name OverageRate (API name OverageRate__c) Next Save. This is a one-time setup.
In this field, admins can define the additional per unit price beyond the final block. For this example, we are creating an Overage Rate for Printer Paper A4. To do this, navigate to App Launcher Salesforce CPQ Products Related list Block Price Edit and update OverageRate. The following figure shows the OverageRate configuration:
In this example, we have added an OverageRate of $1 for the final block.
In this pricing method, the price is calculated as a percentage of its parent quote, quote line group, or bundle total price. For example, when you go to a restaurant, you calculate the tip as a percentage of your total bill amount. A percent of total (PoT) method is generally used for the subscription product sales process. When the pricing method for a product is set as a percentage of the total, Salesforce CPQ automatically calculates the price.
For example, your company is selling electrical equipment, and Electrical Installation is a product in your Salesforce org. The cost of the installation will be a percentage of the total cost of the electrical equipment. Admins can configure this by navigating to App Launcher Products Electrical installation Edit. This will take you to the following screen:
On the preceding screen, let's learn about a few important fields related to PoT calculations:
Let's see how the price gets calculated when the rep adds the example product Electric Installation to a quote. To do this, navigate to any quote in your organization: then go to Edit Lines Add Products Search Electrical Installation Select.
When you add only Electrical Installation (a product in the Salesforce org) to the QLE without any other products, the price will be zero as there is no base price to calculate the percentage of the total. Now, let's add another product, Electric Door lock (this product has a pricing method of List). When you are implementing this in your org, you can add the product as required for your implementation. As shown in the following figure, the price of the product Electrical Installation is calculated as 10% of the net price of the other products (in this example, Electric Door lock):
The pricing methods that we have seen so far are configured by the Salesforce admin and a rep can use the automated calculations. CPQ also allows reps to manually override price settings. In this scenario, the rep can adjust the prices in the QLE. If your business process needs this functionality, admins can select the field Price Editable in the product record. Use this setting with caution as all reps may not be aware of the implications of incorrect pricing. Price editable is often used in negotiated selling environments and paired with appropriate approval rules. This allows sales reps to modify pricing as a negotiation tactic while ensuring all sales are financially sound by requiring appropriate approvals.
We now have learned how to customize the different out-of-the-box CPQ pricing methods. In the next section, we will learn about another pricing functionality that is specific to subscription products and the associated pricing.
MDQ allows you to break a long subscription into smaller blocks. This will be useful for scenarios where you have a subscription for 2 years and you want to provide a special discount only for the first year. This flexibility in special-term pricing will help reps to negotiate and close deals faster. Ramp billing and milestone billing contracts are common use cases for MDQ.
MDQ allows you to segment a subscription product multiple times within a single quote in the QLE. Each segment will have its own quantity and discount. For each segment, a separate quote line will be created. Admin can define the segment duration, for example, as either monthly, quarterly, or yearly.
Let's see how an admin can set up a product as an MDQ product. Navigate to the product for which you want to set up an MDQ using the path App Launcher Product Related Price Dimension New. In this example, we are selecting the sample product VPN License. This will open the New Price Dimension screen as shown here:
Let's learn how to configure a few important fields during price dimension creation:
Important Note
There must be a dimension created for each combination of price book/currency/time period. You cannot have multiple time-based price dimensions for the same currency.
For most of the fields under the Pricing section, as shown in Figure 4.11, you can inherit the values from the product. However, these values can be overridden when needed. If you set the field Unit Price, then this price will override the price inherited from the price book.
Let's see the end user experience for MDQ. To do this, navigate to any quote, then Edit Lines Add Products and add the MDQ product that your admin has configured. As shown in the following figure, when an MDQ product (in this example, VPN License) is added to the quote, the price dimensions are displayed as configured:
In this example, the price for each quarter is displayed. Clicking the desegment icon shown in Figure 4.12 will hide these segments in the QLE. When we click the same icon again, the segments reappear. A rep can display the segments as needed. CPQ creates a quote line for each segment. So, for the aforementioned example, this would be represented as four quote lines. This can have implications downstream with reporting and should be taken into consideration. We will learn more about subscriptions in Chapter 7, Creating Contracts, Amendments, and Renewals.
Before we learn about discounting, it's important to understand how CPQ calculates the net price from the original price. There is a specific order in which the CPQ pricing engine calculates net prices. Let's learn about the pricing structure in the next section.
This pricing structure describes how Salesforce CPQ applies different prices and discounts to calculate the net price from a list price. The prices defined in each box, such as the original price, list price, and so on, are out-of-the-box features provided by CPQ. This model follows the top-down approach for calculating prices and is also called the price waterfall.
As shown in the preceding figure, let's learn what each of these prices refers to:
Out of the box, waterfall prices will be calculated as applicable. If we need to switch the waterfall order, it's not a standard process – admins need to use special fields and customization. Special Fields are a specific CPQ feature and admins need to consult Salesforce Help (https://help.salesforce.com/s/articleView?id=000312751&type=1) to access the details to use this functionality.
We have just learned how admins can set different pricing methods at the product level and how the price waterfall applies these prices. Let's learn about CPQ discounting and how it can be configured and customized for various business scenarios.
When a rep is adding products to a quote, most business scenarios will need discounting. These discounting requirements may be specific to a product, customer, partner, quote, or the quantity of the products. CPQ provides several out-of-the-box features for configuring discounts. Let's look at some of the main configurations in the following subsections.
Discount schedules are system discounts based on the following:
While configuring discount schedules, the upper bound is excluded, and the lower bound is included in the discount tiers, like block pricing. A discount schedule must be assigned to a product's Term Discount Schedule field for it to be based on subscription term. Salesforce CPQ evaluates the schedule's discount tiers by subscription term length instead of quantity. To create a discount schedule, navigate to App Launcher Discount Schedule Object New. This will open the New Discount Schedule screen, as shown here:
Following are a few important fields in discount schedule creation:
If the buyer purchases a 5-month subscription, then a 10% discount will be applied to the list price. In this example, if there are no additional discounts, the net price is calculated as ($250 - ($250 x 10%)) x 5 months = $1,125.
If the buyer purchases 60 courses, the pricing will be calculated as follows:
If there are no additional discounts, the net price amounts to $337.5 + $300 + $112.5 = $750.
By default, the discount schedule is based on quantity fields, which can be changed to custom fields as per the business needs. After saving the discount schedule, you can define the tiers. Navigate to Discount Schedule Edit Tiers. In this example, we schedule a discount schedule for Cartridge, a sample product in the Salesforce org. This will open the Edit Tiers screen as shown here:
The admin has defined three sample tiers, as shown in the preceding figure. Since the admin selected Discount Unit as Percent, we see the Discount (%) column. If we select Discount Unit as Amount, then we see the corresponding field. Also, if we have multi-currency enabled at the Salesforce org level, additional fields will be displayed.
Now that we have created the discount schedule, let's see how an admin can link this to a specific product. To do this, navigate to App Launcher Product. For this example, search and select Cartridge and then click Edit. This will open the screen shown here:
As shown in the preceding figure, the Discount Schedule field is used to apply the volume-based schedule to a product. It is applied based on the quantity. In this example, we linked it to the Printer Toner Cartridge product.
The Term Discount Schedule field is the discount schedule associated with the subscription term of the quote line. For the term discount, we can use only Range and not Slab.
Discount schedules can also be applied to a product feature or an option level (we discussed features and option levels in Chapter 3, Configuring CPQ Products). The one that is most specific takes precedence. For example, the discount schedule at the option level overrides the discount schedule at the feature level. The discount schedule hierarchy from highest to least priority is as follows:
Let's view the sample discount schedule in the QLE, shown in Figure 4.17. To demonstrate the discount, schedule calculations for two lines have been added. The first line has a quantity of 200 units, which is eligible for a 15% discount as per the discount tier set up. So, the net price is 15% of the list price ($125). For the second line, the quantity has been updated to 50 units, which is eligible for the 10% discount. The net price for line two is 10% of the list price ($125).
In most business scenarios, a fixed price per unit will be adequate. In addition, pricing methods, discounting tools, and subscription pricing will suffice. For complex pricing requirements, Salesforce CPQ provides a powerful configuration – price rules, which can be customized. Let's learn about price rules in the next section.
Price rules are used to update a product's price in quote lines and automate price calculations in CPQ. They are an extension of out-of-the-box CPQ functionality. These rules are helpful for your business when you have products that change in response to the presence of other products in a quote. Price rules allow admins to conditionally update the value of any field (not only the price) in the quote, quote line, or quote line group. Price rules are useful if you need product values to dynamically change based on other products in the quote. For example, if your rep wants to sell two ink cartridges and one printer paper whenever a printer is sold, then a price rule could be created to automatically add two cartridges and one printer paper when a printer is added to the quote. Price rules also can handle dynamically changing data for subscriptions by utilizing MDQ (multi-dimensional quoting). Price rules can also be used in quote templates, which we will learn about in Chapter 5, Generating and Configuring Quote Template.
Like product rules, price rules also follow the if/then structure. Price rules have a price condition, scope, and action. In the previous chapter, we saw that product rules mainly control the user interface of a QLE or a configurator. You can hide/show/enable/disable products. Product rules restrict the visibility of products based on conditions. They also provide alerts and validations to control product additions to a quote. Price rules are different and much more powerful, and they can replace standard Salesforce configurations such as Workflow, Flow, or Apex logic.
Important Note
Salesforce CPQ does not recommend that any of this logic should be used with quote lines or subscriptions.
Price rules inject value into a quote or quote line object field.
Price rules will not work with the CPQ Legacy Calculator. As a prerequisite, we need to enable the advanced calculator in the CPQ package settings. To do this, navigate to Setup Installed Packages CPQ Pricing and Calculation Use Legacy Calculator, uncheck the Legacy Calculator checkbox, and click Save. This action will display the message shown here:
Click on Authorize new calculation service and then click Allow. Once you refresh the screen, the popup (warning) shown in the preceding figure will be disabled.
Let's create a price rule to understand the concept. This price rule can be extended to build complex rules with multiple conditions. For instance, Packt Corp is selling laptops to multiple customers. An account object has the field Account Type, which captures the type of the customer. There will be different types of customers in the Packt Salesforce org, including direct customers, channel partners, technology partners, and many more. For example, we want Salesforce CPQ to automatically calculate and apply discounts based on the account type. When a laptop is sold to a direct customer, we would like the discount to be 10%; for channel partners, 15%; and for technology partners, 25%. For accounts where the tier is blank, no discounts should be applied. We need to create the account type in the quote object with the same picklist values as we have in an account object.
Let's learn how admins can configure this scenario using price rules. To create a price rule, navigate to App Launcher Price Rules New. This will open the New Price Rule window as shown here:
Price rules can be created to target either the configurator or the calculator. In the preceding figure, we can view a few important fields involved in price rule creation, which include the following:
For this example, let's choose On Calculate.
Now let's create a price condition for an example product where we want to provide different discounts based on the account type. The price condition determines when the rule should trigger. To create a price condition, navigate to App Launcher Price rules. Select the example product account type discount for which you want to create the rule by navigating to Account Type Discount Price Conditions New. This will open the screen shown here:
Price conditions are like the product rule conditions that you learned about in the previous chapter. As shown in Figure 4.20, a few important fields in price conditions include the following:
For this example, we are setting Filter Type to Value.
Based on your business requirements, other configurations can also be used to define price conditions. For using formulas, the standard Salesforce formula syntax can be followed. A price condition record is unnecessary if you want your price action to execute irrespective of any condition.
Let's create a price action to update the field values – in this case, discount.
A price action describes what the price rule should do, and which value it should update.
We have created a price rule and a price condition to apply the account type discount. In this section, we will define the price actions, which are the actions that the rule will perform once the conditions are met. First, navigate to App Launcher Price Rules. In this example, we select the price rule Account Type Discount. Then, create a price action by navigating to Price Action New. This will open the screen shown here:
A few important fields while creating a price action include the following:
Let's verify the end user experience for this sample price rule. Verify that the account type related to a sample quote is set to one of the three values Customer - Direct, Customer - Channel, or Technology Partner (these are sample account types in our Salesforce instance). For this example, let's choose Technology Partner. To verify the discount price rule, navigate to Quote Edit Lines. Add any product and the corresponding discount will be applied automatically in the quote line Additional Discount field. This works for any product because the Product lookup was left blank in the initial rule configuration.
In the Creating a price action section, we saw that there are five sources where we can provide the source field to update the target field. One of the price action sources is the lookup object. In this section, we will see how a price rule can be created using a lookup object. In the previous example, we created a price rule to apply discounts based on the account type field. This use case may also have additional requirements such as applying these discounts only for hardware products. We need to verify the product family (this is a standard field for the product object) along with the customer type.
We can create multiple price rules for this scenario but as the attributes increase, the logic becomes complex. We can use a lookup object to store this custom data. Using this lookup object, we can define a single price rule that will automatically apply a discount.
As shown in Figure 4.22, a custom object is created where you list all the attributes that need to be stored and use the fields of that custom object in the price action source. To demonstrate this, we have created a custom object called Account Type Discounts Name and added test data.
The preceding figure shows the sample data for applying discounts. When the rep selects an account, Customer - Channel, and adds a product belonging to the product family Service, then a 10% discount should be applied automatically. Additional attributes can be added to this custom object as required. Now, let's create a price rule using the lookup object. Navigate to App Launcher Price Rules New. This will open a New Price Rule window as shown here:
Compared to the previous price rule in Figure 4.19, where Lookup Object was blank, in this price rule, we update Lookup Object with the custom object value Account_Type_Discounts__c and then click Save. CPQ knows that this custom object holds the data to configure the price rule.
Now let's add price conditions as required. Refer to the previous price condition for the navigation path and syntax.
Next, create a lookup query associated with the price rule. The lookup query must return exactly one result. When the lookup query returns multiple records (rows), CPQ will display an error: Multiple results returned from the query. Please contact your Salesforce CPQ administrator while executing the price rule. Salesforce would prefer that you keep the number of lookup queries in your org at less than 10. Also, the same custom object can support multiple queries as long as the query returns a single result. Lookup queries will filter the data from the lookup object.
A user can select the attributes for the quote. In this example, the user selects a product family – Service, and account type – Customer - Direct. To create a lookup query, navigate to App Launcher Price Rules. In this instance, select the price rule Discount PR - Lookup Related Lookup Queries New. This will open the New Lookup Query screen as shown here:
Multiple lookup queries can be created as required. To satisfy the use case of providing a discount based on product family and service, another lookup query is needed for this rule. Once the lookup queries are configured, we are ready to create a price action.
To create a price action, navigate to App Launcher Price Rules. In this instance, select the price rule Discount PR Lookup Price Action New. This will open the screen shown here:
As shown in Figure 4.25, Target Field – in this example Discount (%) in the quote line – is updated by Source Lookup Field (the discount from the lookup object).
You can verify the end user experience by adding this sample product to the QLE. Based on the lookup object data, the corresponding discounts will be applied automatically. Salesforce debug log will create a log entry for the actual query and results (if any). This is quite useful during troubleshooting.
In this chapter, you learned how pricing and discounting can be automated using CPQ. We also discussed the creation of price rules, which help control quoting and optimize sales. These CPQ pricing concepts can help customize use cases as per company-specific business processes. In addition, we learned about out-of-the-box CPQ pricing methods: list prices sourced from price book entries, cost prices sourced from costs, block prices featuring tiered pricing, and PoT where the price can be calculated based on other line items.
We looked at MDQ basics, which helps break a long subscription into smaller pieces to treat each piece differently. We also covered how discount schedules can be used to create volume-based discounts considering the quantity or terms of quote lines. This pricing automation can help reps accurately create quotes for customers and close deals more quickly, which helps increase revenue. In the next chapter, we will learn how we can configure quote templates, generate quotes, and send them to customers using CPQ.
3.14.141.115