Home » Subtotal Calculation!

Subtotal Calculation!

Solving Subtotal Calculation challenge by Power Query, Power BI, Excel, Python and R

_x000D_

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:
=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

In the question table, sales info is provided. Add subtotals and grand totals into the data like the result table.

📌 Challenge Details and Links
Challenge Number: 88
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
📥Link to the solution on YouTube

Solving the challenge of Subtotal Calculation! with Power Query


Power Query solution 1 for Subtotal Calculation!, proposed by Zoran Milokanović:

let
  Source = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
    "Total Regions", 
    each List.Sum(List.Skip(Record.ToList(_), 2))
  ), 
  F = each 
    let
      t = Table.ToColumns(Table.SelectRows(Source, (r) => _ = null or r[Product] = _))
    in
      {{"Total " & t{0}{0}, "Grand Total"}{Byte.From(_ = null)}, null}
        & List.Transform(List.Skip(t, 2), List.Sum), 
  S = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each {_}
        & {{}, {F(_{0})}}{Byte.From(_{1} = 4)}
        & {{}, {F(null)}}{Byte.From(_ = Record.ToList(Table.Last(Source)))}, 
      (i, _) => _
    ), 
    Table.ColumnNames(Source)
  )
in
  S

 

Power Query solution 2 for Subtotal Calculation!, proposed by Luan Rodrigues:

let
 Fonte = Tabela1,
 gp = Table.Group(Fonte, {"Product"}, {{"tab", each 
 let
 a = Table.AddColumn(_,"Total Regions", each List.Sum(List.RemoveFirstN(Record.FieldValues(_),2))), 
 b = 
hashtag
#table(Table.ColumnNames(a),{List.Transform(Table.ToColumns(a),each try List.Sum(_) otherwise "Total " & a[Product]{0})}),
 c = a & Table.ReplaceValue(b,each [Season], null, Replacer.ReplaceValue,{"Season"} )
 in c }})[tab],
 total = 
 let 
 a = List.Transform(Table.ToColumns(Table.Combine(List.Transform(gp, each Table.SelectRows(_, each Text.StartsWith([Product],"Total" ) )))), each try List.Sum(_) otherwise "Grand Total" ),
 b = Table.FromRows({a}, Table.ColumnNames(gp{0}))
 in b,
 cmb = Table.Combine(gp) & total
in
 cmb

 

Power Query solution 3 for Subtotal Calculation!, proposed by Rafael González B.:

let
 Tbl = Excel.CurrentWorkbook(){0}[Content],
 Grp = Table.Group(Tbl, {"Product"}, 
 {
 {"T", 
 each 
 let
 a = Table.AddColumn(_, "Total Regions", each [Region 1] + [Region 2]),
 N = Table.ColumnNames(a),
 b = List.Accumulate(
 List.LastN(N, 3),
 {},
 (s , c) => s & {List.Sum(Table.Column(a, c))}),
 c = {"Total " & a{0}[Product], null} & b,
 d = Table.FromRows(Table.ToRows(a) & {c}, N)
 in
 d}
 }),
 GT = 
 let
 LS = List.Sum,
 R1 = {LS(Tbl[Region 1])},
 R2 = {LS(Tbl[Region 2])},
 RT = {LS(R1 & R2)},
 LC = List.Combine({{"Grand Total", null},R1, R2, RT})
 in
 Table.FromRows({LC}, Table.ColumnNames(Tbl) & {"Total Regions"}),

 Result = Table.Combine(Grp[T] & {GT})
in
 Result
🧙‍♂️🧙‍♂️🧙‍♂️

 

Power Query solution 4 for Subtotal Calculation!, proposed by Alejandro Simón 🇵🇦 🇪🇸:

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Group = Table.Combine(Table.Group(Source, {"Product"}, {{"All", each 
let
a = _,
b = Table.ToColumns(a),
c = List.Skip(b,2),
d = {"Total "&a[Product]{0}}&{null}&List.Transform(c, each List.Sum(_)),
e = Table.ToRows(a)&{d},
f = List.Transform(e, each List.Sum(List.Skip(_,2))),
g = List.Transform({0..List.Count(e)-1}, each e{_}&{f{_}}),
h = Table.FromRows(g, Table.ColumnNames(a)&{"Total Regions"})
in h}})[All]),
 GT = {"Grand Total", null}&List.Transform(List.Skip(Table.ToColumns(Table.SelectRows(Group, 
 each Text.Contains([Product], "Total"))), 2), List.Sum),
 Sol = Group & Table.FromRows({GT}, Table.ColumnNames(Group))
