Home » Salesperson Commission Breakdown

Salesperson Commission Breakdown

Find the total commission of each sales person and sort it descending on total amount. T2 has got the sales persons involved in a deal and Sales amount. Commission of sales persons involved should be calculated on the basis of commission percentages listed in T1.

📌 Challenge Details and Links
ExcelBI Power Query Challenge Number: 212
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Salesperson Commission Breakdown with Power Query

Power Query solution 1 for Salesperson Commission Breakdown, proposed by Zoran Milokanović:
let
  Source = each Table.ToRows(Excel.CurrentWorkbook(){[Name = _]}[Content]), 
  H = {"Name", "Amount"}, 
  P = List.Zip(
    List.TransformMany(
      Source("Table2"), 
      each List.Skip(List.RemoveNulls(_), 2), 
      (i, _) => {_, i{1}}
    )
  ), 
  S = Table.Sort(
    Table.FromRows(
      List.TransformMany(
        Source("Table1"), 
        each {List.Transform(List.PositionOf(P{0}, _{0}, 2), (p) => _{2} * P{1}{p})}, 
        (i, _) => {i{1}, List.Sum(_)}
      ), 
      H
    ), 
    {H{1}, 1}
  )
in
  S
Power Query solution 2 for Salesperson Commission Breakdown, proposed by Kris Jaganah:
let
  S = each Excel.CurrentWorkbook(){[Name = _]}[Content], 
  Merge = Table.AddColumn(
    S("Table2"), 
    "Merge", 
    each Text.Combine(List.Skip(Record.ToList(_), 2), ", ")
  ), 
  Comm = Table.AddColumn(
    S("Table1"), 
    "Amount", 
    each List.Sum(Table.SelectRows(Merge, (x) => Text.Contains(x[Merge], [Code]))[Sales])
      * [Commission]
  ), 
  keep = Table.SelectColumns(Comm, {"Name", "Amount"}), 
  Sort = Table.Sort(keep, {"Amount", 1})
in
  Sort
Power Query solution 3 for Salesperson Commission Breakdown, proposed by Konrad Gryczan, PhD:
let
  Source = Excel.CurrentWorkbook(){[Name = "Tabela3"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(
    Source, 
    {
      {"Deal", type text}, 
      {"Sales", Int64.Type}, 
      {"Code1", type text}, 
      {"Code2", type text}, 
      {"Code3", type text}
    }
  ), 
  #"Unpivoted Columns" = Table.UnpivotOtherColumns(
    #"Changed Type", 
    {"Deal", "Sales"}, 
    "Atrybut", 
    "Wartość"
  ), 
  #"Merged Queries" = Table.NestedJoin(
    #"Unpivoted Columns", 
    {"Wartość"}, 
    T1, 
    {"Code"}, 
    "T1", 
    JoinKind.LeftOuter
  ), 
  #"Expanded {0}" = Table.ExpandTableColumn(
    #"Merged Queries", 
    "T1", 
    {"Name", "Commission"}, 
    {"T1.Name", "T1.Commission"}
  ), 
  #"Removed Columns" = Table.RemoveColumns(#"Expanded {0}", {"Deal", "Atrybut", "Wartość"}), 
  #"Reordered Columns" = Table.ReorderColumns(
    #"Removed Columns", 
    {"T1.Name", "Sales", "T1.Commission"}
  ), 
  #"Added Custom" = Table.AddColumn(#"Reordered Columns", "Amount", each [Sales] * [T1.Commission]), 
  #"Grouped Rows" = Table.Group(
    #"Added Custom", 
    {"T1.Name"}, 
    {{"Amount", each List.Sum([Amount]), type number}}
  ), 
  #"Sorted Rows" = Table.Sort(#"Grouped Rows", {{"Amount", Order.Descending}}), 
  #"Renamed Columns" = Table.RenameColumns(#"Sorted Rows", {{"T1.Name", "Name"}})
in
  #"Renamed Columns"
