Pricing management : Introduction and key concepts

Posted by

A real pricing engine. That’s exactly what Microsoft has been released and will be G.A soon (public preview since PU33 and April 2023). A brand new module developed by Microsoft allowing sales pricing to be setup per attributes. By gathering retail and sales price policy within a unique module, and adding new features, Dynamics 365 For Supply Chain Management is able to manage more complex scenario regarding sales order pricings. In this new serie of posts, I will underline and detail all the capabilities of this module, and provide a lot of tips.

Don’t waste any time and activate the feature to start.

In this first post, I will introduce the way sales price are now split, how attribute is the backbone of the configuration, and detail the concept of tree and price component codes.

Price split

As you can see, the sales price can be split in different sections, that we will detail in next posts :

  • The base price, or public price, which can be defined in 4 different ways
  • Base price adjusted, thanks to Margin component price adjustments
  • Different type of discount (quantity, simple, threshold, coupon, free item, mix-and-match)
  • Charges
  • Rebates

Source : Microsoft

Discounts will be combined together with a policy called Discount concurrency mode that we also will deep dive and could be either:

  • Price attribute combination rank (usage of the rank of each attribute to prioritize discounts)
  • Best price (choose the best discount to be applied)
  • Compounded (apply all discounts)
  • Exclusive (only this discount will apply, except if existing Always apply discount) – This one is useful for managing net prices
  • Always apply (the discount, no matter other criteria)

Manage attributes

Attributes setup is a well know feature applied historically for items within product categories. If the setup remains the same, the pricing management modules is fully based on this for products, but also for customers and sales orders.

It’s indeed possible to setup discounts, prices… for some products with a specific value of attributes, and the association for the customer side is now the same.

You will need to define attribute groups for sales orders and also for customers. Those attributes and attribute groups will be setup within the Product information management module.

Don’t forget to flag those attributes with the checkbox “Can be used as price attribute” activated.

After that, you will allocate the correct attribute group to the Pricing management parameters :

For my demo example, I’ve used a group for sales orders :

By retrieving it on the Pricing management parameters :

Now, it’s possible to flag any sales order with some attribute values, and having an impact on prices if needed. Have a look at the Price tab within the Sales order ribbon.

For customers, it’s the same.

Don’t forget to setup the group to the Pricing management parameters :

As it works for sales orders, you will find a new Price tab within Customer record ribbon :

Even if there is no customer hierarchy as it exists for products, you can manage to achieve it by setting up as many attributes as needed. You will be able to manage prices per customer attributes.

Price association and granularity

Let’s introduce the way attributes are used for any price or discount setup within the Pricing management module. Price attributes are eligible for headers (customers, sales orders) and lines (products). For achieving this, you will need to setup some Price attributes groups.

Price attribute groups

Go under Pricing management > Setup > Price attribute groups > Price attribute groups and create a new one, starting by defining the one for header.

When creating a new price attribute groups, you have to choose between Header and Line for Sales order matching scope, here I’m starting by Header.

Then, by adding attributes I’m choosing which fields I want to be eligible for price criteria (coming from SalesTable, Customer, or CustomerPriceAttributeGroup.

For my example, I’ve chosen to use the attributes setup previously for the sales order.

At the end, I’ve retrieved some customers field, some customer attributes and sales orders attributes.

I have also adjusted the Rank for attributes which can have some impact by using the Price attribute combination rank for Discount concurrency mode

For the lines, I’ve also setup a Price attribute groups the same way. Don’t forget to Validate the group before using it.

Price component code

The Price component code will be used to gather the header and the line Price attribute groups and next to be able to allocate it within a discount or base price.

Go under Pricing management > Setup > Price component codes > Price component codes

First thing to know, choose which price component is related to the Price component code. Are you building a Price component code for being used for Discount, or for building any Base price ? This is an important setup for what comes next with trees. Pay attention, some of them have to be unique (Base price for instance) when other can have multiple occurrences.

Next, you need to define the header and line groups. By ticking Use all you will not be asked to choose with a previous price attribute group setup.

On the last part of the Price component code, the Price attribute group combination has been calculated, with header rank and line rank for each combination. This will make more meaning when using it on discounts, margin adjustment, and so on.


The last figure to introduce is the tree used for applying the correct price figure in a specific order.

Go under Pricing Management > Setup > Price component codes > Price component code setup to manage this.

As you can see, the pricing sequence is well displayed and obvious here with the correct Price component code used.

In this case, the Base inventory price is the first sequence, and adjusted by Sales trade agreements, and so on.

For discounts, two Price component codes are used so you understand now the importance to setup the Price component code according to the tree you want to build. Explicit names could be useful.

It’s possible to use multiple trees depending on the sales orders attributes values, that’s a plus. Go back to the Pricing management parameters and enable multiple price trees. Now you can choose which attribute will be used for selecting the appropriate tree.

For doing that, you must have setup a value for Sales order attribute group.

After that, you can now create some trees and forget about the Price component code setup.

Go under Pricing Management > Setup > Price component codes > Price trees

For each attribute value, you can have a dedicated tree.

Don’t forget to setup the appropriate attribute value by clicking under the Price tree attributes on the top of the Price trees form.

Then, click to Enable the Price trees before adding items on sales orders otherwise you could have this error message :

Now you are ready to move on to the next step and use the different price components available.

Bonus : setup attribute

Before ending this post, a quick remainder of how to setup products attributes by using Retail and Commerce categories because this is a mandatory step for products.

Setup attribute type and attributes

Form the Product Information management module you have to setup attribute type first, followed by attributes with the checkbox “Can be used as price attribute” ticked.

Attribute groups

Then, setup attribute group to gather attributes previously created.

Setup retail hierarchy

Still under the Product Information module, you have to setup the category hierarchy.

Check the hierarchy type (has to be a Retail / Commerce / Sales value).

Allocate the attribute group to the category

From the Retail and Commerce module, retrieve the Retail hierarchy type and add the attribute group from there.

The last step consists in adding the correct node of the Retail category from the item, and the attributes should be then populated.


Additional resources :