You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求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"

高效优化方案(推荐)

如果数据量较大,逐行筛选效率偏低,建议先分组统计每个数据库的唯一周数数量,再合并回原表:

  1. 对DBTimeline表添加分组步骤:
    = Table.Group(DBTimeline, {"DataBase"}, {{"唯一周数", each List.Count(List.Distinct([Week Number])), Int64.Type}})
    
  2. 将分组后的表与原表按DataBase列做左外连接
  3. 添加自定义列:
    = if [唯一周数] > 1 then "Two Weeks" else "One Week"
    

内容的提问来源于stack exchange,提问作者reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:22:10