Power Query solution 4 for Salesperson Commission Breakdown, proposed by Aditya Kumar Darak 🇮🇳:
let
  T1      = Excel.CurrentWorkbook(){[Name = "_T1"]}[Content], 
  T2      = Excel.CurrentWorkbook(){[Name = "_T2"]}[Content], 
  Unpivot = Table.UnpivotOtherColumns(T2, {"Deal", "Sales"}, "Head", "Code"), 
  Join    = Table.AddJoinColumn(T1, "Code", Unpivot, "Code", "Join"), 
  Expand  = Table.ExpandTableColumn(Join, "Join", {"Sales"}), 
  Amount  = Table.AddColumn(Expand, "Amount", each [Commission] * [Sales]), 
  Group   = Table.Group(Amount, "Name", {"Amount", each List.Sum([Amount])}), 
  Return  = Table.Sort(Group, {"Amount", 1})
in
  Return
Power Query solution 5 for Salesperson Commission Breakdown, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  T1 = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  T2 = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  Tbl = Table.AddColumn(
    T2, 
    "A", 
    each 
      let
        a = List.RemoveNulls(List.Skip(Record.ToList(_), 2)), 
        b = List.Transform(a, (x) => Table.SelectRows(T1, each [Code] = x)), 
        c = Table.Combine(b)
      in
        c
  )[[A], [Sales]], 
  Exp = Table.ExpandTableColumn(Tbl, "A", Table.ColumnNames(Tbl[A]{0})), 
  Amt = Table.AddColumn(Exp, "B", each [Commission] * [Sales]), 
  Sol = Table.Sort(Table.Group(Amt, {"Name"}, {{"Amount", each List.Sum([B])}}), {"Amount", 1})
in
  Sol
Power Query solution 6 for Salesperson Commission Breakdown, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  tab = Table.AddColumn(
    Fonte, 
    "Amount", 
    each List.Product({List.Sum(Table.FindText(Tabela2, [Code])[Sales]), [Commission]})
  )[[Name], [Amount]], 
  res = Table.Sort(tab, {"Amount", 1})
in
  res
Power Query solution 7 for Salesperson Commission Breakdown, proposed by Hussein SATOUR:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  AddT2 = Table.AddColumn(
    Source, 
    "Amount", 
    each 
      let
        T2 = Table.UnpivotOtherColumns(
          Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
          {"Deal", "Sales"}, 
          "Attribute", 
          "Value"
        ), 
        v = [Code], 
        a = Table.SelectRows(T2, each ([Value] = v)), 
        c = [Commission]
      in
        List.Sum(List.Transform(a[Sales], (x) => x * c))
  )
in
  Table.Sort(Table.RemoveColumns(AddT2, {"Code", "Commission"}), {{"Amount", 1}})
Power Query solution 8 for Salesperson Commission Breakdown, proposed by Brian Julius:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  T2 = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  UnpivOther = Table.RemoveColumns(
    Table.UnpivotOtherColumns(T2, {"Deal", "Sales"}, "A", "SPCode"), 
    "A"
  ), 
  Join = Table.Join(UnpivOther, "SPCode", Source, "Code", JoinKind.LeftOuter), 
  ComputeAMT = Table.AddColumn(Join, "Amount", each [Sales] * [Commission]), 
  GroupSSum = Table.Sort(
    Table.Group(ComputeAMT, {"Name"}, {{"Amount", each List.Sum([Amount])}}), 
    {"Amount", Order.Descending}
  )
in
  GroupSSum
Power Query solution 9 for Salesperson Commission Breakdown, proposed by Abdallah Ally:
let
  Table1    = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Table2    = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  Unpivot   = Table.UnpivotOtherColumns(Table2, {"Deal", "Sales"}, "Value", "Code"), 
  Group     = Table.Group(Unpivot, "Code", {"Sales", each List.Sum([Sales])}), 
  Merge     = Table.Join(Table1, "Code", Group, "Code"), 
  AddColumn = Table.AddColumn(Merge, "Amount", each [Commission] * [Sales]), 
  Result    = Table.Sort(AddColumn, each - [Amount])[[Name], [Amount]]
in
  Result
