Power Query添加条件列:判断C列值是否为该列最大值
在Power Query中添加判断列是否为最大值的条件列
你遇到的问题其实是对Power Query里Table.Max函数的返回值类型没搞清楚——它返回的是包含最大值的整行记录,不是单个数值,所以没法直接用来做条件判断。别担心,我给你两种简单的解决办法,完全贴合你的需求:
方法一:直接用M语言编写完整逻辑
这是最直接的方式,先提取C列的单个最大值,再添加自定义列实现判断:
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"A", Int64.Type}, {"B", type datetime}, {"C", Int64.Type}, {"D", Int64.Type}}), // 关键步骤:从最大值记录中提取C列的单个数值 MaxC = Table.Max(#"Changed Type", "C")[C], // 添加自定义列E,实现你的条件逻辑 #"Added Custom Column" = Table.AddColumn(#"Changed Type", "E", each if [C] = MaxC then [C] else -1) in #"Added Custom Column"
逻辑解释:
Table.Max(#"Changed Type", "C")会返回C列值最大的那一行完整记录,后面加[C]就能从记录中提取出单个的最大值,这样就可以用来做逐行对比了。Table.AddColumn里的判断逻辑完全对应你给出的Excel公式IF(MAX(C:C)=C2,C2,-1),只是用Power Query的语法实现。
方法二:用Power Query可视化界面操作(少写代码)
如果更习惯用UI操作,按以下步骤来:
- 加载Table1到Power Query编辑器,完成类型转换(即你之前的
Changed Type步骤)。 - 点击添加列选项卡 → 自定义列,输入公式
=Table.Max(#"Changed Type", "C")[C],将列命名为MaxC(这列所有行都会显示C列的最大值)。 - 再点击添加列 → 条件列,设置规则:
- 列名:选择
C - 运算符:等于
- 值:选择
MaxC - 输出:输入
[C] - 否则:输入
-1 - 给条件列命名为
E
- 列名:选择
- 右键删掉
MaxC辅助列,就能得到最终结果。
这两种方法都能实现你VBA宏的逻辑,而且Power Query的优势在于:数据源更新后,只需刷新就能自动同步E列的结果,不用手动运行宏。
内容的提问来源于stack exchange,提问作者LOKE2707
相关产品推荐
相关产品推荐

