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).
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.
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:
- Enable Pricing Management feature
- Configure Pricing Management parameters
- Create
your Attribute Types → Attribute Values
- Create Attributes (product, customer, order) and mark
them Can be used as price attribute
- Create Attribute groups, relate them to the Commerce product hierarchy and change the
default Attribute Values on products/customers/orders
- Create Price attribute groups (header and line)
- Define Price component codes, mapping them to
attribute groups and selecting concurrency settings
- Configure Price structure or Price trees (choose
sequence)
- Create Pricing rules: sales trade agreements, margin
adjustments, discounts, charges — assign each to a component code and
attribute combinations
- 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
Pricing management parameters
Path: Pricing
management → Setup → Pricing management parameters
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.
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.
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).
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.
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.
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.
- 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.
Then it became visible for the product. Assign/change default attribute
values to products via Released products → Product attributes.
Customer attributes
To add attributes to a customer a default attribute must be added under
Commerce parameters.
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.
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.
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
Path: Pricing
management → Setup → Price attribute groups
Customer price attributes are fetched from different tables as shown
below:
Order attributes for sales order can be fetched from the tables below:
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
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
Multiple
Price Structures (Price Trees)
- Ensure
in Pricing management parameters: Enable multiple price
trees = Yes and Price tree attribute
is set.
- Go to
Price trees page → New → enter Name, Description, Status (Disabled when
editing).
- On the
Price component code list FastTab, add each component code and set the Pricing sequence and Compound
- On
Action pane → Price tree attribute →
select the attribute value that drives this tree
- 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
- 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.
- 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
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)
- Key notes: Charges apply at either header or line scope.
No comments:
Post a Comment