Power Query solution 10 for Salesperson Commission Breakdown, proposed by Eric Laforce:
let
  Sources = Table.SelectRows(Excel.CurrentWorkbook(), each Text.StartsWith([Name], "tData212"))[
    Content
  ], 
  T1 = Table.Buffer(Sources{0}), 
  Transform = List.Transform(
    Table.ToRows(Sources{1}), 
    each 
      let
        _Sales = _{1}, 
        _Codes = List.RemoveNulls(List.Skip(_, 2)), 
        _T     = Table.SelectRows(T1, each List.Contains(_Codes, [Code]))
      in
        Table.AddColumn(_T, "Amount", each _Sales * [Commission])
  ), 
  Group = Table.Group(Table.Combine(Transform), "Name", {"Amount", each List.Sum([Amount])}), 
  Sort = Table.Sort(Group, {{"Amount", Order.Descending}})
in
  Sort
Power Query solution 11 for Salesperson Commission Breakdown, proposed by Eric Laforce:
let
  Sources = Table.SelectRows(Excel.CurrentWorkbook(), each Text.StartsWith([Name], "tData212"))[
    Content
  ], 
  Unpivot = Table.UnpivotOtherColumns(Sources{1}, {"Deal", "Sales"}, "Attribute", "Value"), 
  Join = Table.Join(Unpivot, "Value", Sources{0}, "Code"), 
  Group = Table.Group(
    Join, 
    "Name", 
    {"Amount", each List.Sum(Table.AddColumn(_, "V", each [Sales] * [Commission])[V])}
  ), 
  Sort = Table.Sort(Group, {{"Amount", Order.Descending}})
in
  Sort
Power Query solution 12 for Salesperson Commission Breakdown, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
  S1  = Excel.CurrentWorkbook(){[Name = "T_1"]}[Content], 
  S2  = Excel.CurrentWorkbook(){[Name = "T_2"]}[Content], 
  A   = Table.UnpivotOtherColumns(S2, {"Deal", "Sales"}, "Attribute", "Value"), 
  B   = Table.RenameColumns(A, {{"Value", "Code"}}), 
  C   = Table.SelectColumns(B, {"Deal", "Sales", "Code"}), 
  D   = Table.NestedJoin(C, {"Code"}, S1, {"Code"}, "C"), 
  E   = Table.ExpandTableColumn(D, "C", {"Name", "Commission"}, {"Name", "Commission"}), 
  F   = Table.AddColumn(E, "Am", each [Sales] * [Commission], type number), 
  Sol = Table.Group(F, {"Name"}, {{"Amount", each List.Sum([Am]), type number}})
in
  Sol
Power Query solution 13 for Salesperson Commission Breakdown, proposed by Yaroslav Drohomyretskyi:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Merge = Table.NestedJoin(Source, {"Code"}, Table.UnpivotOtherColumns(Excel.CurrentWorkbook(){[Name="Table2"]}[Content], {"Deal", "Sales"}, "Attribute", "Code"), {"Code"}, "Sales", JoinKind.LeftOuter),
 Amount = Table.AddColumn(Merge, "Amount", each List.Sum([Sales][Sales])*[Commission]),
 Clear = Table.SelectColumns(Amount,{"Name", "Amount"}),
 Sort = Table.Sort(Clear,{{"Amount", Order.Descending}})
in
 Sort

2) let
 Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
 Unpivot = Table.UnpivotOtherColumns(Source, {"Deal", "Sales"}, "Attribute", "Code"),
 Merge = Table.NestedJoin(Unpivot, {"Code"}, Excel.CurrentWorkbook(){[Name="Table1"]}[Content], {"Code"}, "Unpivoted Columns", JoinKind.LeftOuter),
 Expand = Table.ExpandTableColumn(Merge, "Unpivoted Columns", {"Name", "Commission"}, {"Name", "Commission"}),
 Group = Table.Group(Expand, {"Name"}, {{"Amount", each List.Sum([Sales])*List.Average([Commission]), type number}}),
 Sort = Table.Sort(Group,{{"Amount", Order.Descending}})
in
 Sort


                    
                  
          
Power Query solution 14 for Salesperson Commission Breakdown, proposed by Yaroslav Drohomyretskyi:
let
  Source = each Excel.CurrentWorkbook(){[Name = _]}[Content], 
  Result = Table.Sort(
    Table.SelectColumns(
      Table.AddColumn(
        Source("Table1"), 
        "Amount", 
        each List.Sum(
          Table.SelectRows(
            Table.UnpivotOtherColumns(Source("Table2"), {"Deal", "Sales"}, "Attribute", "Code"), 
            (row) => row[Code] = [Code]
          )[Sales]
        )
          * [Commission]
      ), 
      {"Name", "Amount"}
    ), 
    {{"Amount", Order.Descending}}
  )
