As organizations grow, their pricing strategies become increasingly complex.
One of the most common pricing scenarios involves applying discounts at the quote level rather than individually discounting each line item. Salesforce Revenue Cloud’s Discount Distribution Service element addresses this need, providing a powerful way to apply quote-level discounts while maintaining pricing control.
This post walks you through everything you need to know to implement and leverage this feature effectively.
What is the Discount Distribution Service?
The Discount Distribution Service element in Revenue Cloud’s pricing procedures allows you to apply discounts at the quote header level and automatically distribute those discounts across eligible line items according to your specified rules.
Key capabilities include:
- Applying discounts as dollar amounts, percentages, or target overrides
- Distributing discounts equally or proportionally across line items
- Enforcing minimum unit prices for quote lines
- Tracking remaining discount amounts that couldn’t be applied
- Working seamlessly with Einstein AgentForce for natural language discounting
For organizations moving from Salesforce CPQ, the target override discount type is similar to the familiar “Target Customer Amount” functionality, allowing users to specify a final quote amount rather than calculating discount percentages.
Implementation Requirements
Before setting up the Discount Distribution Service, ensure you have:
- A functional Revenue Cloud implementation with Salesforce Pricing enabled
- Required fields added to your quote/order object and line items
- Context definition mappings for these fields
- An understanding of your pricing procedures and how pricing elements interact
Required Field Setup
You’ll need several fields on your quote header and lines to implement the Discount Distribution Service:
Quote Header Fields
Field Name | API Name (example) | Type | Description |
---|---|---|---|
Discount Type | adderDiscountType__c | Picklist | Values: Amount, Percentage, Override |
Distribution Logic | adderDistributionLogic__c | Picklist | Values: Equal, Proportionate (not “proportional”) |
Distribution Type | adderDistributionType__c | Picklist | Values: NetUnitPrice, ItemNetTotalPrice |
Discount Value | adderDiscountValue__c | Number | The discount amount, percentage, or target amount |
Total Remainder Amount | totalRemainderAmount__c | Currency | Stores any unapplied discount amount |
Important: The field for distribution logic must use “proportionate” (not “proportional”) despite what earlier documentation may indicate.
Quote Line Fields
Field Name | API Name (example) | Type | Description |
---|---|---|---|
Minimum Net Unit Price | minimumNetUnitPrice__c | Currency | Floor price below which discounts won’t be applied |
Context Definition Mapping
Once your fields are created, ensure they’re properly mapped in your extended Sales Transaction Context Definition:
- Navigate to Setup → Context Definitions
- Open your extended Sales Transaction Context (e.g., “EXT_SalesTransactionContext”)
- Map each field above to the appropriate attribute in the context definition
Setting Up the Discount Distribution Service Element
To add the Discount Distribution Service to your pricing procedure:
- Navigate to Expression Set Templates in the App Launcher
- Open your current pricing procedure version
- Create a new version (if needed) or edit your existing one
- Add the “Discount Distribution Service” element as the LAST element in your procedure
- Critical: This element must be placed after all other pricing elements
Element Configuration
Within the element configuration:
- Set Floor Price Limit: Check this if you want to enforce minimum unit prices
- Participating Products: (Optional) Define which products are eligible for discounting:
- Use a lookup table with product criteria, or
- Define conditions directly in the element
- Input Rule Variables: If using a lookup table, map your product variable
- Input Variables: Map all required fields:
- Header level: adderDiscountType, adderDiscountValue, adderDistributionLogic, adderDistributionType, subtotal
- Line item level: listPrice, quantity, lineItem, inputUnitPrice, minimumNetUnitPrice
- Output Variables: Map the required output fields:
- discountValue, discountType, distributionType, netUnitPrice, subtotal, totalRemainderAmount
- Floor Price Limit: If checked, configure the totalRemainderAmount mapping to capture unapplied discounts
Once configured, save and activate your pricing procedure version.
Limitations and Considerations
There are some important limitations to be aware of:
- Not Compatible with Derived Pricing: As of Spring ’25, this element cannot be used in pricing procedures that also include derived pricing elements.
- Position in Pricing Procedure: Must be the last element in your pricing procedure.
- Manual Recalculation Required: Unlike some CPQ functionality, changes to discount fields don’t automatically trigger recalculation of the quote. You’ll need to either:
- Implement a custom Lightning Web Component to apply discounts and recalculate
- Create a custom button using Apex to trigger recalculation
- Instruct users to make a change to another field (like quantity) to trigger recalculation
- Minimum Price Behavior: Minimum unit price limits are only applied when distribution type is set to netUnitPrice.
Agentforce Integration
One of the most powerful features of the Discount Distribution Service is its compatibility with Agentforce. This allows sales reps to use natural language to apply discounts.
For example, a rep can simply ask:
“Set the quote total to $1,200”
Agentforce understands this request, sets the appropriate discount fields, and triggers the necessary recalculation.
To enable this functionality:
- Ensure Agentforce is properly configured in your org
- Verify the Discount Distribution Service is properly set up
- Train your sales team on the appropriate prompts to use with Agentforce
Testing the Implementation
After setting up the Discount Distribution Service, test thoroughly with these scenarios:
Scenario 1: Amount-Based Discount
- Create a quote with multiple products
- Set Discount Type to “amount”
- Set Distribution Logic to “equal” or “proportionate”
- Set Discount Value to $250
- Trigger recalculation
- Verify the discount is applied correctly across eligible lines
Scenario 2: Target Override with Minimum Prices
- Create a quote with multiple products that have minimum unit prices set
- Set Discount Type to “override”
- Set a Target Amount that would normally push some products below their minimum
- Trigger recalculation
- Verify products don’t go below minimum prices and check the remainder amount
Scenario 3: AgentForce Integration
- Open a quote in your org
- Ask AgentForce to set the quote total to a specific amount
- Verify the discount is applied correctly
Practical Example
Here’s a real-world example of how this works:
- A quote has three products:
- Product A: $100 × 5 qty = $500 (Minimum price: $80)
- Product B: $200 × 3 qty = $600 (Minimum price: $160)
- Product C: $50 × 2 qty = $100 (Not eligible for discounting)
- Total quote amount is $1,200
- Sales rep wants to offer a 20% discount:
- Sets Discount Type to “percentage”
- Sets Discount Value to 20
- Sets Distribution Logic to “proportionate”
- Sets Distribution Type to “netUnitPrice”
- After recalculation:
- Product A: $80 × 5 qty = $400 (hit minimum price)
- Product B: $160 × 3 qty = $480 (hit minimum price)
- Product C: $50 × 2 qty = $100 (unchanged)
- Total after discount: $980
- Remainder amount: $20 (couldn’t be applied due to minimums)
Best Practices
- Use Custom Lightning Web Components: Create a custom component to handle discount application and automatic recalculation.
- Clear Documentation: Ensure your sales team understands how the different distribution types and logic options affect discounting.
- Train on AgentForce: Provide clear guidance on the natural language prompts that work best with AgentForce for applying discounts.
- Test Thoroughly: Verify discount behavior with different combinations of products, minimums, and discount types.
- Consider Approval Processes: For large discounts, implement approval processes to maintain margin control.
Conclusion
The Discount Distribution Service provides powerful capabilities for quote-level discounting in Salesforce Revenue Cloud. While there are some limitations to be aware of, its flexibility allows organizations to implement sophisticated discounting strategies while maintaining pricing control through minimum thresholds.
By following the implementation steps outlined above and considering the best practices, you can provide your sales team with an intuitive tool for applying discounts that both streamlines their workflow and protects your organization’s pricing integrity.
Want to learn more about Revenue Cloud features? Subscribe to our newsletter for regular updates and tips, or book a consultation if you need personalized assistance with your Revenue Cloud implementation.