如何通过电源查询实现运行总计?

时间:2015-06-29 09:30:35

标签: running-total powerquery

我希望像以前使用Tableau软件那样使用电源查询进行运行总计。有人有想法,提前谢谢!

7 个答案:

答案 0 :(得分:5)

对于很晚的回答道歉 - 这个挑战一直困扰着我好几个月。

论坛和博客周围的解决方案很少,但它们似乎都需要自定义M代码页面。有些人也无法满足团队更改时需要重新启动运行总计的常见要求。

所以我提出了一种可以在不编写任何自定义代码的情况下构建的技术 - 只需在Power Query窗口中单击并添加一个非常简单的自定义列。

关键步骤是:

  • 添加索引列
  • 分组定义您的组的列,并添加"所有行"柱
  • 复制"所有行"专栏
  • 展开"所有行"的原始版本和副本。列(此时您有一个"交叉产品"每个组内每个行组合的结果)
  • 添加自定义列"累积"确定要包含在运行总计中的哪些组合行,例如[Index] >= [#"All Rows - Copy.Index"]
  • 过滤自定义列"累积" = TRUE
  • 分组由原始列和Sum目标字段的副本
  • 组成

我构建了一个工作解决方案,您可以从我的OneDrive下载并试用:

http://1drv.ms/1AzPAZp

它是文件:Power Query演示 - 运行总计

答案 1 :(得分:1)

使用Excel 2016,

  1. 添加名为" RunningTotal"

  2. 的索引
  3. 转到查询 - >编辑 - >添加引用查询(索引必须是源**

  4. 中的列
  5. 转到视图 - >高级编辑器并粘贴以下代码以创建函数:

  6. 将查询重命名为 fnRunningTotal

  7. 
    
    = (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
    &#13;
    &#13;
    &#13;

    使用该功能:

    &#13;
    &#13;
    = Table.AddColumn(Source, "RunningTotalAmount", each fnRunningTotal(Source,"MarketValue",[RunningTotal]))
    &#13;
    &#13;
    &#13;

答案 2 :(得分:1)

我相信到目前为止最好的技术是创建一个列表,然后使用List.Sum创建另一个列。这不需要任何复杂的代码。只需点击即可解决问题。

更多细节: https://www.sumproduct.com/blog/article/power-query-one-route-to-a-running-total

答案 3 :(得分:0)

我认为如果有可能在Power Query中它会非常复杂。这只是错误的工具。使用Power Query将数据导入Power Pivot并在其中创建运行总计。这是一种标准模式。请参阅此优秀指南:http://www.daxpatterns.com/cumulative-total/

答案 4 :(得分:0)

非常简单。

第1步:添加索引

#“已添加索引”= Table.AddIndexColumn(#“先前步骤”,“索引”,0,1)

第2步:添加总计

#“添加了运行总计”= Table.AddColumn(#“添加了索引”,“运行总计,每个List.Sum(List.FirstN(#”添加了索引“[列来添加值来自],[索引] 1)))

答案 5 :(得分:0)

我的意思是亚当的这段代码有效,但在“运行总计”后面添加了“”:

第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)))

答案 6 :(得分:0)

我的最爱

单列累计,不分组

#"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 ),