in
  Result
Power Query solution 15 for Salesperson Commission Breakdown, proposed by Ahmed Ariem:
let
 f=(w,i)=>List.Sum(List.Transform(List.PositionOf(s,w,2),(x)=>r{x}*i)),
 tbl1= Excel.CurrentWorkbook(){[Name="tblA"]}[Content],
 from= Table.TransformColumnTypes(tbl1,{{"Commission", type number}}),
 tbl2= Excel.CurrentWorkbook(){[Name="tblB"]}[Content],
 Types = Table.TransformColumnTypes(tbl2,{{"Sales", type number}}),
 Unpivot = Table.UnpivotOtherColumns(Types, {"Deal", "Sales"}, "NCode", "Code"),
 s = List.Buffer(Unpivot[Code]&{""}),
 r = List.Buffer(Unpivot[Sales]&{0}),
 to = from,
 AddCol = Table.AddColumn(to, "Amount", each f([Code],[Commission]))[[Name],[Amount]],
 Sort = Table.Sort(AddCol,{{"Amount", Order.Descending}})
in
 Sort
----
file atached
https://1drv.ms/x/s!AiUZ0Ws7G26RkCn7xaK19omgmGZ4?e=xw0ait



                    
                  
          
Power Query solution 16 for Salesperson Commission Breakdown, proposed by Luke Jarych:
let
  T2        = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  T1        = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Unpivoted = Table.UnpivotOtherColumns(T2, {"Deal", "Sales"}, "Attribute", "Code"), 
  Grouped   = Table.Group(Unpivoted, {"Code"}, {{"Sum", each List.Sum([Sales])}}), 
  Joined    = Table.Join(Grouped, "Code", T1, "Code"), 
  AmountCol = Table.AddColumn(Joined, "Amount", each [Commission] * [Sum])[[Name], [Amount]], 
  Sorted    = Table.Sort(AmountCol, {{"Amount", Order.Descending}})
in
  Sorted
Power Query solution 17 for Salesperson Commission Breakdown, proposed by Gertjan Davies:
let
  Source = Problem_T1, 
  Other = Problem_T2, 
  UnpivotOther = Table.UnpivotOtherColumns(Other, {"Deal", "Sales"}, "Attribute", "Value"), 
  MergeT1T2 = Table.NestedJoin(
    UnpivotOther, 
    {"Value"}, 
    Source, 
    {"Code"}, 
    "Source", 
    JoinKind.LeftOuter
  ), 
  AddDetails = Table.ExpandTableColumn(
    MergeT1T2, 
    "Source", 
    {"Name", "Commission"}, 
    {"Name", "Commission"}
  ), 
  CommPerName = Table.AddColumn(AddDetails, "TotalCommision", each [Sales] * [Commission]), 
  Grouping = Table.Group(
    CommPerName, 
    {"Name"}, 
    {{"TotalCommsion", each List.Sum([TotalCommision]), type number}}
  ), 
  Sort = Table.Sort(Grouping, {{"TotalCommsion", Order.Descending}})
in
  Sort
Power Query solution 18 for Salesperson Commission Breakdown, proposed by Sanket Doijode:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 #"Merged Queries" = Table.ExpandTableColumn(Table.RemoveColumns(Table.TransformColumns(
Table.NestedJoin(Source, {"Code"}, Table2, {"Value"}, "Count", JoinKind.LeftOuter), {"Count", each Table.RemoveColumns(_,"Value")}),"Code")
,"Count",{"Count"}),
 #"Sorted Rows" = Table.Sort(Table.RemoveColumns(Table.AddColumn(#"Merged Queries", "Amount", each [Commission]*[Count]),{"Commission","Count"}),{{"Amount", Order.Descending}})
in
 #"Sorted Rows"

Table2

let
 Source = Table.RemoveColumns(Excel.CurrentWorkbook(){[Name="Table2"]}[Content],"Deal"),
 #"Unpivoted Other Columns" = Table.RemoveColumns(Table.UnpivotOtherColumns(Source, {"Sales"}, "Attribute", "Value"),"Attribute"),
 #"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Value"}, {{"Count", each List.Sum([Sales]), type number}})
