Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The FabCon + SQLCon recap series starts April 14th at 8am Pacific. If you’re tracking where AI is going inside Fabric, this first session is a can't miss. Register now

Reply
wardy912
Super User
Super User

Currency FX Rates

Hi everyone,

 

 I have a pretty challenging DAX task (In my opinion, hopefully someone tells me it's easy!).

 

I am currently putting together a balance sheet and I have the following CurrencyFX table:

company starting_date month rate type number
Company_1 01/04/2026 Apr-26 0.01401 Monthly 0
Company_1 01/03/2026 Mar-26 0.014146 Monthly 0
Company_1 28/02/2026 Feb-26 0.014184 Monthly 0
Company_1 31/01/2026 Jan-26 0.014286 Monthly 0
Company_2 01/04/2026 Apr-26 0.864304 Monthly 0
Company_2 01/03/2026 Mar-26 0.871916 Monthly 0
Company_2 28/02/2026 Feb-26 0.878272 Monthly 0
Company_2 31/01/2026 Jan-26 0.867002 Monthly 0
Company_3 01/04/2026 Apr-26 0.008072 Monthly 0
Company_3 01/03/2026 Mar-26 0.008126 Monthly 0
Company_3 28/02/2026 Feb-26 0.008169 Monthly 0
Company_3 31/01/2026 Jan-26 0.00793 Monthly 0
Company_4 01/04/2026 Apr-26 0.864304 Monthly 0
Company_4 01/03/2026 Mar-26 0.871916 Monthly 0
Company_4 28/02/2026 Feb-26 0.878272 Monthly 0
Company_4 31/01/2026 Jan-26 0.882768 Monthly 0
Company_2 01/01/2026 Jan-26 0.903222 Account 20101
Company_4 01/01/2026 Jan-26 0.837333 Account 20101
Company_3 01/01/2026 Jan-26 0.008748 Account 20101
Company_1 01/01/2026 Jan-26 0.014078 Account 20101
Company_2 01/01/2026 Jan-26 0.903222 Account 20102
Company_4 01/01/2026 Jan-26 0.837333 Account 20102
Company_3 01/01/2026 Jan-26 0.008748 Account 20102
Company_1 01/01/2026 Jan-26 0.014078 Account 20102
Company_2 01/01/2026 Jan-26 0.903222 Account 20103
Company_4 01/01/2026 Jan-26 0.837333 Account 20103
Company_3 01/01/2026 Jan-26 0.008748 Account 20103
Company_1 01/01/2026 Jan-26 0.014078 Account 20103
Company_2 01/01/2026 Jan-26 0.903222 Account 20201
Company_4 01/01/2026 Jan-26 0.837333 Account 20201
Company_3 01/01/2026 Jan-26 0.008748 Account 20201
Company_1 01/01/2026 Jan-26 0.014078 Account 20201
Company_2 01/01/2026 Jan-26 0.903222 Account 20202
Company_4 01/01/2026 Jan-26 0.837333 Account 20202
Company_3 01/01/2026 Jan-26 0.008748 Account 20202
Company_1 01/01/2026 Jan-26 0.014078 Account 20202
Company_2 01/01/2026 Jan-26 0.830597 Account 20301
Company_4 01/01/2026 Jan-26 0.872245 Account 20301
Company_3 01/01/2026 Jan-26 0.008247 Account 20301
Company_1 01/01/2026 Jan-26 0.014376 Account 20301
Company_2 01/01/2026 Jan-26 0.830597 Account 20302
Company_4 01/01/2026 Jan-26 0.872245 Account 20302
Company_3 01/01/2026 Jan-26 0.008247 Account 20302
Company_1 01/01/2026 Jan-26 0.014376 Account 20302
Company_2 01/01/2026 Jan-26 0.830597 Account 20303
Company_4 01/01/2026 Jan-26 0.872245 Account 20303
Company_3 01/01/2026 Jan-26 0.008247 Account 20303
Company_1 01/01/2026 Jan-26 0.014376 Account 20303
Company_5 01/01/2026 Jan-26 1 Fixed 0
Company_6 01/01/2026 Jan-26 1 Fixed 0
Company_7 01/01/2026 Jan-26 1 Fixed 0
Company_8 01/01/2026 Jan-26 1 Fixed 0
Company_9 01/01/2026 Jan-26 1 Fixed 0
Company_10 01/01/2026 Jan-26 1 Fixed 0
Company_11 01/01/2026 Jan-26 1 Fixed 0
Company_12 01/01/2026 Jan-26 1 Fixed 0

 

My Base measures are:

Actual = SUM(GLEntry[Amount])

Actual Cumulative = 
VAR CurrentMonth = MAX('DimDate'[Date])
RETURN
    CALCULATE(
        [Actual],
        FILTER(
            ALL('DimDate'),
            'DimDate'[Date] <= CurrentMonth
        )
    )

 

I have the following requirements:


If CurrencyFX[Type] = "Monthly", multiply Actual by the current months rate for that company. This is a balance sheet so I will be using a cumulative figure. In January multiply Januarys Actual by January rate. In February, multiply January + February Actual by Februarys rate, etc.

If CurrencyFX[Type] = "Account", when GLEntry[GLAccountNo] = CurrencyFX[number] for the specified company, multiply Actual by that rate in every month.

If CurrencyFX[Type] = "Fixed" always multiply by that rate (Intention is to give Actual without conversion)

 

I have the following DAX measures that work only when a company is selected. I need to be able to select all companies to provide group numbers. I added all companys to the fx table and added a relationship to DimCompany to see if this would fix it but it didn't.

FX Account = 
CALCULATE(
    MAX(CurrencyFX[rate]),
    TREATAS( VALUES(GLEntry[GLAccountNo-3]), CurrencyFX[number] ),
    TREATAS( VALUES(GLEntry[$Company]), CurrencyFX[company] )
)
FX Monthly = 
CALCULATE(
    MAX(CurrencyFX[rate]),
    TREATAS( VALUES(GLEntry[$Company]), CurrencyFX[company] ),
    TREATAS( VALUES(DimDate[MonthYear]), CurrencyFX[month] )
)
FX Fixed = 
CALCULATE(
    MAX(CurrencyFX[rate]),
    TREATAS( VALUES(GLEntry[$Company]), CurrencyFX[company] ),
    CurrencyFX[type] = "Fixed"
)
FX Rate = 
COALESCE(
    [FX Account],
    [FX Monthly],
    [FX Fixed]
)
Actual FX = 
[Actual] * [FX Rate]
Actual Cumulative = 
VAR CurrentMonth = MAX('DimDate'[Date])
RETURN
    CALCULATE(
        [Actual FX],
        FILTER(
            ALL('DimDate'),
            'DimDate'[Date] <= CurrentMonth
        )
    )

  

wardy912_0-1775031903653.png

 

I hope I have explained that well enough! Looking forward to your inputs.
I can't post GLEntry data for obvious reasons.

Thanks!

 

 

1 ACCEPTED SOLUTION
johnt75
Super User
Super User

I think the only change you need to make is to [Actual FX]

Actual FX =
SUMX ( DimCompany, [Actual] * [FX Rate] )

That guarantees that a company is always selected, even when calculating totals.

If performance is an issue then you could also consider making the below changes.

FX Account =
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[GLAccountNo-3], GLEntry[$Company] ),
        CurrencyFX[number],
        CurrencyFX[company]
    )
)
FX Monthly =
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[$Company], DimDate[MonthYear] ),
        CurrencyFX[company],
        CurrencyFX[month]
    )
)

