Skip to main content
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

New Member

Percentages based of subtotals of a matrix



I am rather new to power BI and i didn't find a answer to what I'm trying to do.


Basically I have a matrix with a percentage column that depends on the grand total of a column.

What I'd like to do is that when I expand one level of that matrix, the percentages of the same column, instead of being calculated on the grand total (which look then very small) will now be based on the parent category which was expanded, to sum up to 100.


Here is a picture for explanation:



I would like the values in the red box to add up to 100% which would be the whole data represented by ZONE3 (which will still stay at 15.26%).

And even better If I can add one level more after to expand which will again add up to 100% then based on my SUBZONE level.

THanks a lot for your help!

Super User
Super User


Here is one way to do this:




Percentage =
var _v = Sum('Table (14)'[Value]) return


ISFILTERED('Table (14)'[DimC]),_v/CALCULATE(SUM('Table (14)'[Value]),ALL('Table (14)'[DimC])),

ISFILTERED('Table (14)'[DimB]),_v/CALCULATE(SUM('Table (14)'[Value]),ALL('Table (14)'[Dimb])),

 _v/CALCULATE(SUM('Table (14)'[Value]),ALL('Table (14)')))

End result:


I hope this post helps to solve your issue and if it does consider accepting it as a solution and giving the post a thumbs up!

My LinkedIn:

Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Thanks for the answer @ValtteriN ! I think I'm close to the outcome but I still have some issues.


Here is a more detailed query 



%percentage = 
VAR nb_client = SUM(mytable[total_clients_this_year]) RETURN
ISFILTERED(mytable[ZONE D]), nb_client/CALCULATE(SUM(mytable[total_clients_this_year]), ALL(mytable[ZONE D])),
ISFILTERED(other_table[ZONE C]), nb_client/CALCULATE(SUM(mytable[total_clients_this_year]), ALL(other_table[ZONE C])),
ISFILTERED(other_table[ZONE B]), nb_client/CALCULATE(SUM(mytable[total_clients_this_year]), ALL(other_table[ZONE B])),

 nb_client/CALCULATE(SUM(mytable[YTD]), ALLSELECTED())) --ALL SELECTED because there might be filters on the page to apply here


I don't think there should be an issue but you can see that some of the columns i use are from 2 different tables.

What happens is that I get the expected result at the lowest level (zone D) but all other level = 100 % ..

Thanks again !

Helpful resources

Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City


Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors