Wednesday, 8 July 2026

Unified Pricing Management in D365FO SCM

 Pricing Management

Traditional pricing challenges

  • Many organizations with legacy ERP use separate trade-agreement engines, discount modules, and manual spreadsheets for B2B and B2C pricing. This creates pricing silos, inconsistent rules and lost margin.
  • With omnichannel growth, real-time pricing, personalised offers, and multi-attribute decision logic are required, which legacy trade-agreement logic struggles to support.

Strategic value of modern pricing

  • Having one pricing engine across sales channels ensures price coherence, responsiveness and governance.
  • Attribute-based pricing allows companies to define rules based on customers, products and order context — enabling flexible, fine-tuned pricing.
  • Composable pricing (base price + margin uplifts + discounts + charges + rebates) allows full visibility into price build-up and improved margin control.

UPM in D365FO: Overview of the solution

What is Unified Pricing Managment?

UPM is the pricing module in Dynamics 365. It uses attribute-based rules and a unified data model to determine final selling prices.

Key capabilities:

  • Price attributes (customer, product, order) for rule criteria.
  • Price component codes (atomic building blocks of price calculation).
  • Price structures and price trees (sequence logic determining which component codes apply and in what order).
  • Trade agreements, margin adjustments, discounts, rebates and charges all now managed under this engine.

Key concepts & terminology

Price attributes & attribute groups

  • Price attributes are the fields that define differentiators for pricing: e.g., Customer Region, Customer Segment, Product Brand, Product Size, Order Channel, Delivery Mode. They come from customer master, order header, product master or order line.
  • There are three sources: Customer attributes (in customer master), Order header attributes (in sales order), and product attributes (in released product).
  • Each attribute must be marked Can be used as price attribute to become selectable for pricing rules.
  • Price attribute groups group a set of attributes into header-scope or line-scope.

Price component codes

  • These are the building blocks of a price calculation. They represent logical components such as: Base Price, Sales Trade Agreement Price, Margin Component, Discount, Charge and rebates. They are attached to attribute groups and pricing rules.

Price structures / Price trees

  • Price structure defines the sequence in which price component codes are applied (e.g., Base → Margin → Discount → Charge → Rebate). You may have one structure per legal entity.
  • Price trees enables multiple price structures in one legal entity, chosen based on an order attribute (for example Channel = Retail uses one tree; Channel = Wholesale uses another).

Article content

Trade agreements, margin adjustments, discounts, charges

  • Sales trade agreement: a price record tied to component code of type Sales trade agreement (essentially a fixed price/discount for given conditions).
  • Margin component: defines a price adjustment component that adds/subtracts margin uplifts or surcharges.
  • Discounts: various discount types (simple, quantity, mix-and-match, threshold, free‐item) that reduce price based on criteria.
  • Charges: additional fees or surcharges applied based on attributes (order level or line level).

Concurrency, ranking, compounding

  • Concurrency mode: defines how the engine resolves multiple matching rules within the same price component code (e.g., Best price, Exclusive, Price attribute combination rank).
  • Ranking: attribute combinations and price groups may be ranked so that more specific rules take precedence over generic ones. Rankings enable the system to determine which pricing rule is used if an order or order line qualifies for more than one rule. If multiple qualified order lines have the same highest rank, they all apply to the sales order.
  • Compounding: whether price adjustments (e.g., a margin then a discount) are applied on the base price or applied sequentially (i.e., margin on base, then discount on post-margin). In the structure you mark Compound on component lines to enable compound logic. If Compound = Yes → New component applies to the current (running) unit price. If Compound = No → Component applies to the original base price only.

Base price vs final price

  • The pricing engine first determines a base price (from cost, item base price version, or sales trade agreement) and then applies component codes in sequence to arrive at the final sales price.

Article content

 

Configuration – Major setup points

This section provides an overview of the configuration areas you will use when implementing UPM.

 

High-level setup order

Here is a suggested configuration sequence:

  1. Enable Pricing Management feature
  2. Configure Pricing Management parameters
  3. Create your Attribute Types → Attribute Values
  4. Create Attributes (product, customer, order) and mark them Can be used as price attribute
  5. Create Attribute groups, relate them to the Commerce product hierarchy and change the default Attribute Values on products/customers/orders
  6. Create Price attribute groups (header and line)
  7. Define Price component codes, mapping them to attribute groups and selecting concurrency settings
  8. Configure Price structure or Price trees (choose sequence)
  9. Create Pricing rules: sales trade agreements, margin adjustments, discounts, charges — assign each to a component code and attribute combinations
  10. Test and validate create test sales orders, verify Price details, check correct rule application, analyse performance.

 

Enabling Unified pricing management

Go to Feature management and enable Unified pricing management feature

