New Microsoft Dynamics AX – A guide for using retail sales prices and discounts

This is a guide I have been looking forward to publish, but due to the NDA restrictions I needed to wait until the new Dynamics AX was made public preview, and today it is J This blogpost is not about AX licenses prices, or implementation costs, and if you were looking for that, you have to google again. It’s about what product sales price and discount options that exists MSDAX – “out-of-the-box”, and it’s not about product sales price tactics and strategies, but how to apply them into AX and most of the presented information here can also apply to earlier releases of Dynamics AX.


Pricing and discounts is a science, and the number of variations and combinations is amazing. When I talk to my customers I like to show the following overview of the most common used pricing strategies available in AX. Here I have tried to put “retail names”, and exemplify what they mean.

The Microsoft documentation on TechNet visualizes quite clearly the relationship between prices, discounts, channels and programs with the following many-to-many relationship diagram;

It basically means that you can combine and mix pricing elements to achieve the strategy you are aiming for. The combination of these gives us the functionality we are looking for, but we have also realized that not all combinations are practical or possible. Remember that much of the pricing possibilities became available with the introduction of Retail, Call- center and in some cases the lean-modules. Some pricing options will therefore not work in combination with each other, and also not across the Omni-channel.

Product prices and RRP (Recommended Retail price)

RRP, or Recommended Retail Price is a very common and known concept. It is very often used on, when the sales channels are more complex, and includes producers, distributors, partners and resellers. Often the ownership structure of the sales channel is fragmented and differentiated. The recommended retail price is therefore often specified based on geography, currency and channel. The RRP if very often just the baseline on which prices are built on, and as the name suggests, just a recommended price. In Dynamics AX either the standard (single currency) sales price on the released product or having a “All/Group” sales trade agreement (multiple currencies, dates, quantity) is sufficient to make this work. One restriction to make this work within AX, is that the product must be released, in order to do this. If a more “Global recommended retail price” is wanted, I suggest reading my blogpost on this subject, where prices are made global, and distributed to all legal entities.

Price/discount matrix’s (Trade agreements)

The price discount matrix has been available for AX users since the beginning, and handles most requirements in a B2B scenario. The setup is quite easy, and involves setting price or discounts on groups, or in relation to specific entities like product or customer accounts.

In the following example we have different sales price on a single item, but it differences per customer price/discount group.

In AX ‘7’, you will just create a trade agreement journal, and create the necessary lines to reflect the different prices.


Discount matrix

Maintaining sales prices on the item-level per customer group, or per specific customer can quickly be a maintenance nightmare. The different combinations quickly end up with so many price points, that oversight is lost. A customer of me had 4000 products, 6 currencies and 12 different account selection options. This would mean that they would maintain 288.000 price points. That was impossible! The option was to use discounts instead, and just maintain recommended retail prices per currency. This resulted in 24.012 price points to maintain. With the use of smart rounding, and generic currency we reduced the number further down to 4012 price points. A discount matrix would look like this, where the combination per item price group and customer price group resulted in a discount.

In AX ‘7’, you will just create a trade agreement journal, just like for prices, and create the necessary lines to reflect the different discounts.

If you want to test a sales price, with all the different combinations, you can use the “Find prices” feature. Here I have a specific customer belonging to the price group “Retailer”, The item belongs to “Apparel”, and the combination of this gives me a net amount of “127,5”.

Generic currency and smart rounding

As seen in the example above, I have specified prices for different account selections, but only in USD. If multiple currencies are used, and you don’t always want to maintain currency based pricelists, then the generic currency option is a nice feature. The first step is to specify what is the generic currency, and what exchange rates that should be used. Also if smart rounding should be applied after currency conversion. In the setup of smart rounding you also need to set up member currencies that belongs to the smart rounding.

Enabling this, will open the “include generic currency” option on the trade agreements, and when creating sales orders in a different currency, the sales order. Here we have a sales order, converted from USD to €, and then the automatic smart rounding is applied.

Trade agreements and Retail/Call center in combination

As shown here we, the trade agreement matrix can solve quite a few price requirements, but in a retail scenario it would not solve the all requirements we see. We are missing elements like retail channel, categories and more advanced features. Going deeper into retail functionality shows that there are many additional possibilities that opens up. I have met quite a few companies, that have advanced price and discount requirements, but they have never thought about enabling the retail module. Many thinks the retail is for POS, but the retail module is for Omni-channel. This means that we can also use this in traditional sales orders (The “call center module” enabled retail functionality to be used in traditional sales.)

