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

Power BI DAX计数异常:FILTER与USERELATIONSHIP使用结果错误

问题描述

我有包含Calendar表和Interviews表的数据集,Interviews表字段包括CreatedOn、ClosedOn、Region、Division、Language和Index。两表关系如下:

  • 活跃关系:Interviews[CreatedOn] ↔ Calendar[Date]
  • 非活跃关系:Interviews[ClosedOn] ↔ Calendar[Date]

当前设置:

  • 用Calendar[Date]做日期切片器,范围为2024年1月1日至1月6日
  • 页面筛选排除Division=1

需求是统计ClosedOn在所选日期范围内的法语关闭面试数,但遇到问题:

  1. 统计总关闭面试数的度量返回正确结果2641:
Total Closed = CALCULATE(COUNTROWS(Interviews), USERELATIONSHIP(Interviews[ClosedOn], 'Calendar'[Date]))
  1. 单独筛选法语的度量返回1565(远低于预期的2210):
Total French Closed = CALCULATE(COUNTROWS(Interviews), FILTER(Interviews, Interviews[Language] = "French"))
  1. 给法语度量加上USERELATIONSHIP后直接返回空白:
Total French Closed = CALCULATE(COUNTROWS(Interviews), FILTER(Interviews, Interviews[Language] = "French"), USERELATIONSHIP(Interviews[ClosedOn], 'Calendar'[Date]))
问题分析与解决

错误原因

  1. 第二个度量没切换关系,默认用的是活跃的CreatedOn关联,统计的是CreatedOn在切片器日期内且语言为法语的面试数,不是ClosedOn符合条件的,所以结果偏小。
  2. 第三个度量的顺序错了:FILTER(Interviews,...)是先基于当前的CreatedOn切片器+Division排除的上下文过滤表,之后再切换到ClosedOn的关系,这时候已经没有符合条件的行,自然返回空白。

正确的DAX写法

两种方案都能解决问题:

方案一:直接在CALCULATE里加语言筛选,让关系切换先生效

Total French Closed = CALCULATE(COUNTROWS(Interviews), 
    Interviews[Language] = "French",
    USERELATIONSHIP(Interviews[ClosedOn], 'Calendar'[Date])
)

方案二:用CALCULATETABLE先切换关系再过滤

Total French Closed = CALCULATE(COUNTROWS(
    CALCULATETABLE(Interviews, USERELATIONSHIP(Interviews[ClosedOn], 'Calendar'[Date]))
), Interviews[Language] = "French")

核心逻辑

USERELATIONSHIP必须在筛选之前生效,这样Calendar的切片器才能作用于ClosedOn字段。直接把语言筛选放在CALCULATE的参数里,会在切换关系后的上下文里执行,就能准确统计出ClosedOn在切片器范围内、Division≠1且语言为法语的面试数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:52:52