Currency management in Dynamics 365 / CDS for Apps

Multi-currency management is a standard feature in Dynamics 365 (or rather in its underlying platform: the Common Data Service for Apps).

Administrators configure each desired currency (USD, EUR, GBP…) and their exchange rate with the system “base” currency (there can be only one base currency per environment, and you define it during setup: it can't be changed afterwards).

Exchange rates with the base currency can be updated at any time, but there can be only one exchange rate per configured currency. Also, updating an exchange rate does not impact previously converted amounts in the base currency.

What happens when you create currency fields?

  1. When you create a currency field on an entity, an equivalent field is automatically for the base system currency. It has the same name as the created field, suffixed with "(Base)". The purpose of this field is to store the converted value of the currency field in the base currency (more about the conversion below). The base field is system managed, so you cannot manually enter a value in it.
  2. If they did not exist before (for example when you add the first currency type field to an entity), two fields are also automatically created:
    • Currency (TransactionCurrencyId): this field stores the actual currency that is used on the record. There can be only one per record: so you cannot have one USD field and one GBP field on the same record (unless one of the two is the base currency).
    • Echange Rate (ExchangeRate): this field stores the exchange rate that was applied between currency fields and base currency fields. The same exchange rate applies to all currency fields of a record.
Example of records with different currencies, exchange rates and base amounts:

How are exchange rates applied?

The system automatically converts each currency field in the base currency (using the "Base" fields, even if the two fields are in the same currency). The applied exchange rate is the one that was configured in the system at the time the conversion took place.

The equivalent amount in the base currency is calculated only during the following events:
  • When the record is first created.
  • When any of the currency fields of the record is updated
    This means that all currency fields base amounts are updated even though only one value was changed.
  • When the record changes status.
    So this means that base amounts are recalculated if you go from active to inactive, or if you close an opportunity record.
Out of the box, it is not possible to enforce the exchange rate or the base currency fields of a record. The exchange rate that is configured in the system at the time of conversion is always the one that is used. Some complex workarounds can however be found:

What is the purpose of the user's default currency?

The default currency of a user is useful for these purposes:
  • It sets a default currency for newly created records.
  • Charts aggregates are always displayed in the user’s default currency.

To display a sum of multiple records in a specific currency, the system will aggregate the base currency fields of the entity (so for example EUR base currency fields, even though the user has USD as a default currency), and will convert the amount in the user’s currency using the configured exchange rate in the system (and there can be only one per currency), at the time the chart is displayed.

Rollup fields and currencies

The chart logic is roughly the same that applies to rollup fields.
They will sum up the child records base currency fields, and will use the current exchange rate to display an amount is any currency.