Forum Discussion

MirageZX's avatar
MirageZX
Frequent Visitor
3 years ago
Solved

Power Query Running_On_hand

Hi, I am new in Power Query and I have been struggling to find out how to create a Column name "Running_On_hand". The source data are two tables:    Material Res_Date Reservation_Number Req_Q...
  • AlienSx's avatar
    3 years ago

    Hello, MirageZX 

    let
        t1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        t2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
        lookup_t = Record.FromList(t2[On_Hand_Qty], List.Transform(t2[Material], Text.From)),
        f = (t as table) => 
            [opening_balance = Record.Field(lookup_t, Text.From(t[Material]{0})),
            pos = List.Buffer(List.Skip(List.Positions(t[Material]))),
            res = List.Buffer(t[Req_Qty]),
            balances = 
                List.Accumulate(
                    pos,
                    {opening_balance - res{0}},
                    (s, c) => s & { s{c - 1} - res{c} }
                ),
            out = Table.FromColumns(Table.ToColumns(t) & {balances}, Table.ColumnNames(t) & {"Running_Stock"})][out],
        gr = Table.Group(t1, {"Material"}, {{"all", each f(Table.Sort(_, "Res_Date"))}}),
        z = Table.Combine(gr[all])
    in
        z