DAX查询问题:筛选满足双状态条件的ApplicationId
筛选同时存在指定状态的ApplicationId的DAX解决方案
需求说明
从Application Progress Links表中筛选出同时满足以下条件的ApplicationId:
- 该ID存在状态编码为1(new)或2(invited)的记录
- 该ID存在状态编码为5(signedup)的记录
原代码问题分析
你写的代码有两个核心问题:
inv_new是整张表,但IN运算符需要的是单列值集合,直接用ApplicationId IN inv_new会导致语法逻辑错误- 代码逻辑是返回符合条件的记录数,而非筛选出目标
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
相关产品推荐
相关产品推荐

