DAX技术求助:计算满足同一列多条件的唯一PersonId计数
正确DAX实现:满足条件的唯一PersonId计数
原度量问题分析
你当前的度量只是筛选Col1在指定集合中的行,再统计这些行的PersonId去重数。这种逻辑会错误包含仅单条-1记录的PersonId(比如示例中的2),同时无法排除有-1但另一行是100的PersonId(比如示例中的6),因此返回结果不符合要求。
正确DAX代码实现
以下是两种可行的实现方式,核心逻辑都是逐个校验每个PersonId是否满足总行数≥2、存在Col1=-1的记录、存在Col1≠100的记录这三个条件:
方式一:分步变量筛选(可读性强)
_ValidPersonCount = VAR PersonWithMinTwoRows = FILTER ( VALUES('Data'[PersonId]), CALCULATE(COUNTROWS('Data')) >= 2 ) VAR PersonWithMinusOne = FILTER ( PersonWithMinTwoRows, CALCULATE(COUNTROWS(FILTER('Data', 'Data'[Col1] = -1))) >= 1 ) VAR PersonWithNon100 = FILTER ( PersonWithMinusOne, CALCULATE(COUNTROWS(FILTER('Data', 'Data'[Col1] <> 100))) >= 1 ) RETURN COUNTROWS(PersonWithNon100)
方式二:SUMX逐行判断(性能更优)
_ValidPersonCount = SUMX ( VALUES('Data'[PersonId]), VAR HasMinusOne = CALCULATE(NOT ISEMPTY(FILTER('Data', 'Data'[Col1] = -1))) VAR HasNon100 = CALCULATE(NOT ISEMPTY(FILTER('Data', 'Data'[Col1] <> 100))) VAR HasAtLeastTwoRows = CALCULATE(COUNTROWS('Data')) >= 2 RETURN IF(HasMinusOne && HasNon100 && HasAtLeastTwoRows, 1, 0) )
结果验证
针对你提供的数据集,上述两种度量都会返回正确结果2,对应符合条件的PersonId1和5。
内容的提问来源于stack exchange,提问作者Geezer
相关产品推荐
相关产品推荐

