Home » Calculate Shipped Fruit Value

Calculate Shipped Fruit Value

Calculate the Shipped and Non-shipped amounts (Quantity * Price) for all Fruits. Also generate the total row and column.

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

Solving the challenge of Calculate Shipped Fruit Value with Power Query

Power Query solution 1 for Calculate Shipped Fruit Value, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
  L = {"Shipped Amount", "Not Shipped Amount", "Total", "Status"}, 
  P = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each 
        let
          s = List.Split(List.Skip(_), 3)
        in
          s & List.Transform(s, each {"T"} & List.Skip(_)), 
      (i, _) => {L{List.PositionOf({"Y", "N", "T"}, _{0})}, i{0}, _{1} * _{2}}
    ), 
    {L{3}, "A", "V"}
  ), 
  S = Table.Sort(
    Table.Pivot(
      P & Table.Group(P, L{3}, {{"A", each L{2}}, {"V", each List.Sum([V])}}), 
      List.Sort(Source[Fruits]) & {L{2}}, 
      "A", 
      "V", 
      each List.Sum(_) ?? 0
    ), 
    each List.PositionOf(L, [Status])
  )
in
  S
Power Query solution 2 for Calculate Shipped Fruit Value, proposed by Kris Jaganah:
let
  A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  B = List.Accumulate(
    {"1", "2"}, 
    A, 
    (x, y) =>
      Table.CombineColumns(
        x, 
        {"Price" & y, "Quantity" & y, "Shipped" & y}, 
        each Text.From(_{0} * _{1}) & "-" & _{2}, 
        "QXP" & y
      )
  ), 
  C = Table.UnpivotOtherColumns(B, {"Fruits"}, "A", "V"), 
  D = Table.SplitColumn(C, "V", each Text.Split(_, "-"), {"Tot", "Status"}), 
  E = Table.TransformColumns(
    D, 
    {"Status", each (if _ = "Y" then "" else "Not ") & "Shipped Amount"}
  ), 
  F = Table.TransformColumnTypes(E, {{"Tot", Int64.Type}}), 
  G = Table.RemoveColumns(F, {"A"}), 
  H = Table.Pivot(G, List.Sort(List.Distinct(G[Fruits])), "Fruits", "Tot", List.Sum), 
  I = Table.Sort(H, {"Status", 1}), 
  J = Table.AddColumn(I, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  K = List.Skip(Table.ColumnNames(J)), 
  L = Record.FromList(List.Transform(K, each List.Sum(Table.Column(J, _))), K), 
  M = Record.Combine({[Status = "Total"], L}), 
  N = Table.InsertRows(J, Table.RowCount(J), {M})
in
  N
Power Query solution 3 for Calculate Shipped Fruit Value, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sort = {"Apple", "Banana", "Papaya", "Mango", "Pineapple", "Kiwi"}, 
  LT = List.Transform(
    Table.ToRows(Source), 
    (x) =>
      let
        a = List.Split(List.Skip(x), 3), 
        b = List.Transform(a, each {x{0}, _{0}, _{1} * _{2}})
      in
        b
  ), 
  Tbl = Table.FromRows(List.Combine(LT), {"A", "Status", "B"}), 
  Replace = Table.ReplaceValue(
    Tbl, 
    each [Status], 
    each if [Status] = "Y" then "Shipped Amount" else "Not Shipped Amount", 
    Replacer.ReplaceText, 
    {"Status"}
  ), 
  Pivot = Table.Sort(
    Table.Pivot(
      Replace, 
      List.Sort(List.Distinct(Replace[A]), each List.PositionOf(Sort, _)), 
      "A", 
      "B", 
      each List.Sum(_) ?? 0
    ), 
    {"Status", 1}
  ), 
  Tbl2 = Table.AddColumn(Pivot, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  Total = Table.FromRows(
    {{"Total"} & List.Transform(List.Skip(Table.ToColumns(Tbl2)), List.Sum)}, 
    Table.ColumnNames(Tbl2)
  ), 
  Sol = Tbl2 & Total
in
  Sol
Power Query solution 4 for Calculate Shipped Fruit Value, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  add = Table.AddColumn(
    Fonte, 
    "tab", 
    each 
      let
        a = List.Skip(Record.FieldValues(_)), 
        b = List.Transform(
          List.Split(a, 3), 
          (x) =>
            if x{0} = "Y" then
              {[Fruits]} & {"Shipped Amount"} & {List.Product(List.Skip(x))}
            else
              {[Fruits]} & {"Not Shipped Amount"} & {List.Product(List.Skip(x))}
        )
      in
        Table.FromRows(b, {"a", "Status", "b"})
  )[tab], 
  cmb = Table.Combine(add), 
  pivot = Table.Pivot(cmb, List.Distinct(cmb[a]), "a", "b", List.Sum), 
  total = Table.AddColumn(pivot, "Total", each List.Sum(List.Skip(Record.FieldValues(_)))), 
  res = total
    & Table.FromRows(
      {List.Transform(Table.ToColumns(total), (x) => try List.Sum(x) otherwise "Total")}, 
      Table.ColumnNames(total)
    )
in
  res
Power Query solution 5 for Calculate Shipped Fruit Value, proposed by Abdallah Ally:
let
 Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
 Transform1 = Table.TransformRows(
 Source,
 each [
 a = Record.ToList(_),
 b = List.Split(List.Skip(a), 3),
 c = List.Transform(b, each {a{0}, _{0}, List.Product(List.Skip(_))})
 ][c]
 ),
 FromRows = Table.FromRows(List.Combine(Transform1)),
 Unique = List.Distinct(List.Sort(FromRows[Column1])),
 Pivot = Table.Pivot(FromRows, Unique, "Column1", "Column3", each List.Sum(_) ?? 0),
 AddCol = Table.AddColumn(Pivot, "Total", each List.Sum(List.Skip(Record.ToList(_)))),
 Sort = Table.Sort(AddCol, {"Column2", 1}),
 Transform2 = Table.TransformColumns(
 Sort,
 {"Column2", each (if _ = "Y" then "" else "Not ") & "Shipped Amount"}
 ),
 TotalRow = {{"Total"} & List.Transform(List.Skip(Table.ToColumns(Transform2)), List.Sum)},
 Combine = Transform2 & hashtag#table(Table.ColumnNames(Transform2), TotalRow),
 Result = Table.RenameColumns(Combine, {"Column2", "Status"})
in
 Result


                    
                  
          
Power Query solution 6 for Calculate Shipped Fruit Value, proposed by Eric Laforce:
let
  Source = Excel.CurrentWorkbook(){[Name = "tData233"]}[Content], 
  Transform = Table.FromRows(
    List.TransformMany(
      Table.ToRows(Source), 
      each List.Split(List.Skip(_), 3), 
      (o, _) => {o{0}, if (_{0} = "Y") then "Shipped Amount" else "Not Shipped Amount", _{1} * _{2}}
    ), 
    {"F", "Status", "Amt"}
  ), 
  Pivot = Table.Pivot(Transform, List.Distinct(Transform[F]), "F", "Amt", each List.Sum(_) ?? 0), 
  Sort = Table.ReorderColumns(
    Table.Sort(Pivot, {{"Status", Order.Descending}}), 
    {"Status"} & List.Sort(List.Skip(Table.ColumnNames(Pivot)))
  ), 
  AddGTRowCol = 
    let
      _AddGTCol = Table.FromRecords(
        Table.TransformRows(Sort, each _ & [Total = List.Sum(List.Skip(Record.ToList(_)))])
      ), 
      _AddGTCNum = List.Transform(List.Skip(Table.ToColumns(_AddGTCol)), each _ & {List.Sum(_)})
    in
      Table.FromColumns({_AddGTCol[Status] & {"Total"}} & _AddGTCNum, Table.ColumnNames(_AddGTCol))
in
  AddGTRowCol
Power Query solution 7 for Calculate Shipped Fruit Value, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  A = Table.AddColumn(
    S, 
    "L", 
    each Table.FromColumns(
      List.Zip(
        List.Split(
          List.Transform(
            List.Skip(Record.ToList(_), 1), 
            each if _ = "Y" then "Shipped Amount" else if _ = "N" then "Not Shipped Amount" else _
          ), 
          3
        )
      ), 
      {"Status", "Qty", "Price"}
    )
  ), 
  B = Table.SelectColumns(A, {"Fruits", "L"}), 
  C = Table.ExpandTableColumn(B, "L", {"Status", "Qty", "Price"}, {"Status", "Qty", "Price"}), 
  D = Table.AddColumn(C, "Totol Qty", each [Qty] * [Price]), 
  E = Table.SelectColumns(D, {"Fruits", "Status", "Totol Qty"}), 
  F = Table.Pivot(E, List.Sort(List.Distinct(E[Fruits])), "Fruits", "Totol Qty", List.Sum), 
  G = Table.AddColumn(F, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  H = Table.UnpivotOtherColumns(G, {"Status"}, "A", "V"), 
  I = Table.Transpose(Table.Group(H, {"A"}, {{"Total", each List.Sum([V])}})), 
  J = Table.PromoteHeaders(I, [PromoteAllScalars = true]), 
  K = Table.AddColumn(J, "Status", each "Total"), 
  L = Table.Combine({G, K})
in
  L
Power Query solution 8 for Calculate Shipped Fruit Value, proposed by Ahmed Ariem:
let
  f = (x) => {{x{0}, if x{1} = "N" then "Not Shipped Amount" else "Shipped Amount", x{2} * x{3}}}
    & {{x{0}, if x{4} = "N" then "Not Shipped Amount" else "Shipped Amount", x{5} * x{6}}}, 
  sort = List.Sort(Source[Fruits]), 
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Types = Table.TransformColumnTypes(
    Source, 
    {
      {"Quantity1", Int64.Type}, 
      {"Price1", Int64.Type}, 
      {"Shipped2", type text}, 
      {"Quantity2", Int64.Type}, 
      {"Price2", Int64.Type}
    }
  ), 
  result = Table.FromRows(List.Combine(Table.ToList(Source, f)), {"Fruits", "Shipped", "Amound"}), 
  Pivot = Table.Pivot(
    result, 
    List.Distinct(result[Fruits]), 
    "Fruits", 
    "Amound", 
    (x) => List.Sum(x & {0})
  ), 
  Reorder = Table.ReorderColumns(Pivot, sort), 
  AddColtotal = Table.AddColumn(Reorder, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  Sort = Table.Sort(AddColtotal, {{"Shipped", Order.Descending}}), 
  Headers = Table.DemoteHeaders(Sort), 
  Transpose = Table.Transpose(Headers), 
  AddColumntotals = Table.AddColumn(
    Transpose, 
    "Total", 
    each try List.Sum(List.Skip(Record.ToList(_))) otherwise "Total"
  ), 
  Transpose2 = Table.Transpose(AddColumntotals), 
  PromoteHeaders = Table.PromoteHeaders(Transpose2, [PromoteAllScalars = true])
in
  PromoteHeaders
Power Query solution 9 for Calculate Shipped Fruit Value, proposed by Alexandre Garcia:
let
  A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  B = (x) => {"Shipped Amount", "Not Shipped Amount"}{Byte.From(x = "N")}, 
  C = List.Transform, 
  D = List.TransformMany(
    Table.ToRows(A), 
    each List.Split(List.Skip(_), 3), 
    (x, y) => {B(y{0}), x{0}, y{1} * y{2}}
  ), 
  E = Table.FromRows(D, {"Status", "x", "y"}), 
  F = Table.Sort(
    Table.Pivot(E, List.Sort(List.Distinct(E[x])), "x", "y", each List.Sum(_) ?? 0), 
    {"Status", 1}
  ), 
  G = Table.FromRows(
    C(
      Table.ToRows(F) & {{"Total"} & C(List.Skip(Table.ToColumns(F)), List.Sum)}, 
      each _ & {List.Sum(List.Skip(_))}
    ), 
    Table.ColumnNames(F) & {"Total"}
  )
in
  G
Power Query solution 10 for Calculate Shipped Fruit Value, proposed by Krzysztof Kominiak:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  GetTable = Table.Combine(
    List.Transform(
      List.Transform(
        List.Split(List.Skip(Table.ToColumns(Source)), 3), 
        each {Table.Column(Source, Table.ColumnNames(Source){0})} & _
      ), 
      each Table.FromColumns(_)
    )
  ), 
  InsSales = Table.AddColumn(GetTable, "Sales", each [Column3] * [Column4], type number)[
    [Column1], 
    [Column2], 
    [Sales]
  ], 
  PivotCol = Table.Pivot(
    InsSales, 
    List.Sort(List.Distinct(InsSales[Column1])), 
    "Column1", 
    "Sales", 
    List.Sum
  ), 
  RenCols = Table.RenameColumns(PivotCol, {{"Column2", "Shipped"}}), 
  ReplValue = Table.Sort(
    Table.ReplaceValue(
      RenCols, 
      each [Shipped], 
      each if [Shipped] = "Y" then "Shipped Amount" else "Not Shipped Amount", 
      Replacer.ReplaceText, 
      {"Shipped"}
    ), 
    {{"Shipped", Order.Descending}}
  ), 
  AddRowsTotal = Table.AddColumn(ReplValue, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  AddColsTotal = AddRowsTotal
    & Table.FromColumns(
      List.Transform(Table.ToColumns(AddRowsTotal), each {try List.Sum(_) otherwise "Total"}), 
      Table.ColumnNames(AddRowsTotal)
    )
in
  AddColsTotal
Power Query solution 11 for Calculate Shipped Fruit Value, proposed by Francesco Bianchi 🇮🇹:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  ToLs = List.Transform(
    Table.ToRows(Source), 
    each {List.Repeat({_{0}}, List.Count(List.Split(List.Skip(_), 3)))}
      & Table.ToColumns(Table.FromRows(List.Split(List.Skip(_), 3)))
  ), 
  ToTb = Table.Combine(
    List.Transform(ToLs, each Table.FromColumns(_, {"Fruits", "Status", "Quantity", "Price"}))
  ), 
  AmClc = Table.AddColumn(ToTb, "Amount", each [Quantity] * [Price], type number), 
  ShAm = Table.Sort(
    Table.TransformColumns(
      AmClc, 
      {{"Status", each if _ = "Y" then "Shipped Amount" else "Not Shipped Amount", type text}}
    )[[Status], [Fruits], [Amount]], 
    {{"Fruits", Order.Ascending}, {"Status", Order.Descending}}
  ), 
  Pvt = Table.Sort(
    Table.Pivot(ShAm, List.Distinct(ShAm[Fruits]), "Fruits", "Amount", each List.Sum(_) ?? 0), 
    {{"Status", Order.Descending}}
  ), 
  #"Added Custom" = Table.AddColumn(Pvt, "Total", each List.Sum(List.Skip(Record.ToList(_)))), 
  Res = Table.FromRows(
    Table.ToRows(#"Added Custom")
      & {{"Total"} & List.Transform(List.Skip(Table.ToColumns(#"Added Custom")), List.Sum)}, 
    Table.ColumnNames(#"Added Custom")
  )
in
  Res

Solving the challenge of Calculate Shipped Fruit Value with Excel

Excel solution 1 for Calculate Shipped Fruit Value, proposed by Bo Rydobon 🇹🇭:
=LET(
    v,
    VSTACK(
        B2:D7,
        E2:G7
    ),
    PIVOTBY(
        IF(
            TAKE(
                v,
                ,
                1
            )="Y",
            "",
            "Not "
        )&"Shipped Amount",
        VSTACK(
            A2:A7,
            A2:A7
        ),
        BYROW(
            v,
            PRODUCT
        ),
        SUM,
        ,
        ,
        -1
    )
)
Excel solution 2 for Calculate Shipped Fruit Value, proposed by Rick Rothstein:
=LET(t,
    TRANSPOSE(SORT(HSTACK(A2:A7,
    C2:C7*D2:D7*(B2:B7={"Y",
    "N"})+F2:F7*G2:G7*(E2:E7={"Y",
    "N"})))),
    v,
    VSTACK(
        t,
        BYCOL(
            t,
            SUM
        )
    ),
    HSTACK(
        {"Status";"Shipped Amount";"Not Shipped Amount";"Total"},
        v,
        VSTACK(
            "Total",
            DROP(
                BYROW(
                    v,
                    SUM
                ),
                1
            )
        )
    ))
Excel solution 3 for Calculate Shipped Fruit Value, proposed by 🇰🇷 Taeyong Shin:
=LET(
    d,
    A2:G7,
    t,
    WRAPCOLS(
        TOCOL(
            CHOOSECOLS(
                d,
                1,
                1,
                2,
                5,
                3,
                6,
                4,
                7
            ),
            ,
            1
        ),
        ROWS(
            d
        )*2
    ),
    PIVOTBY(
        REPT(
            "Not ",
            INDEX(
                t,
                ,
                2
            )="n"
        )&"Shipped Amount",
        TAKE(
            t,
            ,
            1
        ),
        BYROW(
            t,
            PRODUCT
        ),
        SUM,
        ,
        ,
        -1
    )
)
Excel solution 4 for Calculate Shipped Fruit Value, proposed by Kris Jaganah:
=LET(
    a,
    A2:A7,
    b,
    TOCOL(
        B2:G7
    ),
    c,
    BYROW(
        WRAPROWS(
            TOCOL(
                --b,
                3
            ),
            2
        ),
        PRODUCT
    ),
    d,
    IF(
        FILTER(
            b,
            ISTEXT(
                b
            )
        )="Y",
        "",
        "Not "
    )&"Shipped Amount",
    e,
    TOCOL(
        HSTACK(
            a,
            a
        )
    ),
    PIVOTBY(
        d,
        TOCOL(
        HSTACK(
            a,
            a
        )
    ),
        c,
        SUM,
        ,
        ,
        -1
    )
)
Excel solution 5 for Calculate Shipped Fruit Value, proposed by Julian Poeltl:
=LET(
 &   W,
    WRAPROWS(
        TOROW(
            B2:G7
        ),
        3
    ),
    P,
    PIVOTBY(
        TAKE(
            W,
            ,
            1
        ),
        DROP(
            REDUCE(
                0,
                A2:A7,
                LAMBDA(
                    A,
                    B,
                    VSTACK(
                        A,
                        B,
                        B
                    )
                )
            ),
            1
        ),
        BYROW(
            DROP(
            W,
            ,
            1
        ),
            PRODUCT
        ),
        SUM
    ),
    S,
    VSTACK(
        HSTACK(
            "Status",
            DROP(
                TAKE(
                    P,
                    1
                ),
                ,
                1
            )
        ),
        HSTACK(
            "Shipped Amount",
            DROP(
                CHOOSEROWS(
                    P,
                    3
                ),
                ,
                1
            )
        ),
        HSTACK(
            "Not Shipped Amount",
            DROP(
                CHOOSEROWS(
                    P,
                    2
                ),
                ,
                1
            )
        ),
        TAKE(
            P,
            -1
        )
    ),
    IF(
        S="",
        0,
        S
    )
)
Excel solution 6 for Calculate Shipped Fruit Value, proposed by Oscar Mendez Roca Farell:
=LET(
    t,
    TRANSPOSE(
        WRAPCOLS(
            TOROW(
                B2:G7
            ),
            3
        )
    ),
    PIVOTBY(
        IF(
            TAKE(
                t,
                ,
                1
            )="N",
            "Not ",
            ""
        )&"Shipped Amount",
        TOCOL(
            REPT(
                A2:A7,
                {1,
                1}
            )
        ),
        BYROW(
            DROP(
                t,
                ,
                1
            ),
            PRODUCT
        ),
        SUM,
        ,
        ,
        -1
    )
)
Excel solution 7 for Calculate Shipped Fruit Value, proposed by Duy Tùng:
=LET(
    I,
    INDEX,
    a,
    VSTACK(
        A2:D7,
        HSTACK(
            A2:A7,
            E2:G7
        )
    ),
    b,
    PIVOTBY(
        IF(
            I(
                a,
                ,
                2
            )="Y",
            "",
            "Not "
        )&"Shipped Amount",
        I(
            a,
            ,
            1
        ),
        I(
            a,
            ,
            3
        )*I(
            a,
            ,
            4
        ),
        SUM,
        ,
        ,
        -1
    ),
    IF(
        TAKE(
            b,
            1
        )&TAKE(
            b,
            ,
            1
        )="",
        "Status",
        b
    )
)
Excel solution 8 for Calculate Shipped Fruit Value, proposed by Sunny Baggu:
=LET(
 _a,
     C2:C7 * D2:D7 * (B2:B7 = B2) + F2:F7 * G2:G7 * (E2:E7 = B2),
    
 _b,
     C2:C7 * D2:D7 * (B2:B7 = B3) + F2:F7 * G2:G7 * (E2:E7 = B3),
    
 HSTACK(
     
      {"Status"; "Shipped Amount"; "Not Shipped Amount"; "Total"},
     
      TRANSPOSE(
          
           VSTACK(
               
                SORT(
                    HSTACK(
                        A2:A7,
                         _a,
                         _b,
                         _a + _b
                    )
                ),
               
                HSTACK(
                    "Total",
                     SUM(
                         _a
                     ),
                     SUM(
                         _b
                     ),
                     SUM(
                         _a + _b
                     )
                )
                
           )
           
      )
      
 )
)
Excel solution 9 for Calculate Shipped Fruit Value, proposed by Md. Zohurul Islam:
=LET(
    a,
    A2:A7,
    b,
    B2:D7,
    c,
    E2:G7,
    
    rng,
    HSTACK(
        VSTACK(
            a,
            a
        ),
        VSTACK(
            b,
            c
        )
    ),
    
    d,
    MAP(
        CHOOSECOLS(
            rng,
            3
        ),
        TAKE(
            rng,
            ,
            -1
        ),
        LAMBDA(
            x,
            y,
            x*y
        )
    ),
    
    e,
    MAP(
        CHOOSECOLS(
            rng,
            2
        ),
        LAMBDA(
            x,
            IF(
                x="Y",
                "Shipped Amount",
                "Not Shipped Amount"
            )
        )
    ),
    
    f,
    PIVOTBY(
        e,
        TAKE(
            rng,
            ,
            1
        ),
        d,
        SUM,
        0,
        1,
        ,
        1
    ),
    
    g,
    CHOOSEROWS(
        IF(
            f="",
            0,
            f
        ),
        1,
        3,
        2,
        4
    ),
    
    h,
    VSTACK(
        "Status",
        DROP(
            TAKE(
                g,
                ,
                1
            ),
            1
        )
    ),
    
    j,
    HSTACK(
        h,
        DROP(
                g,
                ,
                1
            )
    ),
    
    k,
    CHOOSECOLS(
        j,
        1,
        2,
        3,
        6,
        5,
        7,
        4,
        8
    ),
    
    k
)
Excel solution 10 for Calculate Shipped Fruit Value, proposed by Hamidi Hamid:
=LET(
    s,
    HSTACK(
        VSTACK(
            A2:A7,
            A2:A7
        ),
        VSTACK(
            B2:D7,
            E2:G7
        )
    ),
    t,
    PIVOTBY(
        TAKE(
            s,
            ,
            1
        ),
        CHOOSECOLS(
            s,
            2
        ),
        CHOOSECOLS(
            s,
            3
        )*TAKE(
            s,
            ,
            -1
        ),
        SUM
    ),
    HSTACK(
        A13:A16,
        DROP(
            SORT(
                HSTACK(
                    {1,
                    3,
                    2,
                    4},
                    TRANSPOSE(
                        t
                    )
                ),
                1,
                1,
                0
            ),
            ,
            2
        )
    )
)
Excel solution 11 for Calculate Shipped Fruit Value, proposed by Asheesh Pahwa:
=LET(
    c,
    HSTACK(
        B2:B7&"-"&C2:C7*D2:D7,
        E2:E7&"-"&F2:F7*G2:G7
    ),
    r,
    IFNA(
        DROP(
            REDUCE(
                "",
                SEQUENCE(
                    6
                ),
                LAMBDA(
                    x,
                    y,
                    HSTACK(
                        x,
                        LET(
                            I,
                            INDEX(
                                c,
                                y,
                                
                            ),
                            t,
                            TOCOL(
                                I
                            ),
                            ta,
                            --TEXTAFTER(
                                t,
                                "-"
                            ),
                            tb,
                            TEXTBEFORE(
                                t,
                                "-"
                            ),
                            f,
                            SUM(
                                FILTER(
                                    ta,
                                    tb="Y",
                                    0
                                )
                            ),
                            fl,
                            SUM(
                                FILTER(
                                    ta,
                                    tb="N",
                                    0
                                )
                            ),
                            VSTACK(
                                f,
                                fl
                            )
                        )
                    )
                )
            ),
            ,
            1
        ),
        ""
    ),
    b,
    BYROW(
        r,
        LAMBDA(
            x,
            SUM(
                x
            )
        )
    ),
    IFNA(
        VSTACK(
            HSTACK(
                A14:A15,
                r,
                b
            ),
            HSTACK(
                A16,
                BYCOL(
        r,
        LAMBDA(
            x,
            SUM(
                x
            )
        )
    )
            )
        ),
        SUM(
            b
        )
    )
)
Excel solution 12 for Calculate Shipped Fruit Value, proposed by ferhat CK:
=LET(
    a,
    VSTACK(
        A2:D7,
        HSTACK(
            A2:A7,
            E2:G7
        )
    ),
    b,
    PIVOTBY(
        CHOOSECOLS(
            a,
            2
        ),
        TAKE(
            a,
            ,
            1
        ),
        BYROW(
            TAKE(
                a,
                ,
                -2
            ),
            PRODUCT
        ),
        SUM,
        ,
        ,
        -1
    ),
    IFS(
        b="Y",
        "Shipped Amount",
        b="N",
        "Not Shipped Amount",
        b>0,
        b
    )
)
Excel solution 13 for Calculate Shipped Fruit Value, proposed by Jaroslaw Kujawa:
=LET(
    a ;
     DROP(
         REDUCE(
             "";
              A2:A7;
              LAMBDA(
                  a;
                   x;
                   VSTACK(
                       a;
                        HSTACK(
                            VSTACK(
                                x;
                                 x
                            );
                             WRAPROWS(
                                 OFFSET(
                                     x;
                                      0;
                                      1;
                                      1;
                                      6
                                 );
                                  3
                             )
                        )
                   )
              )
         );
          1
     );
     ch;
     CHOOSECOLS;
     b;
     HSTACK(
         a;
          ch(
              a;
               3
          )*ch(
              a;
               4
          )
     );
     c;
     ch(
         b;
          {1;
         2;
         5}
     );
     PIVOTBY(
         ch(
             c;
              2
         );
         TAKE(
             c ;
             ;
              1
         );
         TAKE(
             c ;
             ;
              -1
         );
          SUM
     )
)
Excel solution 14 for Calculate Shipped Fruit Value, proposed by Imam Hambali:
=LET(
    
    cc,
     CHOOSECOLS,
    
    c,
     VSTACK(
         A2:D7,
         HSTACK(
             A2:A7,
             E2:G7
         )
     ),
    
    PIVOTBY(
        IF(
            cc(
                c,
                2
            )="Y",
             "Shipped Amount",
             "Not Shipped Amount"
        ),
        cc(
            c,
            1
        ),
        cc(
            c,
            3
        )*cc(
            c,
            4
        ),
        SUM,
        ,
        ,
        -1
    )
    
)
Excel solution 15 for Calculate Shipped Fruit Value, proposed by Milan Shrimali:
=let(a,
    arrayformula(
        split(
            tocol(
                BYCOL(
                    B2:G7,
                    lambda(
                        x,
                        ARRAYFORMULA(
                            A2:A7&"-"&x
                        )
                    )
                )
            ),
            "-"
        )
    ),
    wrap,
    WRAPROWS(
        tocol(
            a,
            ,
            0
        ),
        6
    ),
    main,
    sort(
        filter(
            wrap,
            {1,
            1,
            0,
            1,
            0,
            1}
        ),
        1,
        1,
        2,
        0
    ),
    fnl,
    Filter(hstack(main,
    byrow(main,
    lambda(x,
    choosecols(
        x,
        3
    )*(choosecols(
        x,
        4
    ))))),
    {1,
    1,
    0,
    0,
    1}),
    header,
    transpose(
        sort(
            UNIQUE(
                choosecols(
                    fnl,
                    1
                )
            ),
            1,
            -1
        )
    ),
    fnltbl,
    iferror(vstack(header,
    bycol(header,
    lambda(X,
    sum(torow(filter(choosecols(
        fnl,
        3
    ),
    (choosecols(
                    fnl,
                    1
                )=x)*(choosecols(
                    fnl,
                    2
                )="y")))))),
    bycol(header,
    lambda(X,
    sum(torow(filter(choosecols(
        fnl,
        3
    ),
    (choosecols(
                    fnl,
                    1
                )=x)*(choosecols(
                    fnl,
                    2
                )="n"))))))),
    0),
    withtotal,
    vstack(
        fnltbl,
        bycol(
            fnltbl,
            lambda(
                x,
                sum(
                    x
                )
            )
        )
    ),
    HSTACK(
        VSTACK(
            "Status",
            "Shipped amount",
            "Not Shipped amount",
            "Total"
        ),
        withtotal,
        byrow(
            withtotal,
            lambda(
                x,
                if(
                    isnumber(
                    x
                ),
                    sum(
                    x
                ),
                    "Total"
                )
            )
        )
    ))

Solving the challenge of Calculate Shipped Fruit Value with Python

Python solution 1 for Calculate Shipped Fruit Value, proposed by Luan Rodrigues:
import pandas as pd
import math
file = "PQ_Challenge_233.xlsx"
df = pd.read_excel(file,usecols="A:G",nrows=6)
def split_list(lst, contar):
 a = [lst[i:i + contar] for i in range(0, len(lst), contar)]
 b = ['Shipped Amount' if i[0]  == 'Y' else 'Not Shipped Amount' for i in a]
 c = [math.prod(i[1:]) for i in a]
 return list(zip(b,c))
df['Lista'] = df.apply(lambda row: split_list(row.values.tolist()[1:],3) , axis=1).tolist()
df_fim = df.explode(['Lista'])
df_fim[['Status', 'Valor']] = pd.DataFrame(df_fim['Lista'].tolist(), index=df_fim.index)
df_res = df_fim[['Fruits', 'Status', 'Valor']] 
pivot = df_res.pivot_table(values='Valor', index='Status', columns='Fruits', aggfunc='sum')
pivot = pivot.fillna(0)
pivot['Total'] = pivot.values.tolist()
pivot['Total'] = pivot['Total'].apply(sum)
total = pivot.sum(axis=0)
pivot.loc['Total'] = total
print(pivot)
                    
                  

Solving the challenge of Calculate Shipped Fruit Value with Python in Excel

Python in Excel solution 1 for Calculate Shipped Fruit Value, proposed by Alejandro Campos:
df = xl("A1:G7", headers=True)
df['Shipped_Amount'] = df['Quantity1'] * df['Price1'] * (df['Shipped1'] == 'Y') + df['Quantity2'] * df['Price2'] * (df['Shipped2'] == 'Y')
df['Non_Shipped_Amount'] = df['Quantity1'] * df['Price1'] * (df['Shipped1'] == 'N') + df['Quantity2'] * df['Price2'] * (df['Shipped2'] == 'N')
summary_df = pd.DataFrame({
 'Status': ['Shipped Amount', 'Not Shipped Amount', 'Total'],
 **{fruit: [
 df.loc[i, 'Shipped_Amount'],
 df.loc[i, 'Non_Shipped_Amount'],
 df.loc[i, 'Shipped_Amount'] + df.loc[i, 'Non_Shipped_Amount']
 ] for i, fruit in zip([0, 4, 1, 5, 2, 3], ['Apple', 'Banana', 'Papaya', 'Mango', 'Pineapple', 'Kiwi'])},
 'Total': [df['Shipped_Amount'].sum(), df['Non_Shipped_Amount'].sum(), df['Shipped_Amount'].sum() + df['Non_Shipped_Amount'].sum()]
})
summary_df
                    
                  

Solving the challenge of Calculate Shipped Fruit Value with R

R solution 1 for Calculate Shipped Fruit Value, proposed by Konrad Gryczan, PhD<&/strong>:
library(tidyverse)
library(readxl)
library(janitor)
path = "Power Query/PQ_Challenge_233.xlsx"
input = read_excel(path, range = "A1:G7")
test = read_excel(path, range = "A13:H16")
result = input %>%
 pivot_longer(-c(1), names_to = c(".value", "number"), names_pattern = "([A-Za-z]+)(\d)") %>%
 mutate(amount = Price * Quantity) %>%
 summarise(amount = sum(amount), .by = c("Fruits", "Shipped")) %>% 
 mutate(Status = recode(Shipped, "Y" = "Shipped Amount", "N" = "Not Shipped Amount")) %>%
 select(-Shipped) %>%
 pivot_wider(names_from = Fruits, values_from = amount, values_fill = 0) %>%
 adorn_totals("both") %>%
 select(Status, Apple, Banana, Papaya, Mango, Pineapple, Kiwi, Total)
all.equal(result, test, check.attributes = FALSE)
#> [1] TRUE
                    
                  

&

Leave a Reply