如何在Power BI的IF语句中简化多OR条件的分组逻辑?
Power BI 自定义分组列的简洁写法
针对你用多层IF+OR写分组逻辑过于冗长的问题,这里提供两种更简洁易维护的方案:
方案1:用List.Contains简化OR条件
把多个[A]='XX' or [A]='YY'的判断替换成List.Contains({"XX","YY"}, [A]),直接检查值是否在目标列表中,代码结构更紧凑。
示例M代码:
= if List.Contains({"DA1","DA2","DA3"}, [A]) then "group1" else if List.Contains({"SA1","DA4","FA5"}, [A]) then "group2" else if List.Contains({"XX1","XX2"}, [A]) then "group3" else if List.Contains({"YY1"}, [A]) then "group4" else if List.Contains({"ZZ1","ZZ2","ZZ3"}, [A]) then "group5" else "other"
方案2:用映射表统一管理分组(推荐多分组场景)
如果有5个及以上分组,建议先定义一个分组映射表,后续修改分组规则只需调整映射表,无需改动判断逻辑,维护成本更低。
完整M代码示例(在Power Query编辑器中使用):
let // 替换成你的数据源 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // 定义分组映射:键是分组名,值是对应列A的取值列表 groupMap = [ group1 = {"DA1","DA2","DA3"}, group2 = {"SA1","DA4","FA5"}, group3 = {"AA1","AA2"}, group4 = {"BB1"}, group5 = {"CC1","CC2","CC3"} ], // 添加自定义列B AddGroupColumn = Table.AddColumn(Source, "B", each let // 查找匹配当前[A]值的分组名 matchedGroup = List.Select(Record.FieldNames(groupMap), (groupName) => List.Contains(groupMap[groupName], [A])) in // 有匹配则取第一个分组名,无匹配返回other if List.Count(matchedGroup) > 0 then matchedGroup{0} else "other" ) in AddGroupColumn
这个方案的优势在于:新增/修改分组时,只需要在groupMap里添加或调整键值对即可,不用修改后续的判断逻辑,尤其适合分组规则频繁变动的场景。
内容的提问来源于stack exchange,提问作者scmdude
相关产品推荐
相关产品推荐