But there are some elements in AX, that you should be aware. I often see good old AX consultants getting confused when they start looking at retail discounts. Let’s say we have the following scenario; We have item 0001 with a recommended price of 150 USD.

And then we have a 15% discount on the customer;

You would then expect that when using the retail module, it will just use these values. But it don’t ! It actually calculates the discount amount, and not the percentage. Keep this in mind, because it will confuse you later.

When using the retail discounts, they will work together with the traditional trade agreements, but not exactly as you would expect. To better understand the actual code executing, then take a look at the class\RetailOrderCalculator.saveSalesOrder(). The CRT (Commerce Run Time) engine returns quantity, price and total discount amount. Based on this, the unit discount amount is calculated. I’ll also show the actual source code on this, because when we are talking about discounts, we are most likely going to think in percentages, and the same are customers and users.

And one more thing. The CRT will not apply both the trade agreement discounts and the retail discount. It will select the best of them.

The use of Retail Discounts in Sales orders

Let’s take some scenarios, that is common in the retail industry, and I’ll try to link them to what you find in the standard Contoso demo dataset. In AX ‘7’, the retail module mainly has 4 discount types of discounts, and a price adjustment;

  1. Just an ordinary discount product

Let’s say you just want to have a discount on a single item.

First step is to use the retail discount rule.


Periodic discounts on categories

“50 % off on accessories this week” can be a strong trigger to make the customer open the wallet.

To create such discounts, we can use the same screen.

PS! The Retail discounts have a “discount code” field, but I have never managed to use it in the call-center sale order screen. But in POS, it works J


Happy hour J

Happy hours are an efficient way of attracting and breaking customer’s shopping routine. It’s also fun, and can give retailers a lot of attention. This feature is excellent also for Black Fridays.

The validation period has an advanced setting, that opens up the field “Discount period number”, and select a discount period. I have here created a happy hour between 12 AM and 1 AM for early birds.

We can further specify the valid periods here, so that more period based discounts can be given. Just remember that the valid period is current time +/- the offset time defined on the retail channel. In the AX ‘7’ CTP 7 version, the call-center channel details screen is not showing the time zone, like it does for retail stores, and this could have some implications on using “Happy hour” in an installation that works across time zones. A small service request to Microsoft have been created, and I’m sure they will fix this J

Coupon discounts (Call center)

Coupon discounts seems to be very popular in US, and we also see an increasing use of this in Europa. Especially in relation to mobile coupons.

In Dynamics AX 2012 there are two ways of working with Coupons. One solution for POS, and one solution for Call-Center. And these two don’t work in common. It is a bit sad, because it means we have a GAP in the Omni-Channel offering. But with enough push on Microsoft, I’m certain it will merge in future versions.

Call-Center Coupons, can be defined to be an amount or a percentage, and may have valid period. The coupon can be a unique, and a one-time use, and

It can have item rules attached, that specifies what products the coupon can be used with or excluded from.

So solve Coupons for Retail/POS, you can see that all discounts have the option to apply a “Discount code”. I have not found a way to make this discount code to behave as a unique and on-time code. Even though AX-Sales orders not can use CRT as the price engine, there are no places, where the discount code can be applied to a sales order. It therefore only works on POS/eCommerce scenario’s It is a bit sad, because it means we have a GAP in the Omni-Channel offering.

Dynamics AX for retail have a GAP in relation to coupons to solve “One-Time” coupons, and in future versions I hope to see more features, like Store coupons, Manufacturer coupons, Mobile/Cell codes and promotion codes.

Trade discounts

Trade discounts is a most common way of creating discounts. 3 very common discounts are

  • Employee discounts

    This can be solved by using affiliations in Dynamics AX, and works for both POS and AX sales orders In order to leverage the Affiliation functionality at retail POS, the following must be setup:
    Price group(Retail)

    Affiliations, and link the Affiliation to the Employee price group.

    Discounts, and link to the price group “employee

    Each employee must be a customer, that is linked to the Affiliation, and you mark the customer with the relevant affiliation. When this customer in POS or in AX creates a sales order, the discount will apply.

    Affiliations can also be used for senior, military or any other groups.

  • Discount category

    With discount category I mean that we can have a discount on an entire category of product. Let’s say “Digital SLR camera” sale, as is exemplified in the Contoso demo data. We then don’t have to assign a discount to a specific product, but just refer to the retail category. When adding products from the category the discounts will automatically apply (after running some periodic jobs, and distributing the prices to the channels.)
  • Loyalty discounts

    To use the loyalty features, then a lot needs to be setup. But in relation to prices, it just means that you need to assign a price group to the discount. If we take the example of the “SLR” discount, we can associate it with a price group called “LP-FabGold”, meaning that all loyalty customers in the “Gold” tier will get the discount.

