Forum Discussion
JustDavid
2 years agoHelper IV
Power Query SUMIFS with Multiple Conditions
As the subject says, given I'd like to do SUMIFS in PowerQuery with multiple conditions. Using the print screen as an example, let's say PQ is in Row 22 (UID = B, Cost Code = Z101, Period = 3 and...
- 1 year ago
- You will need to list only the columns that are needed to create a unique grouping, so probably NO.
- For table type argument, you should list all of the columns that are in the "Grouped Table"
- In that case, I would use a different approach.
- I don't know how you will access [Original Balance].
- In the code below, I arbitrarily set it to 2x the value of the first [Ending Balance] so the results would be the same.
- You will need to modify depending on how you have your "Period 1 Starting Balance"
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{ {"UID", type text}, {"Cost Code", type text}, {"Period", Int64.Type}, {"Ending Balance", Int64.Type}}), //Index column to be able to restore processed results to original order #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type), //Group by UID and Cost Code // then compute the SUMIFS using a shifted column // ASSUMES data sorted in Period order #"Grouped Rows" = Table.Group(#"Added Index", {"UID", "Cost Code"}, { {"Desired Result", (t)=> let #"Original Balance" = t{0}[Ending Balance] * 2, #"Add Index2" = Table.AddIndexColumn(t,"Index2",0,1,Int64.Type), #"Add Results" = Table.AddColumn(#"Add Index2", "Desired Results", each if [Index2]=0 then #"Original Balance"-[Ending Balance] else [Ending Balance] - #"Add Index2"{[Index2]-1}[Ending Balance], type number) in #"Add Results", type table[UID=text, Cost Code=text, Period=Int64.Type, Ending Balance=number, Index=Int64.Type, Index2=Int64.Type, Desired Results = number]}}), #"Expanded Desired Result" = Table.ExpandTableColumn(#"Grouped Rows", "Desired Result", {"Period", "Ending Balance", "Index", "Desired Results"}, {"Period", "Ending Balance", "Index", "Desired Results"}), #"Sorted Rows" = Table.Sort(#"Expanded Desired Result",{{"Index", Order.Ascending}}), #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"}) in #"Removed Columns"
JustDavid
1 year agoHelper IV
ronrsnfld Thank you!
I've accepted your solution. Just modified a little on your original post and in it, I just created 12 columns to see the change for 12 periods. With it, when it's period 1, just take the #result and less [Original Amount].
Thank you!
If I may ask, what's the double question mark (??) formula doing in this line of code?
#"Result" = Table.AddColumn(#"Shifted Balance","Desired Result", each [Ending Balance] - [Shifted Balance]??[Ending Balance])