|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- let
- 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
- 区分出入库数 = Table.ReplaceValue(源,each [出入库],each -[数量],(v,o,n)=>if o="出库" then n else v,{"数量"}),
- 及时库存 = Table.AddColumn(区分出入库数,"库存",each List.Sum(Table.SelectRows(区分出入库数,(x)=>x[商品]=[商品] and x[时间]<=[时间])[数量])),
- 分组选取开始结束时间 = Table.Group(及时库存,
- {"商品"},
- {"A",each
- Table.FromColumns(
- List.Accumulate(
- (Table.FirstN(_,1)&
- Table.Combine(List.Transform(
- Table.SelectRows(
- Table.Group(Table.Skip(Table.RemoveLastN(_,1)),"库存",{"B",each _},0,(x,y)=>Number.From(y=0)),each [库存]=0)[B],
- (x)=>Table.FirstN(x,2)))&
- Table.LastN(_,1))[时间],
- {{},{}},(s,c)=>if List.Count(s{0})=List.Count(s{1}) then {s{0}&{c},s{1}} else {s{0},s{1}&{c}}),
- {"开始时间","结束时间"})
- }
- ),
- 展开 = Table.ExpandTableColumn(分组选取开始结束时间, "A", {"开始时间", "结束时间"}, {"开始时间", "结束时间"}),
- 计算期间最大库存 = Table.AddColumn(展开,"最大库存",each List.Max(Table.SelectRows(及时库存,(x)=>x[商品]=[商品] and x[时间]>=[开始时间] and x[时间]<=[结束时间])[库存])),
- 排序的行 = Table.Sort(计算期间最大库存,{{"开始时间", Order.Ascending}})
- in
- 排序的行
复制代码
用M好像也不那么容易,不过总体感觉比DAX要容易得到一些,不那么烧脑,可能大神们会有更优化的解。 |
-
结果
|