Forum Discussion
Row by row Conditional Formatting on a Matrix
For each Machine and Year you want to find the highest and lowest monthly values? Or for each Machine you want to find the highest and lowest values regardless of the year? You would need to use ISINSCOPE() to figure out where in the date hierarchy you are.
For each machine and year, I want to format the matrix so that the value in each row is formated according to how big it is from smallest to largests, ignoring other rows of data. as in the image below: For example for machine 2, 2023 46,466 data is the smallest and 2021 385,213 is the biggest.
I also what this for each month in a year - the value in each row should be formated from smallest to largest, ignoring other rows of data. Please see below example, for Machine two we get more detail than in the before image, we see that for 2022, June had the smallest data and March the largest.
If I drill down then the values in each row again should be formated to show the smallest to biggest, ignoring other rows of data. In the below eaxmple, the daily granulariy show that for Machine 2, in March 2022, March 20 had the smallest data whilst March 14 had the largest data.
Thank for for your reply. I will check out ISINSCOPE() function.
- lbendlin3 years agoSuper User
See attached.
color =
SWITCH(
TRUE(),
ISINSCOPE( 'Date Table'[Day Number] ),
VAR a =
CALCULATETABLE(
SUMMARIZE(
'Date Table',
'Date Table'[Year],
'Date Table'[Month],
'Date Table'[Day Number],
"sd", [sum data]
),
REMOVEFILTERS(
'Date Table'[Year],
'Date Table'[Month],
'Date Table'[Day Number]
)
)
RETURN
DIVIDE( [sum data] - MINX( a, [sd] ), MAXX( a, [sd] ) - MINX( a, [sd] ) ),
ISINSCOPE( 'Date Table'[Month] ),
VAR a =
CALCULATETABLE(
SUMMARIZE(
'Date Table',
'Date Table'[Year],
'Date Table'[Month],
"sd", [sum data]
),
REMOVEFILTERS( 'Date Table'[Year], 'Date Table'[Month] )
)
RETURN
DIVIDE( [sum data] - MINX( a, [sd] ), MAXX( a, [sd] ) - MINX( a, [sd] ) ),
ISINSCOPE( 'Date Table'[Year] ),
VAR a =
CALCULATETABLE(
SUMMARIZE( 'Date Table', 'Date Table'[Year], "sd", [sum data] ),
REMOVEFILTERS( 'Date Table'[Year] )
)
RETURN
DIVIDE( [sum data] - MINX( a, [sd] ), MAXX( a, [sd] ) - MINX( a, [sd] ) )
)- Anonymous3 years agoNot applicable
Hi Ibendlin,
Thank you so much for the time spent coming up with the above DAX. I appreciate your efort and time. Unfortunately, it doesn't work quite as I expect. In each row the data colouring doesn't flow from smallest to largest.
I created a work around with the below DAX. I essentially created two of the below DAX, one for formating the monthly view and another for formating the daily view and then added buttons for the use to move between the two matrices rather than drilling up or down. The below DAX is the monthly formating.month Row by row CF =
VAR SummaryTable =
CALCULATETABLE(
ADDCOLUMNS (
Summarize(
'Data Table name',
'Data Table name'[row granularity column],
'Date Table'[Year],
'Date Table'[Month]
),
" SummaryTable column name", [sum measure of interest]
),
ALLSELECTED('Date Table') // column to remove filter so restart every row
)
VAR MaxValue =
MAXX (
SummaryTable,
[SummaryTable column name]
)
VAR MinValue =
MINX (
SummaryTable,
[SummaryTable column name]
)
VAR range = MaxValue - MinValue
VAR hue =
Round(
DIVIDE (
[sum measure of interest] - MinValue,
range
)*60, 0
) // + 240 // - to change the colour hue
VAR colour = "hsla(" & hue & ", " & "100%" & ", " & "70%" & ", " & 1 & ")"
Return
colour
This solution is from Bas, How to Power BI video titled Unleash the full Potential of Conditional Formating- row by row colour scale in a Matrix. - powerbi2srm2 years agoResolver IIHi lbendlin ! The code doesn't run properly when you select more than one year in a slicer. The reason is "color" measure isn't between 0 and 1. How could it be fixed?Some days ago I created a similar question here:Thank you so much for your time!
- lbendlin2 years agoSuper User
I refactored the code. Seems to work better now.
color = SWITCH ( TRUE (), ISINSCOPE ( 'Date Table'[Day Number] ), VAR a = ADDCOLUMNS ( CALCULATETABLE ( SUMMARIZECOLUMNS ( 'Date Table'[Day Number] ), REMOVEFILTERS ( 'Date Table'[Day Number] ) ), "sd", [sum data] ) RETURN DIVIDE ( [sum data] - MINX ( a, [sd] ), MAXX ( a, [sd] ) - MINX ( a, [sd] ) ), ISINSCOPE ( 'Date Table'[Month] ), VAR a = ADDCOLUMNS ( CALCULATETABLE ( SUMMARIZECOLUMNS ( 'Date Table'[Month], 'Date Table'[Month Number] ), REMOVEFILTERS ( 'Date Table'[Month], 'Date Table'[Month Number] ) ), "sd", [sum data] ) RETURN DIVIDE ( [sum data] - MINX ( a, [sd] ), MAXX ( a, [sd] ) - MINX ( a, [sd] ) ), ISINSCOPE ( 'Date Table'[Year] ), VAR a = ADDCOLUMNS ( CALCULATETABLE ( SUMMARIZECOLUMNS ( 'Date Table'[Year] ), REMOVEFILTERS ( 'Date Table'[Year] ) ), "sd", [sum data] ) RETURN DIVIDE ( [sum data] - MINX ( a, [sd] ), MAXX ( a, [sd] ) - MINX ( a, [sd] ) ) )