我想像以前使用 Tableau 软件一样使用电源查询进行运行总计。有没有人有想法,提前谢谢!
7 回答
为很晚的答案道歉 - 这个挑战已经困扰我好几个月了。
论坛和博客中几乎没有解决方案,但它们似乎都需要自定义 M 代码页面。有的还不能满足当一个组发生变化时需要重新启动运行总数的普遍要求。
因此,我想出了一种无需编写任何自定义代码即可构建的技术 - 您只需在 Power Query 窗口中单击并添加一个非常简单的自定义列。
关键步骤是:
- 添加索引列
- 按定义组的列分组,并添加“所有行”列
- 复制“所有行”列
- 展开“所有行”列的原始和副本(此时,每个组内的每个行组合都有一个“叉积”结果)
- 添加自定义列“累积”以确定要包含在运行总计中的组合行,例如
[Index] >= [#"All Rows - Copy.Index"]
- 过滤自定义列“累积”= TRUE
- 按原始列分组并对目标字段的副本求和
我构建了一个可行的解决方案,您可以从我的 OneDrive 下载并试用:
这是文件:Power Query 演示 - 运行总计
很容易。
第 1 步:添加索引
#"Added Index" = Table.AddIndexColumn(#"**Prior Step**", "Index", 0, 1)
第 2 步:添加运行总计
#"Added Running Total" = Table.AddColumn(#"Added Index", "Running Total, each List.Sum(List.FirstN(#"Added Index"[**Column to Add Values From**],[Index]+1)))
使用 Excel 2016,
添加名为“RunningTotal”的索引
转到查询 -> 编辑 -> 添加参考查询(索引必须是源中的列**
转到查看 -> 高级编辑器并粘贴以下代码以创建一个函数:
将查询重命名为fnRunningTotal
= (tbl as table, sumcolumn as text, rowindex as number) =>
let
#"Removed Other Columns" = Table.SelectColumns(tbl,{sumcolumn, "RunningTotal"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each [RunningTotal] <= rowindex),
#"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{sumcolumn, "Temp"}}),
#"Grouped Rows" = Table.Group(#"Renamed Columns", {}, {{"FinalRunningTotal", each List.Sum([Temp]), type number}}),
FinalRunningTotal = Record.Field(#"Grouped Rows"{0},"FinalRunningTotal")
in
FinalRunningTotal
要使用该功能:
= Table.AddColumn(Source, "RunningTotalAmount", each fnRunningTotal(Source,"MarketValue",[RunningTotal]))
我的意思是亚当的这段代码有效,但在“运行总计”后面添加了“:
第 1 步:添加索引
"Added Index" = Table.AddIndexColumn(#"Prior Step", "Index", 0, 1)
第 2 步:添加运行总计
"Added Running Total" = Table.AddColumn(#"Added Index", "Running Total", each List.Sum(List.FirstN(#"Added Index"[Column to Add Values From],[Index]+1)))
我认为如果它在 Power Query 中是可能的,那将是非常复杂的。这只是错误的工具。使用 Power Query 将数据引入 Power Pivot 并在那里创建运行总计。这是一个标准模式。请参阅这份出色的指南:http ://www.daxpatterns.com/cumulative-total/
我相信到目前为止最好的技术是创建一个列表,然后使用 List.Sum 创建另一个列。这不需要任何复杂的代码。只需指向并单击即可解决问题。
更多详情: https ://www.sumproduct.com/blog/article/power-query-one-route-to-a-running-total
我最喜爱的
单列累计,无分组
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Cum Total" = Table.AddColumn(#"Added Index", "CumTotal", each List.Sum(List.FirstN(#"Added Index"[ColumnNameDoingCumulative],[Index]+1))),
单列累计,多分组
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","CumTotal",(i)=>List.Sum(Table.SelectRows(#"Added Index", each [Group1Column]=i[Group1Column] and [Group2Column]=i[Group2Column] and [Index]<=i[Index]) [ColumnNameDoingCumulative]), type number ),