求助:如何在PowerBI/PowerQuery中实现当前行与前一行数值相减
在Power Query中实现当前行数值减去前一行数值的方法
前提说明
你的数据中「Id」是连续唯一编号,这刚好可以用来定位前一行数据,下面是具体实现步骤:
确保数据按Id升序排序
- 打开Power Query编辑器,选中「Id」列,点击工具栏的「排序升序」按钮(避免因数据顺序错乱导致计算错误)
添加索引列(辅助定位前一行)
- 切换到「添加列」选项卡,点击「索引列」→「从0开始」,这样每行都会得到一个从0开始的连续索引值
添加自定义差值列
- 继续在「添加列」选项卡点击「自定义列」,在弹出的公式编辑框中输入以下代码(记得替换
[数值列]为你实际要计算的列名):if [Index] = 0 then null else [数值列] - #"添加索引"[数值列]{[Index]-1} - 点击「确定」后,就会生成差值列:第一行因没有前一行,结果为
null,后续每行都是当前行数值减去上一行数值
- 继续在「添加列」选项卡点击「自定义列」,在弹出的公式编辑框中输入以下代码(记得替换
简化版方法(无需手动加索引)
如果你不想额外添加索引列,也可以直接用列表操作实现:
let 源 = 你的数据源, 按Id排序 = Table.Sort(源,{{"Id", Order.Ascending}}), 数值列表 = 按Id排序[数值列], // 生成前一行数值的列表,第一行补null 前一行数值 = {null} & List.RemoveLastN(数值列表, 1), // 合并原表和差值计算结果 结果表 = Table.FromColumns( Table.ToColumns(按Id排序) & {List.Transform(List.Zip({数值列表, 前一行数值}), (x) => if x{1} = null then null else x{0} - x{1})}, Table.ColumnNames(按Id排序) & {"差值"} ) in 结果表
把代码中的你的数据源和数值列替换成实际内容即可。
内容的提问来源于stack exchange,提问作者ulleput
相关产品推荐
相关产品推荐