in
 #"Grouped Rows"


                    
                  
          

Solving the challenge of Salesperson Commission Breakdown with Excel

Excel solution 1 for Salesperson Commission Breakdown, proposed by Bo Rydobon 🇹🇭:
=SORT(HSTACK(B3:B7,MMULT((TOROW(C12:E17)=A3:A7)*C3:C7,TOCOL(IFNA(B12:B17,C12:E17)))),2,-1)
Excel solution 2 for Salesperson Commission Breakdown, proposed by محمد حلمي:
=LET(I,
    MAP(A3:A7,
    C3:C7,
    LAMBDA(A,
    C,
    
SUM((C12:E17=A)*C*B12:B17))),
    SORT(
        HSTACK(
            B3:B7,
        &    I
        ),
        2,
        -1
    ))
Excel solution 3 for Salesperson Commission Breakdown, proposed by Kris Jaganah:
=SORT(
    HSTACK(
        B3:B7,
        MAP(
            A3:A7,
            LAMBDA(
                v,
                SUM(
                    BYROW(
                        N(
                            MAP(
                                A12:E17,
                                LAMBDA(
                                    x,
                                    x=v
                                )
                            )
                        ),
                        SUM
                    )*B12:B17
                )
            )
        )*C3:C7
    ),
    2,
    -1
)
Excel solution 4 for Salesperson Commission Breakdown, proposed by Julian Poeltl:
=LET(
    S,
    A3:A7,
    T,
    TOCOL(
        C12:E17&"|"&B12:B17
    ),
    B,
    TEXTBEFORE(
        T,
        "|"
    ),
    C,
    IFNA(
        XLOOKUP(
            B,
            S,
            C3:C7
        )*TEXTAFTER(
            T,
            "|"
        ),
        0
    ),
    VSTACK(
        HSTACK(
            "Name",
            "Amount"
        ),
        SORT(
            HSTACK(
                B3:B7,
                MAP(
                    S,
                    LAMBDA(
                        S,
                        SUM(
                            FILTER(
                                C,
                                B=S
                            )
                        )
                    )
                )
            ),
            2,
            -1
        )
    )
)
Excel solution 5 for Salesperson Commission Breakdown, proposed by Oscar Mendez Roca Farell:
=SORT(HSTACK(B3:B7,
     MAP(A3:A7,
     LAMBDA(a,
     SUM((C12:E17=a)*B12:B17*XLOOKUP(
         C12:E17,
          A3:A7,
          C3:C7,
          0
     ))))),
     2,
     -1)
Excel solution 6 for Salesperson Commission Breakdown, proposed by Duy Tùng:
=SORT(
    HSTACK(
        B3:B7,
        MAP(
            A3:A7,
            LAMBDA(
                x,
                SUM(
                    IF(
                        C12:E17=x,
                        B12:B17,
                        0
                    )
                )
            )
        )*C3:C7
    ),
    2,
    -1
)
Excel solution 7 for Salesperson Commission Breakdown, proposed by Sunny Baggu:
=SORT(
 HSTACK(
 B3:B7,
    
 MAP(
 A3:A7,
    
 C3:C7,
    
 LAMBDA(a,
     b,
     SUM((C12:E17 = a) * b * B12:B17))
 )
 ),
    
 2,
    
 -1
)
Excel solution 8 for Salesperson Commission Breakdown, proposed by Md. Zohurul Islam:
=LET(
u,
    A3:A7,
    
v,
    C3:C7,
    
nam,
    B3:B7,
    
cd,
    C12:E17,
    
sls,
    B12:B17,
    
a,
    MAP(u,
    v,
    LAMBDA(x,
    y,
    SUM((x=cd)*(y*sls)))),
    
b,
    SORT(
        HSTACK(
            nam,
            a
        ),
        2,
        -1
    ),
    
c,
    VSTACK(
        {"Name",
        "Amount"},
        b
    ),
    
c)
Excel solution 9 for Salesperson Commission Breakdown, proposed by Pieter de B.:
=SORT(HSTACK(B3:B7,
    MAP(A3:A7,
    C3:C7,
    LAMBDA(a,
    b,
    SUM(B12:B17*b*(C12:E17=a))))),
    2,
    -1)