Using a single TREATAS / SUMMARIZE rather than multiple TREATAS / VALUES should speed it up a bit.

View solution in original post

5 REPLIES 5
wardy912
Super User
Super User

Got this working now.

Found that it was only applying the monthly rate to GLEntry rows that were in that month, defaulting to 1 if there were no entries.

I had to adjust the monthly rate:

FX Monthly = 
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    CurrencyFX[Type] = "Monthly",
    TREATAS (
        SUMMARIZE ( DimDate, DimDate[MonthYear] ),
        CurrencyFX[month]
    ),
    TREATAS (
        SUMMARIZE ( DimCompany, DimCompany[$Company] ),
        CurrencyFX[company]
    )
)


I then had to calculate the cumulative measure before applying the rate

Actual Cumulative FX = 
VAR CurrentMonth = MAX('DimDate'[Date])
RETURN
    SUMX(
        DimCompany,
        CALCULATE(
            [Actual],
            FILTER(
                ALL('DimDate'),
                'DimDate'[Date] <= CurrentMonth
            )
        )
        * [FX Rate]
    )


Thanks for your help @johnt75 




wardy912
Super User
Super User

I now have January working correctly with the following measures:

FX Account = 
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    CurrencyFX[Type] = "Account",
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[GLAccountNo-3], GLEntry[$Company] ),
        CurrencyFX[number],
        CurrencyFX[company]
    )
)
FX Monthly = 
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    CurrencyFX[Type] = "Monthly",
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[$Company], DimDate[MonthYear] ),
        CurrencyFX[company],
        CurrencyFX[month]
    )
)
FX Rate = 
COALESCE(
    [FX Account],
    [FX Monthly],
    1
)
Actual FX = 
SUMX ( DimCompany, [Actual] * [FX Rate] )
Actual Cumulative = 
VAR CurrentMonth = MAX('DimDate'[Date])
RETURN
    CALCULATE(
        [Actual FX],
        FILTER(
            ALL('DimDate'),
            'DimDate'[Date] <= CurrentMonth
        )
    )

 

However, February is using Januarys rates?

I think that

FX Monthly =
VAR CurrentMonth =
    MAX ( DimDate[MonthYear] )
RETURN
    CALCULATE (
        MAX ( CurrencyFX[rate] ),
        CurrencyFX[Type] = "Monthly",
        TREATAS ( VALUES ( GLEntry[$Company] ), CurrencyFX[company] ),
        CurrencyFX[month] = CurrentMonth
    )

will work as long as DimDate[MonthYear] is a date or datetime type. If its a text type, then you would need to use whichever column you have set as the sort by column.

johnt75
Super User
Super User

I think the only change you need to make is to [Actual FX]

Actual FX =
SUMX ( DimCompany, [Actual] * [FX Rate] )

That guarantees that a company is always selected, even when calculating totals.

If performance is an issue then you could also consider making the below changes.

FX Account =
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[GLAccountNo-3], GLEntry[$Company] ),
        CurrencyFX[number],
        CurrencyFX[company]
    )
)
FX Monthly =
CALCULATE (
    MAX ( CurrencyFX[rate] ),
    TREATAS (
        SUMMARIZE ( GLEntry, GLEntry[$Company], DimDate[MonthYear] ),
        CurrencyFX[company],
        CurrencyFX[month]
    )
)

Using a single TREATAS / SUMMARIZE rather than multiple TREATAS / VALUES should speed it up a bit.

Thanks @johnt75 !

 

 That's definitely fixed the company issue!

Also, thanks for the performance tip.

 

I'll get some testing done as a couple of the numbers are still wrong and get back to you asap.

 

Helpful resources

Announcements
New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Join our Fabric User Panel

Join our Fabric User Panel

Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.

March Power BI Update Carousel

Power BI Community Update - March 2026

Check out the March 2026 Power BI update to learn about new features.