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!To celebrate FabCon Vienna, we are offering 50% off select exams. Ends October 3rd. Request your discount now.
Hello Everybody,
Thanks for taking the time to read my question.
I am trying to assign a cumulative % to each row of customer data based on descending values, so that I can then add another column to label each customer 'high value' (top 80% by value), 'medium value' (next 15%) or 'low value' (final 5%). I have tried to create this using DAX as follows:
(In case the above picture hasn't come through properly, the column formula looks like this:)
Running % =
CALCULATE (
SUM ( 'Customer level'[Value %] ),
FILTER (
ALL ( 'Customer level'[Index.1] ,
'Customer level'[Index.1] <= MAX ( 'Customer level'[Index.1] )
)
)
)
I have added an Index column to give a rank but the above formula does not work.
Please help!
🙂
Solved! Go to Solution.
Thanks Tom.
I actually just got it to work by modifying my original column formula to, i.e. using 'EARLIER' instead of 'MAX' :
Running % =
CALCULATE (
SUM ( 'Customer level'[Value %] ),
ALL ( 'Customer level' ),
'Customer level'[Index.1] <= EARLIER ( 'Customer level'[Index.1] )
)
Incidentally, I have subsequently tried your method but haven't quite got it to work, but I won't trouble you further.
Many thanks for your quick reply!
Christian
Hey,
I think if you rewrite your calculated column in this way, it should work
Running % = var currentIndex = 'Customer level'[Index.1] return CALCULATE ( SUM ( 'Customer level'[Value %] ), FILTER ( ALLEXCEPT('Customer level', 'Customer level'[nameofyourcustomercolumn]) , 'Customer level'[Index.1] <= currentIndex ) )
Hope this helps, if not please provide some sample data.
Regards
Thanks Tom.
I actually just got it to work by modifying my original column formula to, i.e. using 'EARLIER' instead of 'MAX' :
Running % =
CALCULATE (
SUM ( 'Customer level'[Value %] ),
ALL ( 'Customer level' ),
'Customer level'[Index.1] <= EARLIER ( 'Customer level'[Index.1] )
)
Incidentally, I have subsequently tried your method but haven't quite got it to work, but I won't trouble you further.
Many thanks for your quick reply!
Christian
Hey,
great you figured it out, but I would be a little hesitant to use
FILTER(ALL('table'), ...)
in my little sample data this leads to this result
Edited just realized that the column "Using Earlier" should be named "Using ALL(table)"
But maybe I was wrong in understanding your question not to create a cumulative sum for each customer separately.
Regards