Excel solution 10 for Salesperson Commission Breakdown, proposed by Asheesh Pahwa:
=LET(
    m,
    MAP(
        A3:A7,
        C3:C7,
        LAMBDA(
            x,
            y,
            SUM(
                N(
                    C12:E17=x
                )*B12:B17*y
            )
        )
    ),
    
    SORTBY(
        HSTACK(
            B3:B7,
            m
        ),
        m,
        -1
    )
)
Excel solution 11 for Salesperson Commission Breakdown, proposed by Asheesh Pahwa:
=LET(
    r,
    DROP(
        REDUCE(
            "",
            SEQUENCE(
                ROWS(
                    A12:A17
                )
            ),
            LAMBDA(
                x,
                y,
                
                VSTACK(
                    x,
                    LET(
                        i,
                        INDEX(
                            B12:B17,
                            y,
                            
                        ),
                        IFNA(
                            HSTACK(
                                TOCOL(
                                    INDEX(
                                        C12:E17,
                                        y,
                                        
                                    ),
                                    1
                                ),
                                i
                            ),
                            i
                        )
                    )
                )
            )
        ),
        1
    ),
    t,
    TAKE(
        r,
        ,
        -1
    ),
    x,
    t*XLOOKUP(
        TAKE(
            r,
            ,
            1
        ),
        A3:A7,
        C3:C7
    ),
    
    m,
    MAP(
        A3:A7,
        LAMBDA(
            z,
            SUM(
                FILTER(
                    x,
                    TAKE(
            r,
            ,
            1
        )=z
                )
            )
        )
    ),
    
    SORTBY(
        HSTACK(
            B3:B7,
            m
        ),
        m,
        -1
    )
)
Excel solution 12 for Salesperson Commission Breakdown, proposed by Imam Hambali:
=LET(
    
    l,
     LAMBDA(
         x,
          XLOOKUP(
              C12:E17,
              A3:A7,
              x
          )
     ),
    
    SORT(
        GROUPBY(
            TOCOL(
                l(
                    B3:B7
                ),
                3
            ),
             TOCOL(
                 l(
                     C3:C7
                 )*B12:B17,
                 3
             ),
            SUM,
            0,
            0
        ),
        2,
        -1
    )
    
)
Excel solution 13 for Salesperson Commission Breakdown, proposed by Gerson Pineda:
=SORT(HSTACK(B3:B7,
    MAP(A3:A7,
    LAMBDA(x,
    OFFSET(
        x,
        ,
        2
    )*SUM((x=C12:E17)*B12:B17)))),
    2,
    -1)
Excel solution 14 for Salesperson Commission Breakdown, proposed by Milan Shrimali:
=x)))),
    2,
    1),
    name,
    choosecols(
        table1,
        2
    ),
    stck,
    hstack(
        name,
        byrow(
            name,
            lambda(
                x,
                sum(
                    torow(
                        filter(
                            choosecols(
                                fnl,
                                1
                            ),
                            choosecols(
                                fnl,
                                3
                            )=x
                        )
                    )
                )
            )
        )
    ),
    per,
    BYROW(
        name,
        lambda(
            x,
            filter(
                choosecols(
                    table1,
                    3
                ),
                choosecols(
        table1,
        2
    )=x
            )
        )
    ),
    sort(
        hstack(
            name,
            BYROW(
                hstack(
                    stck,
                    per
                ),
                lambda(
                    x,
                    choosecols(
                        x,
                        2
                    )*choosecols(
                        x,
                        3
                    )
                )
            )
        ),
        2,
        0
    ))
Excel solution 15 for Salesperson Commission Breakdown, proposed by Edwin Tisnado:
=LET(
    a,
    MAP(
        A3:A7,
        C3:C7,
        LAMBDA(
            x,
            y,
            SUM(
                IFERROR(
                    SUBSTITUTE(
                        C12:E17,
                        x,
                        y
                    )*B12:B17,
                    0
                )
            )
        )
    ),
    SORT(
        HSTACK(
            B3:B7,
            a
        ),
        2,
        -1
    )
)

Solving the challenge of Salesperson Commission Breakdown with Python