in
 Sol

 

Power Query solution 5 for Subtotal Calculation!, proposed by Kris Jaganah:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"Product"}, 
    {{"Region 1", each List.Sum([Region 1])}, {"Region 2", each List.Sum([Region 2])}}
  ), 
  AddT = Table.TransformColumns(Group, {"Product", each _ & " T"}), 
  Combine = Table.Combine({Source, AddT}), 
  RepNull = Table.ReplaceValue(Combine, null, "", Replacer.ReplaceValue, {"Season"}), 
  Sort = Table.Sort(RepNull, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  TReg = Table.AddColumn(Sort, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  SubT = Table.TransformColumns(
    TReg, 
    {"Product", each if Text.Length(_) > 1 then _ & "otal" else _}
  ), 
  GT = Table.InsertRows(
    SubT, 
    Table.RowCount(SubT), 
    {
      [
        Product       = "Grand Total", 
        Season        = null, 
        Region 1      = List.Sum(Source[Region 1]), 
        Region 2      = List.Sum(Source[Region 2]), 
        Total Regions = List.Sum(List.Combine(List.Skip(Table.ToColumns(Source), 2)))
      ]
    }
  )
in
  GT

 

Power Query solution 6 for Subtotal Calculation!, proposed by Yaroslav Drohomyretskyi:

let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"Product"}, {{"Table", each _}}), 
  ProductTotals = Table.TransformColumns(
    Group, 
    {
      "Table", 
      each _
        & Table.FromRecords(
          {
            [
              Product  = "Total " & [Product]{0}, 
              Region 1 = List.Sum([Region 1]), 
              Region 2 = List.Sum([Region 2])
            ]
          }
        )
    }
  ), 
  Expand = Table.ExpandTableColumn(
    Table.SelectColumns(ProductTotals, {"Table"}), 
    "Table", 
    {"Product", "Season", "Region 1", "Region 2"}, 
    {"Product", "Season", "Region 1", "Region 2"}
  ), 
  GrandTotal = Expand
    & Table.FromRecords(
      {
        [
          Product  = "Grand Total", 
          Region 1 = List.Sum(Expand[Region 1]) / 2, 
          Region 2 = List.Sum(Expand[Region 2]) / 2
        ]
      }
    ), 
  TotalRegions = Table.AddColumn(GrandTotal, "Total Regions", each [Region 1] + [Region 2])
in
  TotalRegions

Power Query solution 7 for Subtotal Calculation!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:

let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(S, "Total Regions", each List.Sum(List.Skip(Record.ToList(_), 2))), 
  B = Table.Group(
    A, 
    {"Product"}, 
    {
      {"Region 1", each List.Sum([Region 1]), type number}, 
      {"Region 2", each List.Sum([Region 2]), type number}, 
      {"Total Regions", each List.Sum([Total Regions]), type number}
    }
  ), 
  C = Table.AddColumn(B, "Season", each List.Max(A[Season]) + 1), 
  D = Table.Combine({A, C}), 
  E = Table.Sort(D, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  F = Table.Group(
    E, 
    {}, 
    {
      {"Region 1", each List.Sum([Region 1]) / 2, type number}, 
      {"Region 2", each List.Sum([Region 2]) / 2, type number}, 
      {"Total Regions", each List.Sum([Total Regions]) / 2, type number}
    }
  ), 
  G = Table.AddColumn(F, "Product", each "Grand Total"), 
  H = Table.Combine({D, G}), 
  I = Table.Sort(H, {{"Product", Order.Ascending}, {"Season", Order.Ascending}}), 
  J = Table.AddColumn(I, "P", each if [Season] = 5 then "Total" & [Product] else [Product]), 
  K = Table.SelectColumns(J, {"P", "Season", "Region 1", "Region 2", "Total Regions"}), 
  L = Table.RenameColumns(K, {{"P", "Product"}})
in
  L

 

Power Query solution 8 for Subtotal Calculation!, proposed by Szabolcs Phraner:

let
  Source = ..., 
  SetDataTypes = Table.TransformColumns(
    Source, 
    List.Transform(
      Table.ColumnNames(Source), 
      each {
        _, 
        if _ = "Product" then Text.From else Number.From, 
        if _ = "Product" then type text else type number
      }
    )
  ), 
  Total_Regions = Table.AddColumn(
    SetDataTypes, 
    "Total Regions", 
    each List.Sum(List.Skip(Record.FieldValues(_), 2)), 
    type number
  ), 
  RegionColumns = List.Skip(Table.ColumnNames(Total_Regions), 2), 
  CreateTotalRow = (Tbl as table, TotalColumns as list, PlusFields as nullable record) =>
    let
      RC = Table.RowCount(Tbl), 
      TotalRow = PlusFields
        & Record.FromList(
          List.Transform(TotalColumns, each List.Sum(Table.Column(Tbl, _))), 
          TotalColumns
        )
    in
      Table.InsertRows(Tbl, RC, {TotalRow}), 
  Grand_Total = {
    Table.Last(CreateTotalRow(Total_Regions, RegionColumns, [Product = "Grand Total", Season = ""]))
  }, 
  SubTotals = Table.Group(
    Total_Regions, 
    {"Product"}, 
    {
      {
        "Subtotals", 
        each Table.ToRecords(
          CreateTotalRow(_, RegionColumns, [Product = "Total " & Table.FirstValue(_), Season = ""])
        )
      }
    }
  )[Subtotals], 
  CombineRecords = Table.FromRecords(
    List.Combine(SubTotals & {Grand_Total}), 
    Value.Type(Total_Regions)
  )
in
  CombineRecords

 


Solving the challenge of Subtotal Calculation! with Excel

 

Excel solution 1 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(g,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    p,
    TAKE(
        g,
        ,
        1
    ),HSTACK(IF((INDEX(
    g,
    ,
    2
)="")*(p<>"Grand Total"),
    "Total ",
    "")&p,
    DROP(
        g,
        ,
        1
    ),
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                g,
                1,
                2
            ),
            SUM
        )
    )))

 

