Power BI is turning 10, and we’re marking the occasion with a special community challenge. Use your creativity to tell a story, uncover trends, or highlight something unexpected.
Get startedJoin us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.
I have an assessment tool where respondents provide performance values for different KPIs. Based on collected responses, I then calculate 25th percentile, median, and 75th percentile scores. The issue is that for some KPIs, higher is better and for others, lower is better. In the KPI table, I include a T/F field named HigherBetter.
Using a matrix visual, I list KPIs by row. Columns are the respondent's region. The values are n (number of responses), 25th percentile, median, and 75th percentile. I have explicit measures for each value.
For KPIs where lower is better, I would like to invert the scale so that 75th percentile is a lower value than 25th percentile. I could do this by simply using 1 - [percentile]. To do this, I would need to look at the KPI value in each matrix row and look up the corresponding value of the HigherBetter column. Or perhaps there's a better way to accomplish my goal. But it has to be a dynamic measure based on the current row and filter context.
Here's a link to my sample .pbix file.
Any help is greatly appreciated.
Solved! Go to Solution.
Hi @Anonymous
Yes, I agree, conditionally inverting the percentile would be the way to go 🙂
I would write the measures something like this (allowing for easy adjustment to handle different percentiles in the future):
25th Pctl =
VAR Pct = 0.25
-- Retrieve HigherBetter value from KPIs table, defaulting to TRUE
-- Default would only be used if multiple KPIs aggregated with different HigherBetter values which shouldn't happen.
VAR HigherBetter =
SELECTEDVALUE ( KPIs[HigherBetter], TRUE () )
VAR PctAdj =
IF ( HigherBetter, Pct, 1 - Pct )
RETURN
PERCENTILE.INC ( Scores[Value], PctAdj )
75th Pctl =
VAR Pct = 0.75
-- Retrieve HigherBetter value from KPIs table, defaulting to TRUE
-- Default would only be used if multiple KPIs aggregated with different HigherBetter values which shouldn't happen.
VAR HigherBetter =
SELECTEDVALUE ( KPIs[HigherBetter], TRUE () )
VAR PctAdj =
IF ( HigherBetter, Pct, 1 - Pct )
RETURN
PERCENTILE.INC ( Scores[Value], PctAdj )
Does this work as expected?
Regards
Hi @Anonymous
Yes, I agree, conditionally inverting the percentile would be the way to go 🙂
I would write the measures something like this (allowing for easy adjustment to handle different percentiles in the future):
25th Pctl =
VAR Pct = 0.25
-- Retrieve HigherBetter value from KPIs table, defaulting to TRUE
-- Default would only be used if multiple KPIs aggregated with different HigherBetter values which shouldn't happen.
VAR HigherBetter =
SELECTEDVALUE ( KPIs[HigherBetter], TRUE () )
VAR PctAdj =
IF ( HigherBetter, Pct, 1 - Pct )
RETURN
PERCENTILE.INC ( Scores[Value], PctAdj )
75th Pctl =
VAR Pct = 0.75
-- Retrieve HigherBetter value from KPIs table, defaulting to TRUE
-- Default would only be used if multiple KPIs aggregated with different HigherBetter values which shouldn't happen.
VAR HigherBetter =
SELECTEDVALUE ( KPIs[HigherBetter], TRUE () )
VAR PctAdj =
IF ( HigherBetter, Pct, 1 - Pct )
RETURN
PERCENTILE.INC ( Scores[Value], PctAdj )
Does this work as expected?
Regards
@OwenAuger Thank you so much! This is exactly what I was looking for. I didn't know that SELECTEDVALUE() could work this way. You've helped me before, and you are by far the most skillful person I've encountered in this forum. I truly appreciate it!
This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.
Check out the June 2025 Power BI update to learn about new features.
User | Count |
---|---|
11 | |
9 | |
7 | |
6 | |
5 |
User | Count |
---|---|
20 | |
11 | |
10 | |
9 | |
6 |