如何在Power Query中实现同列逐行递推乘积计算
Power Query 实现链式递推计算方法
你要的「当前行值=上一行值*1.05」的逐行递推逻辑,不要用网上流传的索引偏移、双索引方案——这类方案本质是做固定范围的聚合计算,仅适配累计求和类场景,处理链式依赖的递推逻辑效率极低甚至会出现计算错误,直接用List.Generate函数做序列生成即可,计算逻辑和Excel下拉填充完全一致,性能也足够支撑十万行以上的大数据量场景。
具体操作步骤
- 提前填好[Sales Growth]列第一行(第一个月份)的初始值,这是整个递推逻辑的计算基准
- 不需要额外添加索引列,直接打开Power Query的高级编辑器,在源数据步骤后追加递推逻辑即可
- 核心M代码参考如下,将代码里的
源替换成你自己的源表步骤名就能直接用:
// 读取递推初始值(第一行的Sales Growth值) baseValue = 源[Sales Growth]{0}, // 按规则生成完整递推序列,序列长度和源表总行数保持一致 calcList = List.Generate( () => [val = baseValue, idx = 0], each [idx] < Table.RowCount(源), each [val = [val] * 1.05, idx = [idx] + 1], each [val] ), // 将生成的递推序列替换回原表的Sales Growth列 finalTable = Table.FromColumns( List.RemoveMatchingItems(Table.ToColumns(源), {源[Sales Growth]}) & {calcList}, List.RemoveMatchingItems(Table.ColumnNames(源), {"Sales Growth"}) & {"Sales Growth"} )
注意:如果后续要调整递推规则,直接修改
[val] * 1.05这部分的计算逻辑即可,不管是乘系数、加固定值还是套用其他复杂计算规则,只要是依赖上一行结果的链式计算,都可以用这个框架实现,最终计算结果和Excel下拉填充的效果完全匹配。

内容的提问来源于stack exchange,提问作者Kash
相关产品推荐
相关产品推荐

