Latest Enterprise DNA Initiatives

Convert various currencies to GBP based on latest available exchange rates

Hi all

I have researched a lot and struggling with this one, I wonder if you can help.

Scenario is:
Exchange Rate Table “ExRates” has Code, Date, ToGBPRate

Each currency (USD, and 70+ others) has rates, usually we are downloading a daily set of rates. But, for some currencies we stopped getting rates, or maybe some issue arose, and the latest rate maybe is a month ago.

I want to convert the currency bank account amounts back to GBP to assess “what are they worth in terms I understand” but I ALWAYS want this at the latest rate. That is, for example, I want today’s USD balance calculated at today’s rate. Not the date of the bank posting or some other “transaction” date. Always at latest rate available for that currency in the ExRates table.

All the exchange rate examples I found using LOOKUPVALUE seem to use rate at Order Date, Sale Date, or something.

I would like to do something like:

LOOKUPVALUE(ExRates[ExRateAmount],
ExRates[Code],BankEntry[Code],
ExRates[Date],"MAX of the ExRates[Date] for that particular ExRates[Code]"
)

I am not averse to making a table each day of the latest currency exchange rates separate from the ExRates history table, if you think this would be easier (ideas on how I code that welcome :slight_smile:)

This pattern would apply to Stock Exchange Price histories too, where we don’t always get an instrument price daily for every instrument (e.g. some are priced monthly, some daily etc).

Help?

Hello @mattduffyzz,

Thank You for posting your query onto the Forum.

One of our expert Nick had created a bunch of videos based onto this videos about how to handle the currency conversion issue. I’m providing few of the links below of the videos. Also feel free to browse our education portal for more contents available onto this topic.

Hoping you find this useful and meets your requirements that you’ve been looking for. :slightly_smiling_face:

Thanks and Warm Regards,
Harsh

Thank you for responding rapidly Harsh :+1:

I checked all those videos (already, and blog posts of same thing) and other websites etc. Each one of them ends up using a specific date in the row context where I want the latest date in the ex rates table for the row context currency.

I have now solved this using a summarize command to make a calculated table that gets the last non blank date and rate grouping by currency code.

I suspect I could embed this in my measure but a daily refreshed calc’d table seems a neat and efficient method to me.

Thanks again, I will keep watch and see if someone has a better way, in measure or a more reliable calculated table method.

Thanks.

Matt

Hi @mattduffyzz , did the response provided by @Harsh help you solve your query? If not, how far did you get and what kind of help you need further? If yes, kindly mark as solution the answer that solved your query. Thanks!

As explained, @Harsh information didn’t address my particular requirement, and I’d already been down that path: it’s much easier to get an exchange rate for a particular date (like order date for example) than it is to say get me the latest rate for a particular currency from the rates table (where we might not get rates every day for every currency).
CurrCode,RateDate,Rate
EUR, 24 Feb, 1.2066
EUR, 23 Feb, 1.2045
USD, 23 Feb, 1.4002
USD,19 Feb,1.3809

In this case, if I am converting a USD bank account balance (regardless of when that cash amount was posted in my bank ledger) I want it to use the latest rate - i.e. 23 Feb for USD. But for EUR bank accounts, I want to use the 24 Feb rate.

In SQL I would be able to create a view to identify an individual latest rate in seconds, or a view of latest rate for each currency. But, of course, DAX is different :slight_smile:

So, I had some fun achieving this in DAX, and think I have it, but suspect there is an easier way!! Here is my DAX code to make a table of latest rates - constructive advice on improving this is welcome :slight_smile:

SUMMARIZE(‘ExRates’,
‘ExRates’[CurrCode],
“Latest Rate Date”,LASTNONBLANK(‘ExRates’[RateDate],‘ExRates’,[RateDate),
“Latest Rate”,
CALCULATE(FIRSTNONBLANK(‘ExRates’[Rate],1),
LASTNONBLANK(‘ExRates’[RateDate],‘ExRates’[RateDate])
)
)

Since the CALCULATE filter (LASTNONBLANK) should return only one row, the FIRSTNONBLANK isn’t strictly necessary I could use any function - this could be SUM, MAX, AVERAGE … anything, since it should just be one value (there can be one Rate per Rate Date per Currency Code).