Dynamics 365 CE version 9.1, PSA solution version 3.2, Unified Interface
Pricing and the whole financial aspect to project management has always played a huge part in Dynamics 365 Project Service Automation. Before Pricing Dimensions (also know as Multidimensional Pricing or MDP) was released in PSA version 3 as part of the Spring ’18 release, the only OOTB dimensions for pricing were Role and Organizational Unit. This article series will shed some light on Pricing Dimensions, however before you study MDP further, you should have a very good understanding of PSA’s pricing logic. It is one of the application’s most complicated areas and MDP takes that complexity to another level. A good place to start with pricing in PSA is my vlog on Price Lists in PSA V2.
When you’re ready to move on, this article series on MDP will give you guidance and tips on setting up Pricing Dimensions in your environment. You can download a managed and an unmanaged solution from the Those Dynamics Guys Power Platform Bank here to help you get started faster. You will get more out of the article series if you try MDP out while reading the articles. Note that this article series is not meant as a definite guide to setting MDP up as Microsoft has very good and detailed guide available on the subject. You can find that guide here and I strongly suggest you read thought it a couple of times. This article series will give you a high level understanding of what MDP is and what it can do.
Turning Pricing Dimensions on or off
After you have installed my Pricing Dimensions solution or customized your own system and updated the necessary plug-ins (PreOperationContractLineDetailUpdate and PreOperationQuoteLineDetailUpdate), the next step is to turn Pricing Dimensions either on or off from Project Parameters. It’s a good idea to refer to Microsoft’s guide for this step. It’s important to understand that turning parameters off will not be possible if you have price records set up for a dimension that is being turned off! This means that you may end up deadlocked with dimensions if you don’t pay attention to what you are doing. Refer to this section of Microsoft’s Pricing Dimensions guide for a detailed description of turning dimensions off.
As turning dimensions off means all related pricing records must be removed, turning dimensions off should be avoided in production environments during normal operating hours. For bigger companies with complex Price Lists this operation may also be time consuming. I recommend you plan your pricing dimension needs very well in advance so that you can avoid changes to the dimensions you have set up. Remember to run through all applicable pricing scenarios in a test environment before setting dimensions in production.
Option set based Pricing Dimensions
This article focuses on dimensions that are based on (global) option sets. Perhaps the most common examples of option set based Pricing Dimensions are work location and work hours. Work can be done remotely, at home, onsite etc. The work we do can be during regular office hours, overtime, abroad, overtime abroad etc. Usually these values are fairly fixed and if we need more options to out list, we can simply add them to our global option set. This example has two options set pricing dimensions: Resource Work Hours (Regular/Overtime) and Resource Work Location (Home/Onsite).
Pricing Dimension types
Dynamics 365 Project Service Automation supports two kinds of entity and option set based Pricing Dimensions: Amount-based dimensions and markup-based dimensions.
Amount-based dimensions: PSA will match an input’s dimension value with the related Role Price line and will then default the sales/cost price based on the Role Price table.
Markup-based dimensions: Sales/cost price is determined by a 3-step process.
- Project Service will match the non-markup-based dimension values from the input context to the Role Price line to get the base rate.
- Project Service will match ALL dimension values from the input context to the Role Price Markup line to get a markup %.
- Project Service will then apply the markup % from the second step to the base rate obtained from the Role price table in the first step to arrive at final price/cost.
Source: Pricing Dimensions Setup Guide, Microsoft, 2018.
Pricing Dimensions Example
In this example, option set based Pricing Dimensions are used together with the OOTB dimensions of Role and Organizational Unit. The smaller the number of a Priority, the higher the weightage. Microsoft’s Pricing Dimensions Setup Guide defines Priority as follows:
“Setting the Priority of a dimension helps Project Service pricing engine produce a price even when it cannot find an exact match between the input dimension values and the values from the Role Price or Role Price Markup tables. In this scenario, Project Service will use null values for unmatched dimension values by giving weightage to the dimensions in order of their priority.”
Use case – Option set based Pricing Dimensions
John Doe has worked as a Consultant on a project. He submits Time Entries for a total of 20 hours over a period of two days.
8 hours, home, regular office hours. Total is 100 € x 8 = 800 €
2 hours, home, overtime hours. Total is 150 € x 2 = 300 €
8 hours, onsite, regular office hours. Total is 105 € x 8 = 840 €
2 hours, onsite, overtime hours. Total is 157,5 x 2 = 315 €
The prices in this example are based on Role prices and Role price markups on the Sales Price List seen below. The markup amounts can be easily validated by creating a Quote or a Project Contract and adding a Time and Material Quote/Order Line with Quote/Project Contract Line Details. Note that a Quote specific Price List is not created automatically whereas a Project Price List for a Project Contract is always Project Contract specific. This makes simulating the effects of Pricing Dimensions easier on a Quote as all changes to records on the Price List entity are immediately propagated on a new Quote.
To view both Sales and Cost prices on Quote Line Details/Project Contract Line Details, an additional subgrid needs to be added and the view used by the OOTB one changed on the Quote Line/Order Line entity.
An end user sees Pricing Dimensions as new fields on Time Entry. In this example, work hours and work location can be changed (available values are regular/overtime, home/onsite).
Pricing Dimensions solution and Flow
Managed and unmanaged Pricing Dimensions solutions containing both option set and entity based dimension can be downloaded from the Those Dynamics Guys Power Platform Bank here. Customizations have been made following Microsoft’s Pricing Dimensions Setup Guide, however there a few small changes in the solutions. These changes are documented in the solution files. The zip file includes a Flow that updates values for all pricing dimension fields on Project Approval from Time Entry. This functionality is not covered in Microsoft’s Pricing Dimensions Setup Guide.
Remember to create new Pricing Dimensions under Project Parameters. They are not transferred in solutions. The fields included in the solution are:
Amount Based Pricing Dimensions
d2d_resourceworklocationc (option set based)
d2d_standardtitlecid (entity based, covered in part II of the article series)
Markup Based Pricing Dimensions
d2d_resourceworkhoursc (option set based)
I hope this article helps you leverage MDP in PSA. Stay tuned for Part II, which covers entity based Pricing Dimensions.
All my blog posts reflect my personal opinions and findings unless otherwise stated.
Updated on December 6th 2018 with new links to the MDP guide section on docs. microsoft.com.