Python solution 1 for Salesperson Commission Breakdown, proposed by Konrad Gryczan, PhD:
import pandas as pd
path = "PQ_Challenge_212.xlsx"
T1 = pd.read_excel(path, skiprows = 1, nrows = 5, usecols="A:C")
T2 = pd.read_excel(path, skiprows = 10, nrows = 6, usecols="A:E")
test = pd.read_excel(path, skiprows = 1, nrows = 5, usecols="H:I")
test.columns = test.columns.str.replace(".1", "")
result = T2.copy()
result = pd.melt(result, id_vars=["Deal", "Sales"], value_vars=["Code1", "Code2", "Code3"], var_name="Code", value_name="Value")
 .dropna()
 .merge(T1, left_on="Value", right_on="Code", how="left")
 .assign(Amount = lambda x: x["Sales"] * x["Commission"])
 .groupby("Name")["Amount"].sum()
 .sort_values(ascending=False)
 .reset_index(drop=False)
print(result.equals(test)) # True
                    
                  
Python solution 2 for Salesperson Commission Breakdown, proposed by Luke Jarych:
import pandas as pd
import xlwings as xw
import re
wb = xw.Book(r'PQ_Challenge_212.xlsx')
sh = wb.sheets[0]
table1 = sh.tables['Table1']
rng1 = sh.range(table1.range.address)
df1 = rng1.options(pd.DataFrame, header=True, index=False, numbers=float).value
table2 = sh.tables['Table2']
rng2 = sh.range(table2.range.address)
df2 = rng2.options(pd.DataFrame, header=True, index=False, numbers=int).value
df2_unpivoted = pd.melt(df2, id_vars=['Deal', 'Sales'],
 value_vars=['Code1', 'Code2', 'Code3'],
 var_name='Attribute', value_name='Code').dropna(subset=['Code'])
grouped = df2_unpivoted.groupby('Code').sum('Sales').reset_index()
merged = pd.merge(grouped, df1, on='Code', how='left')
merged['Amount'] = merged['Sales'] * merged['Commission']
merged = merged.sort_values(['Amount'], ascending=False).astype({'Amount': int})[['Name', 'Amount']]
                    
                  

Solving the challenge of Salesperson Commission Breakdown with Python in Excel

Python in Excel solution 1 for Salesperson Commission Breakdown, proposed by Alejandro Campos:
result = (
 xl("A11:E17", headers=True)
 .set_index(["Deal", "Sales"])
 .stack()
 .reset_index(name="Value")
 .merge(xl("A2:C7", headers=True), left_on="Value", right_on="Code", how="left")
 .assign(Amount=lambda x: x["Sales"] * x["Commission"])
 .groupby("Name", as_index=False)["Amount"].sum()
 .sort_values(by="Amount", ascending=False)
).reset_index(drop=True)
result
                    
                  
Python in Excel solution 2 for Salesperson Commission Breakdown, proposed by Abdallah Ally:
df1 = xl("A2:C7", headers=True)
df2 = xl("A11:E17", headers=True)
# Perform data munging
df2 = df2.melt(id_vars=df2.columns[:2], value_vars=df2.columns[2:])
df2 = df2.groupby('value')['Sales'].sum()
df = pd.merge(df1, df2, left_on='Code', right_on='value')
df['Amount'] = df['Commission'] * df['Sales']
df = df.loc[:, ['Name', 'Amount']]
df = df.sort_values(by='Amount', ascending=False, ignore_index=True)
df
                    
                  

Solving the challenge of Salesperson Commission Breakdown with R

R solution 1 for Salesperson Commission Breakdown, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Power Query/PQ_Challenge_212.xlsx"
T1 = read_excel(path, range = "A2:C7")
T2 = read_excel(path, range = "A11:E17")
test = read_excel(path, range = "H2:I7")
input = T2 %>%
 pivot_longer(cols = -c(1, 2), values_to = "Code") %>%
 left_join(T1, by = "Code") %>%
 na.omit() %>%
 mutate(Amount = Sales * Commission) %>%
 summarise(Amount = sum(Amount), .by = "Name") %>%
 arrange(desc(Amount)) 
identical(input, test)
#> [1] TRUE
                    
                  

&&

Leave a Reply