Dynamics CRM Multiple Currencies
Multiple currency capability was added way back in CRM 4.0, but I find that many people don’t fully understand how multi-currency works, and there are some common misconceptions.
In this post, I want to document some of the things you need to know about dealing with multiple currencies.
You can create currencies in Settings—>Business Management—>Currencies. You are not limited to any specific list of currencies. You can create any currency that you wish. Each organization has a base currency—this can only be changed when the organization is created.
The exchange rate for the currency is stored on the currency record. The exchange rate is considered the equivalent of 1 base currency. For example, if your base currency is US Dollar, if you create British Pound, the current exchange rate is 0.599346. Some users have reversed the currency exchange rate, which can lead to some wildly incorrect exchange calculations.
Users have a currency associated with them in user settings. This currency serves as the default for records created by them. A common misconception is that this currency determines how money value fields are displayed to user in forms, views and charts; however, it does not work that way. All this user currency setting does is determine what currency will be assigned to records when the user creates a record. This also means you need to pay close attention to currency associated with users that integrations run as and own workflows, as this will determine what currency is associated with records created by these processes (unless you explicitly specify the currency in the process).
Any record that contains a money field will have a lookup field for Currency (transactioncurrency). When the record is created, this lookup field defaults to the currency of the user. When a value is populated in a money field, the value is stored in the money field in the currency of the record. For every money field, there is also a corresponding base currency field. For example, Opportunity has an Estimated Revenue field, and it also has an Estimated Revenue Base field.
When a value is populated in the money field, an adjusted value is stored in the base field, calculated using the exchange rate on the currency record associated with the record. So in our example, if the user’s currency is GBP, the value entered in the Estimated Revenue field is GBP, and the value in USD is stored in the Estimated Revenue Base field.
The base money fields provide a mechanism for consistent calculations in charts and reports. If you use multiple currencies, and you have a view that contains records of multiple currencies, it is important that you calculate values using the base money value. Otherwise, all currencies will be weighted equally, and you will get faulty values in your charts. Note the out of the box sales pipeline charts use the non base money fields, so you will want to make a copy and modify the field used in the calculation.
Base field recalculation
Exchange rates constantly are changing. This is why it is important to understand how base values of money fields are recalculated.
- Exchange rates are not automatically updated in CRM. if you use multiple currencies, it is important to remember to regularly update the exchange rates of your currencies. Many users do this on a weekly basis.
- Base fields are not automatically recalculated when exchange rates are updated. The calculation only happens by default when a value is entered in the money field or the record status changes. This means that when you close an opportunity, the value of the Estimated Revenue Base field will be recalculated, but your open pipeline base value will not be recalculated when the exchange rate changes.
- One simple way to force recalculation of the money base fields is to update the money field. Some users have created Scribe or SSIS jobs to update open opportunities Estimated Revenue fields with the existing value of those fields as part of their exchange rate update process. This keeps the value of the record currency field consistent but forces recalculation of the base value fields.