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

使用Power Query进行分组内排名时步骤不识别的解决方案求助

Power Query 实现分组内按年份降序排名的解决方案

问题分析

你原计划的思路存在两个核心问题:

  1. 未先按Factor完成分组,直接调用Table.AddRankColumn会对整个数据集排名,而非组内排名;
  2. #"previousStep"是占位符,必须替换成Power Query编辑器中实际存在的步骤名称(比如初始数据步骤名#"源",或上一步操作的步骤名)。

解决方案(两种实现方式)

方式一:分组→添加排名→展开(直观易懂)

  1. 按Factor分组
    加载数据后,点击「主页」选项卡→「分组依据」,设置:

    • 分组依据列:Factor
    • 新列名:GroupedData
    • 操作:所有行
      生成的M代码类似:
    = Table.Group(#"源", {"Factor"}, {{"GroupedData", each _, type table [Factor=nullable text, YearNum=nullable number, Col1=nullable any, Col2=nullable any]}})
    
  2. 组内添加排名列
    对分组后的GroupedData列,调用Table.AddRankColumn实现组内按YearNum降序排名,指定RankKind.Competition让相同年份的行获得相同排名:

    = Table.TransformColumns(#"分组的行", {"GroupedData", each Table.AddRankColumn(_, "RankbyYear_WithInTheFactorLevel", {"YearNum", Order.Descending}, [RankKind = RankKind.Competition])})
    

    注意#"分组的行"是上一步分组操作后的步骤名,需替换成实际名称。

  3. 展开分组数据
    点击GroupedData列右侧的展开按钮,选择所有列(包括新增的排名列)即可得到预期结果。

方式二:用窗口函数直接计算(更高效,无需分组展开)

直接通过Table.AddColumn结合List.Rank,在每行计算对应Factor组内的YearNum排名:

= Table.AddColumn(
    #"源",
    "RankbyYear_WithInTheFactorLevel",
    (currentRow) => List.Rank(
        Table.SelectRows(#"源", (row) => row[Factor] = currentRow[Factor])[YearNum],
        currentRow[YearNum],
        Order.Descending,
        RankKind.Competition
    )
)

将#"源"替换成你实际的初始数据步骤名即可。

结果验证

用你提供的样本数据测试,两种方法都会得到预期输出:

Factor  YearNum  Col1  Col2 .... RankbyYear_WithInTheFactorLevel 
A       2024                          2
A       2024                          2
A       2025                          1
B       2024                          1 
B       2023                          2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:32:04