Power Query M:组内运行总计

时间:2020-04-28 18:49:27

标签: powerquery m

我希望在组内而不是整个数据集内运行总计MaxDurationOrder。我有适用于所有行的以下公式:

= Table.AddColumn(#"Added Index", "Running Total", each List.Sum(List.FirstN(#"Added Index"[MaxDurationOrder],[Index])))

但是我的数据集中确实有一个选项1,选项2,选项3的列,我希望将运行总计用于划分。如何在每个选项中获得运行总计?

1 个答案:

答案 0 :(得分:1)

添加索引。使用下面的代码添加自定义列,如果该列具有较低的索引和相同的GroupColumn,则该列将增加MaxDurationOrder

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","RunningTotal",(i)=>List.Sum(Table.SelectRows(#"Added Index", each [GroupColumn]=i[GroupColumn] and [Index]<=i[Index]) [MaxDurationOrder]), type number ),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index"})
in  #"Removed Columns"

或者,分为两部分,创建函数fnRunningSum

(MyTable as table) =>
let Source = Table.Buffer(MyTable),
MyColumn="MaxDurationOrder",    
MyColumn2=Table.Column(Source,MyColumn),
TableType = Value.Type(Table.AddColumn(Source, "Cumul", each null, type number)),
Cumulative = List.Skip(List.Accumulate(MyColumn2,{0},(cumulative,MyColumn) => cumulative & {List.Last(cumulative) + MyColumn})),
Cumu = Table.FromColumns(Table.ToColumns(Source)&{Cumulative},TableType)
in Cumu

使用功能分组,然后展开

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Sum = Table.Group(Source, {"GroupColumn"}, {{"AllData",fnRunningSum}}),
#"Expanded AllData" = Table.ExpandTableColumn(Sum, "AllData", {"MaxDurationOrder", "Cumul"}, {"MaxDurationOrder", "Cumul"})
in "Expanded AllData"