求Excel COUNTIFS公式对应的Power BI M查询自定义列代码
Power BI M查询实现Excel COUNTIFS等效逻辑
需求背景
用户原本在Excel中使用以下公式,判断每个数据库行的加载周数:
IF(COUNTIFS(B:B, B2, G:G, "<>"&G2)>0,"Two Weeks", "One Week")
说明:B列为数据库列,G列为周列
逻辑是:如果同一个数据库对应多个不同的周数,标记为"Two Weeks";若仅对应一个周数,则标记为"One Week"。现在需要在Power BI的DBTimeline表中添加自定义列,实现相同逻辑,但用户尝试的M查询未成功。
用户尝试的错误代码
= if List.Count(Table.SelectRows(DBTimeline, each [DataBase] = [DataBase] and [Week Number] <> [Week Number])) > 0 then "Two Weeks" else "One Week" = if List.Count(Table.SelectRows("Previous Step", each [DataBase] = [DataBase] and [Week Number] <> [Week Number])) > 0 then "Two Weeks" else "One Week"
正确解决方案
核心问题
错误原因是上下文混淆:在Table.SelectRows的each表达式中,[DataBase]和[Week Number]默认指向筛选表中的字段,而非当前行的值,导致筛选逻辑失效。
逐行判断的正确代码
= let 当前数据库 = [DataBase], 当前周数 = [Week Number], 匹配记录 = Table.SelectRows(DBTimeline, each [DataBase] = 当前数据库 and [Week Number] <> 当前周数) in if List.Count(匹配记录) > 0 then "Two Weeks" else "One Week"
高效优化方案(推荐)
如果数据量较大,逐行筛选效率偏低,建议先分组统计每个数据库的唯一周数数量,再合并回原表:
- 对
DBTimeline表添加分组步骤:= Table.Group(DBTimeline, {"DataBase"}, {{"唯一周数", each List.Count(List.Distinct([Week Number])), Int64.Type}}) - 将分组后的表与原表按
DataBase列做左外连接 - 添加自定义列:
= if [唯一周数] > 1 then "Two Weeks" else "One Week"
内容的提问来源于stack exchange,提问作者reddy
相关产品推荐
相关产品推荐

