Power Query中按年份标记最高/次高Patch版本及获取最近值方法
Power Query 按年份分组保留最高/次高Patch并标记的实现方案
先贴一下你的原始数据:
| Year | Patch | Value |
|---|---|---|
| 2021 | 1.65 | 23.5 |
| 2021 | 1.67 | 21.3 |
| 2021 | 1.70 | 25.5 |
| 2022 | 1.72 | 23.2 |
| 2022 | 1.75 | 21.5 |
| 2022 | 1.79 | 24.5 |
| 2023 | 1.81 | 23 |
| 2023 | 1.84 | 25.5 |
| 2023 | 1.89 | 28.5 |
一步步实现需求
1. 导入数据到Power Query
把你的表格导入Power Query编辑器:点Excel里的「数据」选项卡 → 「自表格/范围」,确认数据无误后进入编辑器。
2. 按年份分组
选中Year列,切换到「转换」选项卡 → 点击「分组依据」,设置如下:
- 新列名:随便填,比如
GroupedData - 操作:选「所有行」
- 列:保持默认的
Table就行,点确定。
3. 处理分组内的数据,筛选前两名并标记
接下来要给每个分组的表格排序、取前两行、加标记。点「添加列」→「自定义列」,粘贴下面的M代码:
let // 分组内按Patch降序排,把最高版本放最前面 SortedTable = Table.Sort([GroupedData],{{"Patch", Order.Descending}}), // 取前两行(最高和次高Patch) Top2Rows = Table.FirstN(SortedTable, 2), // 给第一行标new,第二行标old AddTag = Table.AddColumn(Top2Rows, "Tag", each if Table.PositionOf(Top2Rows, _) = 0 then "new" else "old") in AddTag
点确定后,你会看到每个分组都变成了带标记的两行数据。
4. 展开分组数据
选中刚生成的自定义列,点列标题右边的小箭头,展开所有列(注意取消勾选GroupedData,避免重复数据),然后删掉多余的分组列,调整下列顺序,最终结果就出来了:
| Year | Patch | Value | Tag |
|---|---|---|---|
| 2021 | 1.70 | 25.5 | new |
| 2021 | 1.67 | 21.3 | old |
| 2022 | 1.79 | 24.5 | new |
| 2022 | 1.75 | 21.5 | old |
| 2023 | 1.89 | 28.5 | new |
| 2023 | 1.84 | 25.5 | old |
关于“基于最新Patch获取对应最近值”的问题
完全可以实现,两种简单方法:
- 用上面的最终结果,直接筛选
Tag = "new"的行,就能得到每年最新Patch对应的Value; - 如果不需要保留次高数据,直接按Year分组取最大Patch的行更高效:
- 用「分组依据」,设置分组列
Year,操作选「最大值」对应Patch列,得到每年的最高Patch; - 再通过「合并查询」把这个结果和原始表关联,匹配到对应的Value;
- 或者直接用自定义分组一步到位,M代码如下:
展开Table.Group(源, {"Year"}, {{"LatestData", each Table.First(Table.Sort(_, {{"Patch", Order.Descending}})), type table}})LatestData列就能得到每年最新Patch的完整数据。
- 用「分组依据」,设置分组列
内容的提问来源于stack exchange,提问作者AzUser1
相关产品推荐
相关产品推荐

