Forum Discussion
Calculate grouped values based on criteria
- 8 years ago
Hello,
you know for starters it is a really hard request.
First Step: You have to Unpivot your FactTable using PowerQuery
let Source = Excel.CurrentWorkbook(){[Name="FactTable"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"CostCenter", type text}, {"Exp-Inc", type text}, {"Month01", Int64.Type}, {"Month02", Int64.Type}, {"Month03", Int64.Type}}), Unpivot_Month = Table.UnpivotOtherColumns(#"Changed Type", {"Exp-Inc", "CostCenter", "Year"}, "Attribut", "Wert"), Add_MonthNumb = Table.AddColumn(Unpivot_Month, "MonthNumb", each Text.End([Attribut],2)), Change_MonthNumb = Table.TransformColumnTypes(Add_MonthNumb,{{"MonthNumb", Int64.Type}}) in Change_MonthNumbThe result is a table looking like this:
After loading this to your Data Model you have to create a Dimension Table (DimTable):
Exp-IncID ID Sales 1 Salary 2 Profit before other costs 3 % PBOC 4 Other costs 5 Profit 6 % Profit 7 In your DimTable you create the following Measure:
Value:=
IF(HASONEVALUE(DimTable[Exp-Inc]); VAR Sales=CALCULATE(SUM(FactTable[Wert]);FactTable[Exp-Inc]="Sales") VAR Salary=CALCULATE(SUM(FactTable[Wert]);FactTable[Exp-Inc]="Salary") VAR Others=CALCULATE(SUM(FactTable[Wert]);FactTable[Exp-Inc]="Other costs") VAR Gross_Profit=Sales-Salary VAR Switch_Measure= SWITCH(MAX(DimTable[ID]); 1;Sales; 2;Salary; 3;Gross_Profit; 4;DIVIDE(Gross_Profit;Sales); 5;Others; 6;Gross_Profit-Others; 7;DIVIDE((Gross_Profit-Others);Sales)) RETURN IF(OR(MAX(DimTable[ID])=4;MAX(DimTable[ID])=7); FORMAT(Switch_Measure;"0%"); FORMAT(Switch_Measure;"0")); BLANK())It may be possible you have to change ";" to ",", according to my non-englisch version.
The result is the following:
There are dozens of great posts and blogs explaining SWITCH and VAR like:
Paramter Table, VAR 1, VAR 2, and my previous blog for SWITCH.You could also try to solve your problem through cascading like here.
Best regards.
Hello,
MonthNumb is obsolete, I expected it to be needed but it wasn't the case.
Switch was used to get the required structure of Values. Because some are calculated and others aren't.
The Format I defined in the IF-Statement.
Best regards.
Sorry that I didn't open a new topic - can you help me to add one more modification to this solution - I need to add a custom column which shows grow rate vs previous month.
Like an example for Company A, 2017, Sales month03 grow rate vs month02 is (124-150)/150= -17%