You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query递归求和报错:Excel条件累计公式转换求助

解决Power Query中条件累计求和(按ID分组+日期判断)的问题

Power Query不允许自定义列递归引用自身,所以直接引用上一行Sum列的写法会报错。要实现你需要的逻辑,核心思路是按ID分组后,用List.Accumulate逐行计算累计值,具体步骤如下:

前提准备

确保数据已按id和Month升序排序,保证累加的顺序正确:

#"Sorted Rows" = Table.Sort(Source,{{"id", Order.Ascending}, {"Month", Order.Ascending}})

核心分组累加逻辑

按id分组,对每组内的数据用List.Accumulate实现条件累加:

#"Grouped by ID" = Table.Group(#"Sorted Rows", {"id"}, {
    {"GroupedData", (group) => 
        let
            // 给组内数据添加索引,方便遍历
            #"Added Group Index" = Table.AddIndexColumn(group, "GroupIndex", 0, 1),
            // 转成记录列表,用List.Accumulate逐行计算Sum
            #"Calculated Sum" = Table.FromRecords(
                List.Accumulate(
                    // 从第二行开始遍历,第一行单独处理
                    List.Skip(Table.ToRecords(#"Added Group Index")),
                    // 初始化累加状态:第一行的Sum值按条件计算
                    {#"Added Group Index"{0} & [Sum = if #"Added Group Index"{0}[less than year] <= Date.EndOfMonth(#"Added Group Index"{0}[Month]) then #"Added Group Index"{0}[MaxCap] else 0]},
                    // 累加逻辑:每一行基于上一行的Sum计算当前值
                    (accumulatedList, currentRow) =>
                        let
                            lastRow = List.Last(accumulatedList),
                            currentSum = if currentRow[less than year] <= Date.EndOfMonth(currentRow[Month])
                                then lastRow[Sum] + currentRow[MaxCap]
                                else 0
                        in
                            accumulatedList & {currentRow & [Sum = currentSum]}
                )
            )
        in
            #"Calculated Sum"
    }
})

展开分组结果

最后展开分组后的表格,得到包含Sum列的完整数据:

#"Expanded GroupedData" = Table.ExpandTableColumn(#"Grouped by ID", "GroupedData", {"Month", "less than year", "MaxCap", "Sum"})

逻辑说明

  • List.Accumulate是Power Query处理迭代累加的标准方法,完全规避了递归引用的问题
  • 分组操作保证同一id的行在同一组内计算,排序确保累加顺序和Excel一致
  • 每一行的Sum计算严格对应你的需求:
    1. 满足日期条件时,同一id下的行用上一行Sum加当前MaxCap
    2. 日期条件满足但换了id(分组后自动处理,新组第一行直接取MaxCap)
    3. 不满足日期条件时返回0

内容的提问来源于stack exchange,提问作者3y3s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:02:27