- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Multiple variance calculation in matrix
Hi everyone
I'm doing a report in which I have multiple years as columns and some categories as rows. I would like to see two variance columns at the end, first as a difference between the last year's value and previous year's value, and the second variance would should the %.
I tried creating the first measure but i'm not able to get the value for those two years. Could you please review the DAX code below and advise what I'm missing there? Obviously the filter does not work as intended, but why?
If I replace the BLANK() with MaxYear, the system shows correctly 2018
If I replace the BLANK() with PrevYea, the system shows correctly 2017
If I replace the BLANK() with MaxYearValue, the system shows incrrectly SUM of values from all years, not only the last two.
Variance $ =
VAR MaxYear = CALCULATE(MAX('Table'[Year]))
VAR PrevYear = MaxYear-1
VAR MaxYearValue = CALCULATE(SUM('Table'[Value]),FILTER('Table',[Year]=MaxYear))
VAR PreviousYearValue = COALESCE(CALCULATE(SUM('Table'[Value]),'Table'[Year] = PrevYear),0)
RETURN
IF(
ISINSCOPE('Table'[Year]) ,
MaxYearValue - PreviousYearValue,
BLANK()
)
If I add another the second measure into the matrix, both measures are displayed for each year. Why and how do I fix?
Thank you
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @julpol ,
Did I solve your problem? Or you can also try turning off the following two options:
Best regards,
Community Support Team_ Scott Chang
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@julpol ,
First, let's create measures to calculate the values for the maximum year and the previous year.
DAX
MaxYearValue =
VAR MaxYear = CALCULATE(MAX('Table'[Year]))
RETURN CALCULATE(SUM('Table'[Value]), 'Table'[Year] = MaxYear)
DAX
PreviousYearValue =
VAR MaxYear = CALCULATE(MAX('Table'[Year]))
VAR PrevYear = MaxYear - 1
RETURN CALCULATE(SUM('Table'[Value]), 'Table'[Year] = PrevYear)
Then create a mesure for Variance
Variance% =
VAR MaxYear = CALCULATE(MAX('Table'[Year]))
VAR PrevYear = MaxYear - 1
VAR MaxYearValue = CALCULATE(SUM('Table'[Value]), 'Table'[Year] = MaxYear)
VAR PreviousYearValue = CALCULATE(SUM('Table'[Value]), 'Table'[Year] = PrevYear)
RETURN
IF(
ISINSCOPE('Table'[Year]),
DIVIDE(MaxYearValue - PreviousYearValue, PreviousYearValue, 0),
BLANK()
)
Proud to be a Super User! |
|
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
unfortunately, the result is the same,
1) both variance measures are blank in the matrix
2) when both are used, they are added to every column
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @julpol ,
There is no problem with your calculation logic. The problem is because you are putting multiple fields in the Values field of the matrix.For an matrix. multiple fields can be put in the row, which represents the hierarchy, whereas both columns and Values should have only one aggregated field.
Hope it helps!
Best regards,
Community Support Team_ Scott Chang
If this post helps then please consider Accept it as the solution to help the other members find it more quickly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @v-tianyich-msft ,
re 1) - the variance$ has probably a wrong filter as its value is $0? Please refer to first screenshot where only one variance is used in teh Values field, and the column shows $0 across all rows.
re 2) - is there a way to achieve this? To have two extra calculated columns on the right, one $ variance and one % variance.
Thank you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @julpol ,
It will give the same results as the last screenshot of your initial post, I made simple samples and you can check the results below:
Variance$ = var _t = ADDCOLUMNS('Table',"pre",MAXX(FILTER(ALL('Table'),[Category]=EARLIER([Category])&&[Year]=EARLIER([Year])-1),[Value]))
RETURN MAX('Table'[Value])-MAXX(_t,[pre])
Variance% = var _t = ADDCOLUMNS('Table',"pre",MAXX(FILTER(ALL('Table'),[Category]=EARLIER([Category])&&[Year]=EARLIER([Year])-1),[Value]))
RETURN DIVIDE(MAX('Table'[Value])-MAXX(_t,[pre]),SUM('Table'[Value]))
An attachment for your reference. Hope it helps!
Best regards,
Community Support Team_ Scott Chang
If this post helps then please consider Accept it as the solution to help the other members find it more quickly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @v-tianyich-msft thank you for your help. Is it possible to change the matrix so it does not show the variance fields as values per each Year column? I would like only the value from the "value" field to be visible per each year and then at the end see two variance columns.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @julpol ,
Did I solve your problem? Or you can also try turning off the following two options:
Best regards,
Community Support Team_ Scott Chang
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @julpol ,
Is this your desired result?
Variance% = var _t = ADDCOLUMNS('Table',"pre",MAXX(FILTER(ALL('Table'),[Category]=EARLIER([Category])&&[Year]=EARLIER([Year])-1),[Value]))
RETURN IF(ISINSCOPE('Table'[Year]),BLANK(),DIVIDE(MAX('Table'[Value])-MAXX(_t,[pre]),SUM('Table'[Value])))
Variance$ = var _t = ADDCOLUMNS('Table',"pre",MAXX(FILTER(ALL('Table'),[Category]=EARLIER([Category])&&[Year]=EARLIER([Year])-1),[Value]))
RETURN IF(ISINSCOPE('Table'[Year]),BLANK(),MAX('Table'[Value])-MAXX(_t,[pre]))
Hope it helps!
Best regards,
Community Support Team_ Scott Chang
If this post helps then please consider Accept it as the solution to help the other members find it more quickly.
Helpful resources
Join us at the Microsoft Fabric Community Conference
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Microsoft Fabric Community Conference 2025
Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.
Subject | Author | Posted | |
---|---|---|---|
07-27-2024 05:00 PM | |||
08-27-2024 06:22 AM | |||
07-01-2024 05:35 AM | |||
07-01-2024 05:45 AM | |||
03-20-2024 09:10 AM |
User | Count |
---|---|
21 | |
18 | |
17 | |
7 | |
5 |
User | Count |
---|---|
32 | |
27 | |
19 | |
13 | |
12 |