Power Query自定义聚合:基于条件取Rate最大值生成NewRate
Power Query 自定义聚合实现方案
需求说明
- 按
ID分组处理数据:- 当同一
ID下存在Saving为yes的记录时,该ID所有记录的NewRate取该分组内Rate的最大值 - 当同一
ID下无Saving为yes的记录时,NewRate直接使用原记录的Rate值
- 当同一
- 额外限制:每个
ID最多仅存在一条Saving为yes的记录
修正后的代码
你原代码中Record.FromList的用法有误,以下是可直接运行的正确代码:
= Table.Group(#"Changed Type4", {"ID"}, { {"GroupedData", (t) => let hasSavingYes = List.Contains(t[Saving], "yes"), maxRate = List.Max(t[Rate]), // 根据条件生成NewRate列 addNewRate = Table.AddColumn(t, "NewRate", each if hasSavingYes then maxRate else [Rate]) in addNewRate } }) // 最后替换previousStepName为上一步的查询名,展开分组后的结果 = Table.ExpandTableColumn(previousStepName, "GroupedData", {"Saving", "Rate", "NewRate"})
代码解释
- 分组逻辑:按
ID分组,对每个分组表t执行自定义处理 - 条件判断:用
List.Contains(t[Saving], "yes")快速判断当前分组是否存在目标记录 - 预计算最大值:提前算出分组内
Rate的最大值maxRate,避免重复计算损耗性能 - 添加新列:在分组表内直接插入
NewRate列,根据条件赋值 - 展开结果:将分组后的嵌套表展开,得到平级的最终数据结构
示例展示
输入数据
| ID | Saving | Rate |
|---|---|---|
| 1 | no | 5 |
| 1 | yes | 7 |
| 2 | no | 3 |
| 2 | no | 4 |
| 3 | yes | 6 |
预期结果
| ID | Saving | Rate | NewRate |
|---|---|---|---|
| 1 | no | 5 | 7 |
| 1 | yes | 7 | 7 |
| 2 | no | 3 | 3 |
| 2 | no | 4 | 4 |
| 3 | yes | 6 | 6 |
内容的提问来源于stack exchange,提问作者Ninella23
相关产品推荐
相关产品推荐

