Power Query中基于指定列值生成对应描述的多IF/Switch语句实现求助
Power Query 自定义列匹配实现方案
原代码问题说明
你写的代码存在两个错误:
- 错误使用
Text.Length函数:Text.Length返回的是文本长度,而你需要直接比较列的文本值与目标字符串,不需要计算长度。 - 字符串未加引号:Power Query中字符串必须用双引号包裹,
OKOKOK需要写成"OKOKOK"。
解决方案
方案1:嵌套IF语句(适合新手理解)
在Power Query中添加自定义列时,使用以下代码:
= if [Concatenated Data] = "NONONO" then "缺失AM、DM和ML" else if [Concatenated Data] = "NONOOK" then "缺失AM和ML" else if [Concatenated Data] = "NOOKNO" then "缺失DM和ML" else if [Concatenated Data] = "NOOKOK" then "缺失ML" else if [Concatenated Data] = "OKNONO" then "缺失AM和DM" else if [Concatenated Data] = "OKNOOK" then "缺失AM" else if [Concatenated Data] = "OKOKNO" then "缺失DM" else if [Concatenated Data] = "OKOKOK" then "全部正常" else "未知状态"
逐行匹配Concatenated Data列的文本值,返回对应的描述,最后一行else用于处理未定义的意外值。
方案2:Record映射(简洁易维护)
如果后续需要修改匹配规则,用Record键值对的方式更高效:
= try Record.Field( [ NONONO = "缺失AM、DM和ML", NONOOK = "缺失AM和ML", NOOKNO = "缺失DM和ML", NOOKOK = "缺失ML", OKNONO = "缺失AM和DM", OKNOOK = "缺失AM", OKOKNO = "缺失DM", OKOKOK = "全部正常" ], [Concatenated Data] ) otherwise "未知状态"
- 先创建一个包含所有匹配规则的Record,键为列中的可能值,值为对应描述。
Record.Field根据列值提取对应的描述,try...otherwise用于处理未定义的意外值,避免报错。
内容的提问来源于stack exchange,提问作者Lio Djo
相关产品推荐
相关产品推荐

