Forum Discussion
MirageZX
3 years agoFrequent Visitor
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...
- 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
AlienSx
3 years agoSuper User
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
zMirageZX
3 years agoFrequent Visitor
Thanks mate! It works!!