Forum Discussion

JustDavid's avatar
JustDavid
Helper IV
1 year ago
Solved

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...
  • ronrsnfld's avatar
    ronrsnfld
    1 year ago
    1. You will need to list only the columns that are needed to create a unique grouping, so probably NO.
    2. For table type argument, you should list all of the columns that are in the "Grouped Table"
    3. In that case, I would use a different approach.
      1. I don't know how you will access [Original Balance].
      2. In the code below, I arbitrarily set it to 2x the value of the first [Ending Balance] so the results would be the same.
      3. 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"