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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
ilTac
Frequent Visitor

SUM based on specific condition

Hello everyone, 

i've been trying on this for a while and it seems i'm not able to do it.

I think it should be simple but anyway:

 

here's my database:

Database.jpg

I would like to see % of good pieces so i made this measure:

 

%GOOD PIECE = sum(Good Pieces)/sum(pieces)

 

and this is what i have when i put everything in a visual (table).

 

Table.jpg

 

now below what i want to achieve (the 2 additional columns)

 

rESULTS.jpg

 

basically i would like to show to sum of all PIECES of ALL COMPANY below and above target.

 

i can't seem to figure this out.

 

I'm trying:

 

measure = calculate( sum(pieces), all(company), table([target])<%Good Pieces))

 

but it is not working,

can anyone help me?

 

Thank you so much.

2 ACCEPTED SOLUTIONS
thedatahiker
Employee
Employee

I tested this solution and it worked for my sample data set

Pieces Below Company Target :=
 
Var BelowTarget =
CALCULATE(
CALCULATE(sum(DataTest[Pieces]), FILTER(DataTest, [% Good Pieces] < [Target])),
all(DataTest)
)
RETURN

IF( [% Good Pieces] < [Target], BelowTarget)

Pieces Above Company Target :=
Var AboveTarget =
CALCULATE(
CALCULATE(sum(DataTest[Pieces]), FILTER(DataTest, [% Good Pieces] > [Target])),
all(DataTest)
)
RETURN

IF( [% Good Pieces] > [Target], AboveTarget)

thedatahiker_0-1628085282601.png

 

View solution in original post

@thedatahiker 

yes!

I just needed to add the filter in the Variable too.

ilTac_0-1628146134527.png

 

 

Thank you for your support!

View solution in original post

7 REPLIES 7
thedatahiker
Employee
Employee

I tested this solution and it worked for my sample data set

Pieces Below Company Target :=
 
Var BelowTarget =
CALCULATE(
CALCULATE(sum(DataTest[Pieces]), FILTER(DataTest, [% Good Pieces] < [Target])),
all(DataTest)
)
RETURN

IF( [% Good Pieces] < [Target], BelowTarget)

Pieces Above Company Target :=
Var AboveTarget =
CALCULATE(
CALCULATE(sum(DataTest[Pieces]), FILTER(DataTest, [% Good Pieces] > [Target])),
all(DataTest)
)
RETURN

IF( [% Good Pieces] > [Target], AboveTarget)

thedatahiker_0-1628085282601.png

 

Hi @thedatahiker , thank you for the answer.

 

 

i tryed your measure but if i'm not wrong you did your test on a database like the one in the green circle because this is what i get:

ilTac_3-1628089027979.png

 

 

so basically it worked but it does the calulation based on the target of the company for each day and i would like that it calculates based on the aggregation.

 

is there a way to fix this?

Thank you for the support

 

Hi @ilTac,

 

If I understand your question I think you just need is to alter the % good pieces measure in the IF statement to calculate the total for the entire company irrespective of date. You could also accomplish a similar result by using ALL(Table[Day]) instead of ALLEXCEPT but in this case, I think it makes more sense to be prescriptive on the total you want to include. 

Pieces Above Company Target =
Var AboveTarget =
CALCULATE(
CALCULATE(sum(DataTest[Pieces]), FILTER(DataTest, [% Good Pieces] > [Target])),
all(DataTest)
)
RETURN

IF( CALCULATE([% Good Pieces], ALLEXCEPT(DataTest,DataTest[Company])) > [Target], AboveTarget)

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

@thedatahiker 

yes!

I just needed to add the filter in the Variable too.

ilTac_0-1628146134527.png

 

 

Thank you for your support!

amitchandak
Super User
Super User

@ilTac , Try a measure like

 

below = calculate( sumX(filter(values(Table[company]), Sum([target])< [%Good Pieces]), calculate(sum(Table[pieces]))))

 

Above = calculate( sumX(filter(values(Table[company]), Sum([target])> [%Good Pieces]), calculate(sum(Table[pieces]))))

@amitchandak thank you for the answer.

This is the first try:

 

ilTac_0-1628081783320.png

basically it gives me te same value without aggregation and it considers everything above the target.

so i tryed this (using MAX instead of SUM)

ilTac_1-1628081857731.png

 

but it doesn't aggregate. So i tryed to add another filter to the sum function:

ilTac_2-1628081913176.png

but it gives me the sum for all the company

 

 

Helpful resources

Announcements
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

PBI_APRIL_CAROUSEL1

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.