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

DAX查询问题:筛选满足双状态条件的ApplicationId

筛选同时存在指定状态的ApplicationId的DAX解决方案

需求说明

从Application Progress Links表中筛选出同时满足以下条件的ApplicationId:

  • 该ID存在状态编码为1(new)或2(invited)的记录
  • 该ID存在状态编码为5(signedup)的记录

原代码问题分析

你写的代码有两个核心问题:

  1. inv_new是整张表,但IN运算符需要的是单列值集合,直接用ApplicationId IN inv_new会导致语法逻辑错误
  2. 代码逻辑是返回符合条件的记录数,而非筛选出目标ApplicationId列表

可行解决方案

以下提供几种不同思路的DAX写法,按需选择:

方案1:交集法(最直观)

先分别提取满足单个条件的ID集合,再取两者的交集:

符合条件的ApplicationId = 
VAR 包含1或2状态的ID = 
    CALCULATETABLE(
        VALUES('Application Progress Links'[ApplicationId]),
        'Application Progress Links'[Status (Code)] IN {1,2}
    )
VAR 包含5状态的ID = 
    CALCULATETABLE(
        VALUES('Application Progress Links'[ApplicationId]),
        'Application Progress Links'[Status (Code)] = 5
    )
RETURN
    INTERSECT(包含1或2状态的ID, 包含5状态的ID)

方案2:分组统计法

按ID分组后,统计各状态的存在情况,再筛选:

符合条件的ApplicationId = 
FILTER(
    GROUPBY(
        'Application Progress Links',
        'Application Progress Links'[ApplicationId],
        "@是否有1或2", SUMX(CURRENTGROUP(), IF([Status (Code)] IN {1,2}, 1, 0)),
        "@是否有5", SUMX(CURRENTGROUP(), IF([Status (Code)] = 5, 1, 0))
    ),
    [@是否有1或2] > 0 && [@是否有5] > 0
)

方案3:逐ID校验法

遍历每个唯一ID,直接校验是否同时满足两个状态条件:

符合条件的ApplicationId = 
FILTER(
    VALUES('Application Progress Links'[ApplicationId]),
    CALCULATE(COUNTROWS('Application Progress Links'), [Status (Code)] IN {1,2}) > 0
    && CALCULATE(COUNTROWS('Application Progress Links'), [Status (Code)] = 5) > 0
)

如果需要统计符合条件的ID数量(度量值)

符合条件的ID数量 = 
VAR 目标ID集合 = INTERSECT(
    CALCULATETABLE(VALUES('Application Progress Links'[ApplicationId]), [Status (Code)] IN {1,2}),
    CALCULATETABLE(VALUES('Application Progress Links'[ApplicationId]), [Status (Code)] = 5)
)
RETURN COUNTROWS(目标ID集合)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:35:13