Mix and Match discounts

  • Mix/Match

    A mix and match discount gives customers a discount when they purchase a specific combination of products. In the Contoso demo data, take a look at the “30% off 3” discount. Here a 30% discount is given, if you select 3 of the specified products. Here we use the “Mix and Match discount” form.
  • BOGO

    A BOGO price is basically “get 2 for the price of one”. We also use the “Mix and Match discount” form for this, but we use the “Least expensive” price option, and give a discount of 100%, and specify that 2 units are required for the price to “kick-in”. In this case, the lucky customer gets 2 camera’s for the price of one J

    Other options also exists, like a 50% discount when selecting 2 of an item, or use line Spec and Product category feature in Mix and Match discount

  • Buy 3 pay for 2 promo
    This can be solved just like BOGO, but where the number of products are increased to 3.
  • Free item A if item B
    For this, we can take a look at the “Water Bottle Promo” in the Contoso demo data. We use the Mix and match discount, but use the “line spec” discount type. Then we create a “Mix and match line group, to specify that we need to have at least one item in the selected category/product, for the price to be active.

Quantity discounts

A quantity discount is a discount that is given to customers when they purchase a particular quantity of a product. For example, you can set up a 5 percent discount for the purchase of two products of a particular category or brand.

  • Buy 2 items get 5%, Buy 3 items get 10%, Buy 10 items get 40 %

Threshold discounts

A threshold discount is a discount that is given to customers when the total for a transaction reaches one or more specified amounts. For example, you can create a discount that gives a 5 percent discount for purchases over 100.00 or you can specify a fixed discount amount.

Buy for 100 $ get 5%, Buy for 200 $ get 10%, Buy for 900 $ get 40%

Price adjustments per channel

  • Online gives 5% discount, In Store gives 2% discount
    Channel based discounts are solved by assigning channel specific price groups to a channel, and then assign the different price adjustments to each price group.

Loyalty cards

The loyalty module in Dynamics AX is a large module with a lot to offer.

But there are some small GAPS you should be aware of, and that is to use loyalty points for payment in the call-center sales order. It could be I’m wrong, but I have not been able to efficiently use the Dynamics AX sales order screen efficiently with the loyalty module. A good blog for loyalty is available here.

Smart Rounding

Smart rounding is a feature that have no direct effect on retail pricing.

But it can adjust trade agreements, that indirectly works with retail. Also remember that it is not “automatic smart rounding”, and the smart rounding is applied to a price discount journal. A good blogpost on smart rounding is this one.

Recurrence and discounts

The ability of creating recurring sales is not directly related to Retail/POS. In AX there is a feature called continuity programs where delivery schedules can be setup.

I don’t think this modules works very nicely with POS and eCommerce, and is mainly a tool for call-centers and selling recurring items. More information is available on TechNet.

B2B Discount agreement

Price agreements is not working with retail-POS, and is not very good supported through the CRT. It is mainly used for B2B orders, and features exists both for sales and for purchase.

  • Yearly agreement to buy 1200 pcs, and get them for 450 $ per pcs.
    In this example I have an agreement to buy 1200 units, and I get the price of 460, until 12/1/2016. In this case, it is a product quantity commitment.

    Other types of commitment also exists like

    This makes it possible to create several different types and combinations. It features also contains Ok formletter that is confirming the agreements. Take a look at the following blog for additional information.




