为何我的DIVIDE()度量返回1?分子与分母为何相等?
你写的DAX返回1的核心原因是分子和分母的筛选范围完全一致,问题出在FILTER('fSampleResultsOilWater', ...)的使用方式上:
在CALCULATE的筛选器参数中,FILTER('fSampleResultsOilWater', ...)是直接迭代整个fSampleResultsOilWater表(忽略外部视觉/切片器对该表的筛选),只保留符合Severity条件的行;再叠加日期筛选后,分子统计的是全表中符合Severity+4Q2023的行数。
而分母中,ALL('fSampleResultsOilWater')清除了该表的外部筛选,随后的FILTER('fSampleResultsOilWater', ...)同样迭代整个表筛选Severity条件,再叠加日期筛选,统计的行数和分子完全相同,因此DIVIDE返回1。
修正后的度量值
DIVIDE( -- 分子:保留外部视觉/切片器筛选,叠加Severity和日期条件 CALCULATE( COUNTROWS('fSampleResultsOilWater'), 'fSampleResultsOilWater'[Severity] IN {"Abnormal", "Severe"}, dDates[Q Year] = "4Q2023" ), -- 分母:清除f表的外部筛选,仅保留Severity和日期条件 CALCULATE( COUNTROWS('fSampleResultsOilWater'), ALL('fSampleResultsOilWater'), 'fSampleResultsOilWater'[Severity] IN {"Abnormal", "Severe"}, dDates[Q Year] = "4Q2023" ) )
修正逻辑说明
- 分子使用列级筛选条件替代
FILTER全表遍历,这样会自动继承外部视觉/切片器对fSampleResultsOilWater表的筛选,再叠加Severity和日期的限制,得到你期望的"更小数据集子集"。 - 分母通过
ALL('fSampleResultsOilWater')清除该表的所有外部筛选,再叠加相同的Severity和日期条件,得到全表范围内的符合条件行数。
如果需要保留外部对dDates表的筛选(而非固定4Q2023),可以把分母中的dDates[Q Year] = "4Q2023"去掉,让分母继承外部日期筛选。
内容的提问来源于stack exchange,提问作者hic24
相关产品推荐
相关产品推荐

