Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
Hi ,
I have an requirment to acheive
Top 5 in Green , Bottom 5 in Red and other values in Purple.
I need to acheive this in scatter plot visualization.
Need your help. I have attached the data sheet that i'm using for this requirement.
Thanks in advance
| Product | Sales Volume | Revenue | Rank |
| A | 33.5549 | 7189386 | Top5 |
| B | 137.4189 | 22808754 | Top5 |
| C | 272.0348 | 22142154 | Top5 |
| D | 149.5983 | 11514751 | Top5 |
| E | 214.1868 | 14848040 | Top5 |
| F | 117.7801 | 7935856 | Normal |
| G | 175.585 | 10154915 | Normal |
| H | 182.6557 | 10251254 | Normal |
| I | 183.7683 | 10227660 | Normal |
| J | 184.8968 | 10235825 | Normal |
| K | 238.4703 | 12649451 | Normal |
| M | 231.635 | 12076366 | Normal |
| N | 161.2197 | 8377149 | Normal |
| O | 210.0946 | 10492270 | Normal |
| P | 197.6389 | 9818325 | Normal |
| Q | 156.3735 | 7416810 | Normal |
| S | 172.3715 | 8068115 | Normal |
| T | 156.649 | 7205120 | Bottom5 |
| U | 200.5822 | 8956852 | Bottom5 |
| X | 176.8401 | 7862781 | Bottom5 |
| Y | 159.6275 | 7083706 | Bottom5 |
| Z | 181.7734 | 8002398 | Bottom5 |
Solved! Go to Solution.
Hey @ushankar ,
the solution provided by @Mariusz is much more elegant as the calculated column based solution I provided, but nevertheless it should tweaked a little.
I created a little pbix file, the scatter plot provides the same result, but used in a table the measure might create unexpected results as the following pictures shows:
For this reason I recommend to tweak the measure like so:
ms RANK ALL Table =
VAR P = ALL('Table1') --table instead of Product column
VAR T = RANKX( P, CALCULATE(SUM('Table1'[SN])) ,,DESC) <= 5 -- replace [s] with your mesure
VAR B = RANKX( P, CALCULATE(SUM('Table1'[SN])) ,,ASC) <= 5 -- replace [s] with your mesure
RETURN
SWITCH(
TRUE(),
T, "green", --is 1 then conditional format green
B, "red", --is 2 then conditional format red
"purple" --3 -- is 3 then conditional format purple
)
Regards,
Tom
Hi @ushankar ,
The below mesure shoud resolve your problem
RANK =
VAR P = ALL(Table1[Product]) --Product column
VAR T = RANKX( P, [s] ,,DESC) <= 5 -- replace [s] with your mesure
VAR B = RANKX( P, [s] ,,ASC) <= 5 -- replace [s] with your mesure
RETURN
SWITCH(
TRUE(),
T, 1, --is 1 then conditional format green
B, 2, --is 2 then conditional format red
3 -- is 3 then conditional format purple
)Use this mesure as conditonal formating.
Thanks
Mariusz
Hey @ushankar ,
the solution provided by @Mariusz is much more elegant as the calculated column based solution I provided, but nevertheless it should tweaked a little.
I created a little pbix file, the scatter plot provides the same result, but used in a table the measure might create unexpected results as the following pictures shows:
For this reason I recommend to tweak the measure like so:
ms RANK ALL Table =
VAR P = ALL('Table1') --table instead of Product column
VAR T = RANKX( P, CALCULATE(SUM('Table1'[SN])) ,,DESC) <= 5 -- replace [s] with your mesure
VAR B = RANKX( P, CALCULATE(SUM('Table1'[SN])) ,,ASC) <= 5 -- replace [s] with your mesure
RETURN
SWITCH(
TRUE(),
T, "green", --is 1 then conditional format green
B, "red", --is 2 then conditional format red
"purple" --3 -- is 3 then conditional format purple
)
Regards,
Tom
Thanks Tom !
Your solution did really works for me.
Hey,
I guess this looks very close to your requirement 😉
To achieve this I created a measure:
vizAid FillColor =
var thisRank = FIRSTNONBLANK('Table1'[Rank],0)
return
--"red"
SWITCH(
thisRank
,"Top5", "green"
,"Normal", "purple"
,"Bottom5", "red"
,"blue"
)
To work properly it's necessary that the column "Product" is used on field weld "Details" of the Scatter chart visual:
Then I assigned the measure to the data color using conditional formatting:
and finally this:
Hopefully this is what you are looking.
Regards,
Tom
Hi Tom,
Thanks for your quick reply. I was really quick.
My bad i did not articulate my requirement properly. According to the below table I want to rank on "SN" feild , the Rank column which i have mentioned is just for reference.
| Product | Sales Volume | Revenue | SN | Rank |
| A | 33.5549 | 7189386 | 214257 | Top5 |
| B | 137.4189 | 22808754 | 165980 | Top5 |
| C | 272.0348 | 22142154 | 81395 | Top5 |
| D | 149.5983 | 11514751 | 76971 | Top5 |
| E | 214.1868 | 14848040 | 69323 | Top5 |
| F | 117.7801 | 7935856 | 67379 | Normal |
| G | 175.585 | 10154915 | 57835 | Normal |
| H | 182.6557 | 10251254 | 56123 | Normal |
| I | 183.7683 | 10227660 | 55655 | Normal |
| J | 184.8968 | 10235825 | 55360 | Normal |
| K | 238.4703 | 12649451 | 53044 | Normal |
| L | 231.635 | 12076366 | 52135 | Normal |
| M | 161.2197 | 8377149 | 51961 | Normal |
| N | 210.0946 | 10492270 | 49941 | Normal |
| O | 197.6389 | 9818325 | 49678 | Normal |
| P | 156.3735 | 7416810 | 47430 | Normal |
| Q | 172.3715 | 8068115 | 46807 | Normal |
| R | 156.649 | 7205120 | 45995 | Bottom5 |
| S | 200.5822 | 8956852 | 44654 | Bottom5 |
| T | 176.8401 | 7862781 | 44463 | Bottom5 |
| U | 159.6275 | 7083706 | 44376 | Bottom5 |
| V | 181.7734 | 8002398 | 44024 | Bottom5 |
Hey,
you can create a calculated column using this DAX:
Column =
var top5Product =
SELECTCOLUMNS(
TOPN(5,
'Table2'
,CALCULATE(SUM('Table2'[SN]))
,DESC
)
,"topNProduec",'Table2'[Product]
)
var bottom5Product =
SELECTCOLUMNS(
TOPN(5,
'Table2'
,CALCULATE(SUM('Table2'[SN]))
,ASC
)
,"topNProduec",'Table2'[Product]
)
return
--countrows(top5Product)
IF('Table2'[Product] in top5Product,"Top5"
,IF('Table2'[Product] in bottom5Product, "Bottom5","something else")
)
The result will look this:
Please be aware that I changed the value for Product K on purpose to avoid getting trapped by the ordering of product/values 🙂
Then just apply/adapt the solution from my first post.
Regards,
Tom
The Power BI Data Visualization World Championships is back! It's time to submit your entry.
Check out the January 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 60 | |
| 49 | |
| 30 | |
| 25 | |
| 23 |
| User | Count |
|---|---|
| 131 | |
| 103 | |
| 58 | |
| 39 | |
| 31 |