20 thoughts on “New Microsoft Dynamics AX – A guide for using retail sales prices and discounts

  1. Hello Mr. Hatlevik! My name is Fred Robinson and I’m Copper State Bolt’s Project Manager for our D365FO project. I’ll first start by saying that this is thee most relevant pricing post ever on the web – and it’s four years old. Nice job and much appreciated! On another note, we are in need of an expert on Retail trade agreements as we migrate from AX2009 to D365FO.

    The following is our scenario that we are looking for additional consult in:
    1) We have sales counters that are both Wholesale & Retail sales.
    2) ~75,000 active product masters
    3) ~300,000 products (avg. of 4 dim combos per Master)
    4) 12,000 active customers
    5) ~140,000 sales lines per month (65% of those go over the ~32 sales counters in 11 states)
    6) We need D365FO for both mPOS and rich to:
    a) First look for customer “price group”, CSBN’s “customer contract prices”, and if it finds a price, then stop. No discounting.
    b) Then if not found, check for a line discount group, CSBN’s customer industry discounts. For CSBN, Industry
    discounts are at Customer Line Discounts > Account Group > single level discount, not stacked, no find next.
    c) Then if not found, apply discount from Line Discounts > Account All to list price.
    This is done by stacking discounts, using find next, etc.

    If this is something that you are interested in helping us with, then please reach out to myself or Carl Spackman!

    Thank you in advance,
    Fred Robinson


  2. is there any straight forward method to net off the discounted value of free amount to the items within the same discount group. For example, in case of BOGO, instead of showing the free item as Zero value, distribute the discount amount in two(B1G1) lines. Something same like Discount amount method for Mix & Match type of discounts.


  3. Hi Kurt,

    thank you for the great Blog Post here.
    I am facing a Scenario that I for which I don´t know how to solve it the given with four Dymanics Retail Discounts. So maybe you or an informed Reader can help – that would be great 😉

    I have the Requirment to implement the following discount:

    If a costumer buys for an Amount X he is given a free item (the item is a specific one).
    (Lets say you need to buy Shirts for 200$ to get a free tie.)

    Since this is not depending on the amount of items the customer buys from the specific category it can´t be solved with a mix-and -match discount, or am i wrong?

    On the other hand, a threshold Discount does´nt do the job either. since it only gives me the oppurtonity to define the amount that needs to be spent, but a free item cannot be specified here.

    Is there a way to this with retail discounts, at all?



  4. Hi Kurt, great article, would appreciate getting your advice on loyalty program based discounts. You can email me directly on the email submitted with the comment. Kind regards, Alexis


  5. Good article Kurt 🙂
    However – regarding Quantity Discount, I’ve found (compared to AX2012), it’s not possible to use quantity discount as BOGO (buy one get one), with a discount %.

    Everytimes a customer buy 2 cups of coffee, he’ll get one of then for free.
    A cup cost 1$
    1 cup: 1$
    2 cups: 1$
    3 cups: 2$
    4 cups: 2$
    5 cups: 3$

    You get the picture. It should only apply to every 2nd cup the customer buys. This was possible in AX2012, but i cannot get it right in ‘New AX’ (AX7)
    In AX2012 i would put configuration as this, on quantity discount configuration:

    1st line
    Minimum quantity: 2
    Discount: 50%

    2nd line
    Minimum quantity: 3
    Discount 0%

    But in new AX configuration complain if you try to save this.

    Maybe I’m missing something, but I cannot find it 🙂


  6. Hi Kurt, I have this article bookmarked for reference and have now used it quite a bit. Thanks!
    One issue I am facing right now is quantifying markdown value, where mark downs are transacted as price adjustments or via trade agreements. Basically I need to know at transaction level if the price has been adjusted.Doing the same for discounts was straight forwarded as there is a discount amount however for the clients markdowns the unit price is populated using the adjusted amounts so not sure how to achieve this.


  7. Has anyone discovered any issues with the use of multi-currencies when retail sales orders are enabled?

    We have a scenario at present where the customer has trade agreement line discount percentages in both GBP & EUR in the one company / call centre (Company base currency = GBP). When a sales order is entered the GBP % is calculated irrespective of the customer currency. Sales Price is working as expected. When we disable the retail sales order the relevant EUR / GBP % works correctly as a %.

    We also found the same situation when creating a periodic discount in that it wouldn’t apply if the discount was setup in Euro.

    Hoping I have missed something in configuration. Any input would be appreciated.


  8. Hi Kurt have you tried to make a simple discount “Best price” and a Threshold discount for same item as “Best price/Compounded” and see if the item get the 2 discounts?. It seems that part is not working very well.


    • Hi Susan. I think you should ask at the Microsoft Community sites. It is monitored by many experts and also by Microsoft. Happy DAX’ing 🙂


  9. Pingback: New Microsoft Dynamics AX – A guide for using retail sales prices and discounts – Dec 1, Kurt Hatlevik – Dynamics Ax Blog |

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.