DAX技术问题:基于filter_id列值筛选同时含指定值的id
DAX实现多值匹配筛选(同时包含指定filter_id的id)
针对你需要筛选出同时包含filter_id=5和filter_id=17的所有id的需求,这里提供几种实用的DAX方案:
方案1:创建计算表直接输出结果
直接生成包含符合条件id的表,替换代码中的你的表名为实际表名即可:
符合条件的ID表 = VAR TargetFilters = {5, 17} // 定义需要匹配的filter_id集合 RETURN SELECTCOLUMNS( // 按id分组后,筛选出与目标集合交集数量等于目标数量的id FILTER( SUMMARIZE('你的表名', '你的表名'[id]), COUNTROWS(INTERSECT(VALUES('你的表名'[filter_id]), TargetFilters)) = COUNTROWS(TargetFilters) ), "id", '你的表名'[id] )
执行后会得到仅包含id=1和id=3的结果表。
方案2:创建度量值用于可视化筛选
如果需要在报表中动态筛选符合条件的行,可以创建如下度量值:
是否同时包含目标Filter = VAR TargetFilters = {5, 17} // 获取当前id对应的所有filter_id集合 VAR CurrentIDFilters = CALCULATETABLE(VALUES('你的表名'[filter_id]), ALLEXCEPT('你的表名', '你的表名'[id])) RETURN // 判断当前id的filter集合是否包含所有目标值 IF(COUNTROWS(INTERSECT(CurrentIDFilters, TargetFilters)) = COUNTROWS(TargetFilters), 1, 0)
在可视化中添加该度量值并筛选值为1的行,即可得到符合条件的id数据。
方案3:简化版计算表(适用于固定两个筛选值)
如果仅需匹配固定的两个值(5和17),可以用更直白的写法:
符合条件的ID表 = SELECTCOLUMNS( FILTER( SUMMARIZE('你的表名', '你的表名'[id]), // 检查当前id是否同时存在filter_id=5和17 CALCULATE(COUNTROWS('你的表名'), '你的表名'[filter_id]=5) > 0 && CALCULATE(COUNTROWS('你的表名'), '你的表名'[filter_id]=17) > 0 ), "id", '你的表名'[id] )
内容的提问来源于stack exchange,提问作者yellowplum
相关产品推荐
相关产品推荐

