Forum Discussion
Row by row Conditional Formatting on a Matrix
Hi,
Thank you for your reply and apologies for my delay in responding.
Please find a pbix file here with a sample data set: pbix file
Here is also an Excel file showing the row by row conditional formating that I want.
Ideally each row of data is conditionally formated based on the highest and lowest value in that row. This formatting should be maintained when I drill down to the day granualrity or drill up to month.
Many thanks in advance!
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.
- Anonymous3 years agoNot applicable
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.