Power BI/DAX技术需求:统计Type A与B级别不同的ID数量
DAX解决方案:统计同时包含Type A/B且Level不同的ID数量
需求说明
需要统计满足以下条件的ID数量:
- 该ID**同时存在
Type = "A"和Type = "B"**的记录 - 该ID对应的Type A与Type B的
Level值不相等
其他Type(如示例中的C)的记录直接忽略,根据给定样本数据,最终结果应为1(仅ID 123符合要求)。
解决方案DAX度量值
以下是两种可行的DAX写法,均可实现需求:
写法一:分步变量清晰版
CountQualifiedIDs = VAR IDswithAandB = // 筛选出同时包含Type A和Type B的ID集合 CALCULATETABLE( VALUES('SampleTable'[ID]), 'SampleTable'[Type] IN {"A", "B"}, GROUPBY( 'SampleTable', 'SampleTable'[ID], // 确保每个ID至少有两种不同Type(即同时有A和B) HASONEVALUE('SampleTable'[Type]) = FALSE() ) ) VAR IDswithDifferentLevels = // 从上述ID中筛选出A、B级别不同的ID FILTER( IDswithAandB, VAR LevelA = CALCULATE(MAX('SampleTable'[Level]), 'SampleTable'[Type] = "A") VAR LevelB = CALCULATE(MAX('SampleTable'[Level]), 'SampleTable'[Type] = "B") RETURN LevelA <> LevelB ) RETURN COUNTROWS(IDswithDifferentLevels)
写法二:聚合筛选简洁版
CountQualifiedIDs = COUNTROWS( FILTER( SUMMARIZECOLUMNS( 'SampleTable'[ID], "HasA", CALCULATE(COUNTROWS('SampleTable'), 'SampleTable'[Type] = "A") > 0, "HasB", CALCULATE(COUNTROWS('SampleTable'), 'SampleTable'[Type] = "B") > 0, "LevelA", CALCULATE(MAX('SampleTable'[Level]), 'SampleTable'[Type] = "A"), "LevelB", CALCULATE(MAX('SampleTable'[Level]), 'SampleTable'[Type] = "B") ), [HasA] && [HasB] && [LevelA] <> [LevelB] ) )
逻辑说明
- 筛选同时有A和B的ID:两种写法都会先过滤出同时存在Type A和Type B记录的ID,排除只有单一Type的ID。
- 判断Level是否不同:对每个符合第一步条件的ID,分别提取其Type A和Type B的Level值,判断两者是否不等。
- 统计符合条件的ID数量:最后统计满足所有条件的ID行数,得到结果。
样本验证
针对给定的样本数据:
- ID 123:存在Type A(Level=2)和Type B(Level=1),Level值不等 → 符合条件
- ID 987:存在Type A和Type B,但Level均为3 → 不符合条件
最终统计结果为1,与预期一致。
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

