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

Power Query自定义列:引用上一行实现IF逻辑的技术求助

在Power Query中实现分组累加辅助列

核心逻辑

当Site、Room、Cubicle任意一列与上一行不同时,辅助值加1;初始值为1,和你Excel公式的逻辑完全对齐。


方法一:用List.Accumulate高效实现(推荐)

这种方法只遍历数据一次,性能更优,适合大数据量:

  1. 打开Power Query编辑器,选中你的数据源表
  2. 点击「高级编辑器」,替换现有代码为以下内容(注意把Source换成你的实际表名,Site/Room/Cubicle换成你的列名):
    let
        Source = 你的数据源表, // 替换成实际的数据源引用
        // 将表转为记录列表,方便逐行处理
        RowRecords = Table.ToRecords(Source),
        // 累加计算辅助值
        AccumulateResult = List.Accumulate(
            List.Skip(RowRecords, 1), // 从第二行开始遍历
            // 初始状态:第一行辅助值为1,记录上一行数据
            [PrevRow = RowRecords{0}, Counter = 1, ResultList = {1}],
            (currentState, nextRow) => 
                let
                    // 判断当前行和上一行的三个列是否完全一致
                    IsSameGroup = currentState[PrevRow][Site] = nextRow[Site] 
                                and currentState[PrevRow][Room] = nextRow[Room] 
                                and currentState[PrevRow][Cubicle] = nextRow[Cubicle],
                    // 更新计数器
                    NewCounter = if IsSameGroup then currentState[Counter] else currentState[Counter] + 1
                in
                    [
                        PrevRow = nextRow,
                        Counter = NewCounter,
                        ResultList = currentState[ResultList] & {NewCounter}
                    ]
        ),
        // 提取辅助值列表并合并到原表
        FinalTable = Table.FromColumns(
            Table.ToColumns(Source) & {AccumulateResult[ResultList]},
            Table.ColumnNames(Source) & {"辅助值"}
        )
    in
        FinalTable
    

方法二:分步操作(直观易理解)

适合新手快速上手,数据量小时可用:

  1. 添加索引列:
    转到「添加列」→「索引列」→ 选择「从1开始」

  2. 添加自定义列:
    点击「添加列」→「自定义列」,输入以下公式(注意替换列名和表名):

    = if [索引] = 1 
      then 1 
      else if (你的表名{[索引]-2}[Site] = [Site] 
              and 你的表名{[索引]-2}[Room] = [Room] 
              and 你的表名{[索引]-2}[Cubicle] = [Cubicle]) 
           then #"添加的索引"{[索引]-2}[辅助值] 
           else #"添加的索引"{[索引]-2}[辅助值] + 1
    

    注意:这里索引从1开始,所以上一行的列表索引是[索引]-2(Power Query列表索引默认从0开始)


关键提示

Power Query是函数式编程模型,不能像Excel那样直接引用单元格,所以必须通过列表累加或索引查找的方式实现“引用上一行”的逻辑。List.Accumulate是处理这类逐行依赖计算的最优方案,能避免重复查找带来的性能损耗。

内容的提问来源于stack exchange,提问作者Jess Bess JessBess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:15