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

DAX度量值Test1与Test2计数结果差异及等效性疑问

为什么Test1和Test2结果不同?

1. 核心问题:度量值引用错误

你创建的Date Selected是度量值,引用度量值时不需要添加表名前缀,正确写法是[Date Selected],而非MachineData[Date Selected]。错误的引用方式触发了Power BI的隐式上下文转换,直接导致计算逻辑偏离预期。

2. 两个度量值的实际计算逻辑

Test1的正确逻辑

Test1 = COUNTROWS(FILTER(MachineData,
MachineData[StartTime] >= Max(MachineData[StartTime]) - 31 ))

这里的Max(MachineData[StartTime])是在全局筛选上下文(切片器选中的日期范围)下计算的,取的是切片器筛选后MachineData表中StartTime的最大值。因此Test1统计的是:切片器范围内,StartTime大于等于「筛选后最大值 -31天」的行数(也就是你预期的最近31天数据量,结果3800)。

Test2的错误逻辑

Test2 = COUNTROWS(FILTER(MachineData,
MachineData[StartTime] >= MachineData[Date Selected] - 31))

由于你用MachineData[Date Selected]引用度量值,Power BI会将其视为在FILTER的行上下文中计算该度量值。每迭代一行MachineData时,行上下文会限制当前仅包含这一行数据,此时MAX(MachineData[StartTime])(即Date Selected的核心逻辑)返回的就是当前行的StartTime值。

最终Test2的条件实际变成:MachineData[StartTime] >= 当前行StartTime -31,这个条件对所有行都成立(日期减31天必然小于等于自身),因此COUNTROWS返回的是整个MachineData表的总行数(结果18000)。

3. 修正后的Test2

将MachineData[Date Selected]改为[Date Selected],Test2的逻辑就会和Test1完全一致:

Test2 = COUNTROWS(FILTER(MachineData,
MachineData[StartTime] >= [Date Selected] - 31))

此时[Date Selected]取全局筛选上下文的最大值,两个度量值的结果将完全相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:52