This is best Fabric, Power BI, SQL and AI community event. How do we know? The last event sold out! Save €200 with code FABCMTY200.
Register nowA new Data Days event is coming soon! This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. Don't miss out.
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
)
)
I hope I have explained that well enough! Looking forward to your inputs.
I can't post GLEntry data for obvious reasons.
Thanks!
Solved! Go to Solution.
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.
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
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.
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.
Check out the May 2026 Power BI update to learn about new features.
Sign up to receive a private message when registration opens and key events begin.
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
| User | Count |
|---|---|
| 5 | |
| 3 | |
| 3 | |
| 3 | |
| 2 |
| User | Count |
|---|---|
| 9 | |
| 7 | |
| 6 | |
| 6 | |
| 5 |