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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:42:07