Article content

 

Pricing management parameters

Path: Pricing management → Setup → Pricing management parameters

Article content

General FastTab

  • Purpose: Controls global behavior, processing logic, and performance of Pricing Management.
  • Main fields:
  • Disable pricing management: Turns off unified pricing for the company.
  • Date type: Defines the transaction date used for price validity (Order, Ship, Receipt, or Today).
  • Enable price details: Allows detailed breakdown of price/discount components.
  • Number of threads: Defines parallel processing threads for faster calculations.

Article content

 

Price Attribute FastTab

  • Purpose: Defines how pricing attributes and structures are organized.
  • Main fields: Enable multiple price trees:
  • Allows multiple pricing hierarchies per attribute (e.g., by sales channel).
  • Price tree attribute: Selects the order attribute controlling which tree applies.
  • Price component – Maintenance mode: Determines how header and line attribute groups combine: Separate mode – Configure header and line groups separately. Joint mode – Define both together for simpler maintenance.

 

Article content

Calculation Rule FastTab

  • Purpose: Controls how base and active prices are derived and calculated.
  • Main fields:
  • Base price calculation – Price basis/rule: Determines source rule for base pricing.
  • Active price calculation – Price basis/type/rule: Defines how the operational (transaction) price is built from base pricing.
  • Delay price calculation: Defers pricing for performance optimization (bulk imports, large orders).

Article content

Prices and Discounts FastTab

  • Purpose: Defines discount stacking, manual control, trade agreements, and coupon logic.
  • Key sections:
  • Discount concurrency control: Manages how multiple discounts combine (best price vs compound).
  • Manual prices and discounts: Determines whether manual entries replace or compound system discounts.
  • Miscellaneous: Options for price overrides, markups, and report enabling.
  • Coupons: Defines barcode type and manual coupon entry.
  • Trade agreements: Controls whether existing trade agreements and adjustments apply.
  • Free item: Governs free-item concurrency and value calculation.
  • Auto charges: Enables automatic application of charge groups during pricing.

Article content

Posting FastTab

  • Purpose: Defines how different pricing components post to the general ledger.
  • Sections:
  • Sales base price: Option to post base price separately; specify related GL account.
  • Margin component adjustment: Allows separate posting of margin uplifts or markups.
  • Periodic discounts: Manages posting of discounts (standard, quantity, mix & match, threshold, free item).
  • Infocode and order discounts: Defines posting for promotional or order-level discounts.

Article content

 

Discount Claim FastTab

  • Purpose: Defines journals used for discount accruals and claims.
  • Fields:
  • Discount claim accrual journal: Journal for expected (unsettled) discounts.
  • Discount claim journal: Journal for realized or settled claims.

Attribute types

Path: Product information management → Setup → Categories and attributes → Attribute types Here you may create new attribute types if your pricing logic uses beyond standard product/customer attributes. Best practices:

  • Use predefined lookup lists for attributes - Fixed list.
  • Avoid free-text where possible – list types give better matching and performance.
  • Avoid creating unnecessary attributes; each attribute combination increases rule matching complexity

Product (line) attributes

Path: Product information management → Setup → Categories & attributes → Attributes

  • Create attributes (e.g., Brand, Size, PackType)
  • Mark Can be used as price attribute = Yes.

Article content

 

  • Use category hierarchy to assign defaults where possible for easier management. Group attributes into price attribute groups and assign attribute groups to the Commerce product hierarchy (Which is used but it should also be possible to use the Commerce Categories). If products are assigned to categories that are associated with attribute groups, they inherit the attributes that are included in those attribute groups with default attribute values.
  • When creating the attribute group I had problems getting it to work and therefore, I had to access the Attribute group as shown below before I could find it in the dropdown for the Commerce product hierarchy.

Article content

Article content

Article content

 

Then it became visible for the product. Assign/change default attribute values to products via Released products → Product attributes.

 

Article content

Article content

 

 

Customer attributes

To add attributes to a customer a default attribute must be added under Commerce parameters.

Article content

 

It was not possible for me to get this to work from the Pricing management parameters. After adding the default group, the Price action pane becomes visible for the customer and I could change the default values.

Article content

Sales order attributes

When adding the attribute groups to the Pricing management parameters for sales order and sales line. The Price action pane becomes visible.

 

Article content

 

Article content

 

The Retail attributes are for the sales line attribute group and the sales order attribute group is relates to the sales order attributes.

 

Price attribute groups

A Price Attribute Group is a collection of one or more Price Attributes (fields) that you use as criteria in pricing rules

Article content

 

Path: Pricing management → Setup → Price attribute groups

Customer price attributes are fetched from different tables as shown below:

Article content

Order attributes for sales order can be fetched from the tables below:

Article content

 

