天天看點

List.Accumulate 先進先出計算案例

作者:可樂之濱

本期案例是根據先進先出原則,對出庫數量進行歸集處理,可以簡單的說成是配置設定轉換。前後轉換效果如下:

List.Accumulate 先進先出計算案例
List.Accumulate 先進先出計算案例

解題步驟

1.本案例實際上是兩個ACC嵌套的做法,第一層是以庫存批次作為第一參數,依據出庫數量做循環周遊,獲得一個配置設定的結果和剩餘未配置設定的結果;第二層是用剩餘未配置設定的結果進行下一個庫存的周遊轉換。

2.将上述轉換過程拆解開來操作。針對出庫數量75,依據批次數量,使用ACC就可以獲得以下結果:

List.Accumulate 先進先出計算案例
List.Accumulate(List.Skip(源[出庫日期],2),{{},75},(x,y)=>if x{1}=0 then {x{0}&{0},x{1}} else if x{1}>=y then {x{0}&{y},x{1}-y} else {x{0}&{x{1}},0})           

3.上述處理隻獲得了配置設定的結果,是以這裡需要進行修改,要求轉換結果裡包含未配置設定的結果:

List.Accumulate 先進先出計算案例
List.Accumulate(List.Skip(源[出庫日期],2),{{},{},75},(x,y)=>if x{2}=0 then {x{0}&{0},x{1}&{y},x{2}} else if x{2}>=y then {x{0}&{y},x{1}&{0},x{2}-y} else {x{0}&{x{2}},x{1}&{y-x{2}},0})           

4.前一步驟是1中所描述的第一層循環,現在需要進行第二層循環,這裡隻要将前述步驟中的出庫數量75修改成變量即可,這樣第一層獲得的未配置設定結果,就是第二個周遊數量的起始庫存批次:

List.Accumulate 先進先出計算案例
List.Accumulate(List.Skip(Record.ToList(源{0}),2),{List.Skip(源[出庫日期],2),{}},(s,c)=>let lst=List.Accumulate(s{0},{{},{},c},(x,y)=>if x{2}=0 then {x{0}&{0},x{1}&{y},x{2}} else if x{2}>=y then {x{0}&{y},x{1}&{0},x{2}-y} else {x{0}&{x{2}},x{1}&{y-x{2}},0}) in {lst{1},s{1}&{lst{0}}})           

深化的結果符合要求:

List.Accumulate 先進先出計算案例

5.連接配接源資料的前兩列,轉換為表:

List.Accumulate 先進先出計算案例

連接配接源資料第一、二行:

List.Accumulate 先進先出計算案例
Table.FirstN(源,2)&Table.FromColumns(List.FirstN(Table.ToColumns(Table.Skip(源,2)),2)&上一步驟{1},Table.ColumnNames(源))           

以上是本期内容。

繼續閱讀