Excel solution 2 for Subtotal Calculation!, proposed by Bo Rydobon 🇹🇭:

=LET(
    z,
    B3:E18,
    w,
    HSTACK(
        z,
        BYROW(
            DROP(
                z,
                ,
                2
            ),
            SUM
        )
    ),
    r,
    SEQUENCE(
        ROWS(
            z
        )
    ),
    p,
    TAKE(
        z,
        ,
        1
    ),    SORTBY(
        VSTACK(
            HSTACK(
                B2:E2,
                "Total Regions"
            ),
            w,
            REDUCE(
                HSTACK(
                    "Grand Total",
                    ""
                ),
                UNIQUE(
                    p
                ),
                LAMBDA(
                    a,
                    v,
                    LET(
                        b,
                        LAMBDA(
                            i,
                            y,
                            BYCOL(
                                DROP(
                                    w,
                                    ,
                                    i
                                )*y,
                                LAMBDA(
                                    x,
                                    SUM(
                                        x
                                    )
                                )
                            )
                        ),
                        
                        IFNA(
                            VSTACK(
                                a,
                                HSTACK(
                                    "Total "&v,
                                    "",
                                    b(
                                        2,
                                        p=v
                                    )
                                )
                            ),
                            b(
                                0,
                                1
                            )
                        )
                    )
                )
            )
        ),
        VSTACK(
            0,
            r,
            99,
            FILTER(
                r,
                p<>DROP(
                    VSTACK(
                        p,
                        0
                    ),
                    1
                )
            )
        )
    )
)

 

Excel solution 3 for Subtotal Calculation!, proposed by محمد حلمي:

=LET(
    r,
    SUM(
        D3:D18
    ),
    w,
    SUM(
        E3:E18
    ),
    VSTACK(        REDUCE(
            I2:M2,
            UNIQUE(
                B3:B18
            ),
            LAMBDA(
                a,
                v,
                LET(
                    
                    e,
                    FILTER(
                        C3:E18,
                        B3:B18=v
                    ),
                    
                    i,
                    HSTACK(
                        e,
                        TAKE(
                            e,
                            ,
                            -1
                        )+INDEX(
                            e,
                            ,
                            2
                        )
                    ),
                    
                    VSTACK(
                        a,
                        IFNA(
                            HSTACK(
                                v,
                                i
                            ),
                            v
                        ),
                        HSTACK(
                            "Total "&v,
                            "",
                            
                            BYCOL(
                                DROP(
                                    i,
                                    ,
                                    1
                                ),
                                LAMBDA(
                                    q,
                                    SUM(
                                        q
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),        HSTACK(
            "Grand Total",
            "",
            r,
            w,
            r+w
        )
    )
)

 

Excel solution 4 for Subtotal Calculation!, proposed by Oscar Mendez Roca Farell:

=LET(
    p,
     B3:B18,
     s,
     TOROW(
         C3:C6
     )^0,
     t,
     "Total ",
     r,
     REDUCE(
         I2:M2,
          UNIQUE(
              p
          ),
          LAMBDA(
              i,
               x,
               LET(
                   f,
                    FILTER(
                        B3:E18,
                         p=x
                    ),
                    e,
                    DROP(
                        f,
                         ,
                         2
                    ),
                    m,
                    MMULT(
                        s,
                         e
                    ),
                    VSTACK(
                        i,
                         IFNA(
                             VSTACK(
                                 HSTACK(
                                     f,
                                      MMULT(
                                          e,
                                           {1; 1}
                                      )
                                 ),
                                  HSTACK(
                                      t&x,
                                       "",
                                       m
                                  )
                             ),
                              SUM(
                                  m
                              )
                         )
                    )
               )
          )
     ),
     VSTACK(
         r,
          HSTACK(
              "Grant"&t,
               "",
               MMULT(
                   s,
                    FILTER(
                        DROP(
                            r,
                             ,
                             2
                        ),
                         INDEX(
                            r,
                             ,
                             2
                        )=""
                    )
               )
          )
     )
)

 

Excel solution 5 for Subtotal Calculation!, proposed by Owen Price:

=LET(
 group_by,
     GROUPBY(
         B2:C18,
          D2:E18,
          SUM,
          3,
          2
     ), product,
     TAKE(
         group_by,
          ,
          1
     ), rename_subtotals,
     IF(
 (CHOOSECOLS(
     group_by,
      2
 ) = "") * (product <> "Grand Total"), "Total ", ""
 ) & product, HSTACK(      rename_subtotals,      DROP(
         group_by,
          ,
          1
     ),      VSTACK(
          "Total Regions",
           BYROW(
               DROP(
                   group_by,
                    1,
                    2
               ),
                SUM
           )
      ) )
)

 

Excel solution 6 for Subtotal Calculation!, proposed by Julian Poeltl:

=LET(
    T,
    D3:E18,
    A,
    B3:B18,
    U,
    UNIQUE(
        A
    ),
    R,
    WRAPROWS(
        TEXTSPLIT(
            TEXTJOIN(
                ",",
                ,
                MAP(
                    U,
                    LAMBDA(
                        B,
                        TEXTJOIN(
                            ",",
                            0,
                            LET(
                                F,
                                FILTER(
                                    B3:E18,
                                    A=B
                                ),
                                VSTACK(
                                    F,
                                    HSTACK(
                                        "Total "&B,
                                        "",
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                3
                                            )
                                        ),
                                        SUM(
                                            CHOOSECOLS(
                                                F,
                                                4
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            ","
        ),
        4
    ),
    C,
    IFERROR(
        R*1,
        R
    ),
    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            C,
            BYROW(
                TAKE(
                    C,
                    ,
                    -2
                ),
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            )
        ),
        HSTACK(
            "Grand Total",
            "",
            BYCOL(
                T,
                LAMBDA(
                    A,
                    SUM(
        A
    )
                )
            ),
            SUM(
                T
            )
        )
    )
)

 

Excel solution 7 for Subtotal Calculation!, proposed by Kris Jaganah:

=LET(a,
    GROUPBY(
        B2:C18,
        D2:E18,
        SUM,
        3,
        2
    ),
    b,
    VSTACK(
        "Total Regions",
        BYROW(
            DROP(
                a,
                1,
                2
            ),
            SUM
        )
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    IF((CHOOSECOLS(
        a,
        2
    )="")*(LEN(
        c
    )=1),
    "Total "&c,
    c),
    HSTACK(
        d,
        DROP(
        a,
        ,
        1
    ),
        b
    ))

 

Excel solution 8 for Subtotal Calculation!, proposed by John Jairo Vergara Domínguez:

=LET(i,
    GROUPBY(
        B2:C18,
        HSTACK(
            D2:E18,
            D2:D18+E2:E18
        ),
        SUM,
        3,
        2
    ),
    t,
    "Total ",
    p,
    TAKE(
        i,
        ,
        1
    ),
    HSTACK(IF((INDEX(
        i,
        ,
        2
    )="")*(LEN(
        p
    )=1),
    t&p,
    p),
    IFERROR(
        DROP(
        i,
        ,
        1
    ),
        t&"Regions"
    )))

 

Excel solution 9 for Subtotal Calculation!, proposed by Imam Hambali:

=LET(    a,
     GROUPBY(
         B3:C18,
         HSTACK(
             D3:D18,
             E3:E18
         ),
         SUM,
         ,
         2
     ),    b,
     BYROW(
         DROP(
             a,
             ,
             2
         ),
         LAMBDA(
             x,
              SUM(
                  x
              )
         )
     ),    c,
     MAP(
         TAKE(
             a,
             ,
             1
         ),
         CHOOSECOLS(
             a,
             2
         ),
         LAMBDA(
             x,
             y,
              IF(
                  AND(
                      y="",
                       x<>"Grand Total"
                  ),
                   "Total "&x,
                  x
              )
         )
     ),    VSTACK(
        HSTACK(
            B2:E2,
            "Total Regions"
        ),
        HSTACK(
            c,
             DROP(
             a,
             ,
             1
         ),
            b
        )
    ))
Excel solution 10 for Subtotal Calculation!, proposed by Sunny Baggu:

=LET(     _u,
     UNIQUE(
         B3:B18
     ),     LET(          _t,
          REDUCE(
              
               HSTACK(
                   B2:E2,
                    "Total Regions"
               ),
              
               _u,
              
               LAMBDA(
                   x,
                    y,
                   
                    VSTACK(
                        
                         x,
                        
                         LET(
                             
                              _f,
                              FILTER(
                                  B3:E18,
                                   B3:B18 = y
                              ),
                             
                              _f1,
                              TAKE(
                                  _f,
                                   ,
                                   -2
                              ),
                             
                              _sh,
                              BYCOL(
                                  _f1,
                                   LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
                              ),
                             
                              _sv,
                              BYROW(
                                  _f1,
                                   LAMBDA(
                                       b,
                                        SUM(
                                            b
                                        )
                                   )
                              ),
                             
                              VSTACK(
                                  HSTACK(
                                      _f,
                                       _sv
                                  ),
                                   HSTACK(
                                       {"Total A",
                                        ""},
                                        _sh,
                                        SUM(
                                            _sh
                                        )
                                   )
                              )
                              
                         )
                         
                    )
                    
               )
               
          ),          _t1,
          BYCOL(
              FILTER(
                  TAKE(
                      _t,
                       ,
                       -3
                  ),
                   ISNUMBER(
                       SEARCH(
                           "Total",
                            TAKE(
                                _t,
                                 ,
                                 1
                            )
                       )
                   )
              ),
               LAMBDA(
                                       a,
                                        SUM(
                                            a
                                        )
                                   )
          ),          VSTACK(
              _t,
               HSTACK(
                   {"Grand Total",
                    ""},
                    _t1
               )
          )     ))

 

Excel solution 11 for Subtotal Calculation!, proposed by Asheesh Pahwa:

=LET(
    r,
    REDUCE(
        HSTACK(
            B2:E2,
            M2
        ),
        UNIQUE(
            B3:B18
        ),
        LAMBDA(
            x,
            y,
            VSTACK(
                x,
                LET(
                    f,
                    FILTER(
                        C3:E18,
                        B3:B18=y
                    ),
                    h,
                    CHOOSECOLS(
                        f,
                        2,
                        3
                    ),
                    br,
                    BYROW(
                        h,
                        LAMBDA(
                            a,
                            SUM(
                                a
                            )
                        )
                    ),
                    s,
                    SUM(
                        br
                    ),
                    vs,
                    VSTACK(
                        br,
                        s
                    ),
                    bc,
                    BYCOL(
                        h,
                        LAMBDA(
                            v,
                            SUM(
                                v
                            )
                        )
                    ),
                    
                    HSTACK(
                        VSTACK(
                            IFNA(
                                HSTACK(
                                    y,
                                    f
                                ),
                                y
                            ),
                            HSTACK(
                                "Total "&y,
                                "",
                                bc
                            )
                        ),
                        vs
                    )
                )
            )
        )
    ),    s,
    ISNUMBER(
        SEARCH(
            "Total",
            TAKE(
                r,
                ,
                1
            )
        )
    ),
    f,
    FILTER(
        CHOOSECOLS(
            r,
            {3,
            4,
            5}
        ),
        s
    ),    VSTACK(
        r,
        HSTACK(
            "Grand Tota",
            "",
            BYCOL(
                f,
                LAMBDA(
                    x,
                    SUM(
                        x
                    )
                )
            )
        )
    )
)

Leave a Reply