Price component codes

A Price Component Code (PCC) is one discrete element in the pricing calculation chain. It determines what-kind of price adjustment or price source is applied and when (in the sequence). Component codes represent the building blocks of the pricing engine: Base price, Sales trade agreement, Margin, Discounts, Charges.

 

Path: Pricing management → Setup → Price component codes

 

Article content

 

Key fields:

  • Price component: Choose one of the types (Base price – sales, Sales trade agreement, Margin component price adjustment, Discount, Charge).
  • Default concurrency mode: Choose how multiple rules inside this component code behave: Exclusive, Best price, Compounded, always apply, Price attribute combination rank.
  • Use all in header group / Use all in line group: if checked, a rule combination applies for “all” values of an attribute; if unchecked, you can explicitly list values or exclusions.

Assign attribute groups to component code

Within the component code record:

  • Add Header price attribute groups: select one or more price attribute groups you created earlier (header-scope).
  • Add Line price attribute groups: select one or more line-scope groups.
  • Each group line has a Rank field: higher rank = higher priority when matching. The system uses these ranks to resolve overlaps.

 

Price structures vs Price trees

Price Trees in D365FO is used for both single and multiple price structures

Price Structure (single)

  • One sequence of component codes that applies for the legal entity/company.
  • All orders use the same pricing model (Base → Margin → Discount → Charge)
  • Simpler to maintain if you have homogeneous pricing strategy across channels.

Price Trees (multiple structures)

  • When you have more complex needs (multiple channels, markets, vastly different calculation logic) you can define multiple structures (trees).
  • Each tree is associated with a Price tree attribute — one of your order header attributes (e.g., Channel).
  • At runtime, the system picks the tree whose attribute value matches the order attribute, then uses that tree’s sequence of component codes.

 

Price Structures (Single structure or Price Trees)

This section defines the order in which component codes are evaluated and how the engine flows from one component to the next.

Single Price Structure

Path: Pricing management → Setup → Price trees

  • Add each component code line with two key fields: Pricing sequence (e.g., 10, 20, 30, …) and Compound (Yes/No) indicating whether the value should be calculated on the running price or original base price.
  • Example:
  • 10 – Base price – no compound
  • 20 – Margin adjustment – compound = Yes
  • 30 – Discount – compound = No (maybe applied on original)
  • 40 – Charges – compound = Yes

Why: Sequence number controls order (lower number = evaluated first); compound controls calculation basis

Article content

 

Multiple Price Structures (Price Trees)

  1. Ensure in Pricing management parameters: Enable multiple price trees = Yes and Price tree attribute is set.
  2. Go to Price trees page → New → enter Name, Description, Status (Disabled when editing).
  3. On the Price component code list FastTab, add each component code and set the Pricing sequence and Compound
  4. On Action pane → Price tree attribute → select the attribute value that drives this tree
  5. Save and Enable the price tree.

 

Create pricing rules (trade agreements, margin adjustments, discounts, charges)

Sales Trade Agreement Prices

  • Purpose: Provide fixed price (or unit price) for a customer/product/quantity break combination.
  • Path: Pricing management → During-sales pricing → Sales trade agreement price → Trade agreement journals

 

Article content

 

Article content

 

  • Setup Guidance:
  • Enable Enable price attributes on your journal to access attribute routing.
  • Select header attribute group and line attribute group values to define the rule scope (e.g., CustomerRegion = Europe; ProductBrand = UrbanRide).
  • Define quantities, units, currency, price.

 

Margin Component Price Adjustments

  • Purpose: Add or subtract margin/surcharge based on attribute combinations (e.g., region surcharge, channel uplift).
  • Path: Pricing management → During-sales pricing → Price adjustments → Margin component price adjustments.

Article content


  • Key fields:
  • Component code (of type Margin)
  • Attribute group combinations (e.g., Region = Europe; Size = Large)
  • Adjustment type: Percentage or Amount

 

Discounts

  • Purpose: Reduce price based on various criteria.
  • Path: Pricing management → During-sales pricing → Discounts → [type: Simple, Quantity, Mix & Match, Free Item, Threshold

Article content

 

Explanation of types:

  • Simple: flat % or amount discount for combination.
  • Quantity: discount applies when line quantity ≥ threshold.
  • Mix & Match: discount applies when certain product combinations are bought.
  • Free Item: free product added when criteria met.
  • Threshold: discount based on order value or quantity.

Charges

  • Purpose: Apply additional fees (e.g., expedited shipping fee, credit-card surcharge) based on attributes.
  • Path: Pricing management → During-sales pricing → Charges (Auto charges, Charge code, Customer charge groups, Delivery charges groups or Item charge groups)

Article content


  • Key notes: Charges apply at either header or line scope.