如何在Power Query中根据另一列的值条件替换指定列取值
Power Query 按规则替换Trade列值实现方案
最优实现分两种,按需选择即可,两种方式性能都远高于逐行循环、多轮替换的方案,大表运行无压力。
方式1:纯界面操作(无需写代码,适合新手)
- 第一步:点击
Job_Reference列标题左侧的类型图标,将列类型修改为文本,避免数字类型取首字符时出现格式错误。 - 第二步:点击顶部菜单栏「添加列」>「条件列」,按如下规则配置弹窗:
- 新列名可自定义为
Trade_New - 第一条规则:列选
Job_Reference,运算符选「开头为」,值填2,输出填PLASTERER - 点击「添加规则」新增第二条:列选
Job_Reference,运算符选「开头为」,值填3,输出填PAINTER - 「否则」规则下拉选择「选择列」> 选中
Trade,即不满足前两个规则时保留原Trade值
- 新列名可自定义为
- 第三步:点击确定生成新列,核对数据无误后删除原
Trade列,将新列重命名为Trade即可。
方式2:M公式直接改列(步骤最少,性能最优)
不需要新增列,直接修改原有Trade列,适合熟悉M公式的场景:
- 同样先把
Job_Reference列转为文本类型 - 选中
Trade列,点击顶部「转换」>「自定义转换」,在公式框输入如下代码:
let JobRefFirstChar = Text.Start([Job_Reference],1) in if JobRefFirstChar = "2" then "PLASTERER" else if JobRefFirstChar = "3" then "PAINTER" else [Trade]
- 点击确定即可直接完成原列修改。
如果需要直接在高级编辑器里修改,对应核心转换步骤的代码参考如下(将代码中#"上一步步骤名"替换为你自己查询里的实际步骤名即可):
#"修改Trade列" = Table.TransformColumns(#"上一步步骤名", {{"Trade", (currentTrade) => let firstChar = Text.Start(Text.From([Job_Reference]),1) in if firstChar = "2" then "PLASTERER" else if firstChar = "3" then "PAINTER" else currentTrade, type text}})
注意点
- 必须先将
Job_Reference转为文本类型再做首字符判断:如果该列为数值类型,直接取首字符可能受数字格式、科学计数法影响出现判断错误。 - 上述逻辑默认对所有行生效,如果你只需要处理原Trade值为
PAINTER/PLASTERER的行,只需要在判断条件里加一层and List.Contains({"PAINTER","PLASTERER"}, [Trade])即可。
内容的提问来源于stack exchange,提问作者ItzCamm
相关产品推荐
相关产品推荐

