Power BI-DAX:如何基于DistinctCount聚合结果进行筛选?
DAX/Power BI筛选问题:保留不同OTC数量为3的用户原始数据
需求说明
统计每位用户的不同OTC药物数量(如Amy有3种,Willy有2种),最终筛选出数量为3的用户的全部原始数据。
初始数据
Key Name DOB OTC AmyZ32874 Amy Z 1/1/1990 Motrin AmyZ32874 Amy Z 1/1/1990 Tylenol AmyZ32874 Amy Z 1/1/1990 Bayer WillyV32906 Willy V 2/2/1990 Motrin WillyV32906 Willy V 2/2/1990 Tylenol WillyV32906 Willy V 2/2/1990 Tylenol
期望结果
Key Name DOB OTC AmyZ32874 Amy Z 1/1/1990 Motrin AmyZ32874 Amy Z 1/1/1990 Tylenol AmyZ32874 Amy Z 1/1/1990 Bayer
已尝试方法
- 创建OTC的DistinctCount列,结果得到总行数而非用户维度的统计值
- 将药物拆分至单独表后做自然内连接,因多对多关系报错
- 尝试分组操作,未得到正确的DistinctCount结果
解决方案
方法1:DAX计算列标记+筛选
在原始数据表中新建计算列,按用户维度统计不同OTC数量,再筛选目标行:
用户OTC种类数 = CALCULATE( DISTINCTCOUNT('原始数据'[OTC]), ALLEXCEPT('原始数据', '原始数据'[Key], '原始数据'[Name], '原始数据'[DOB]) )
添加列后,直接在数据表视图筛选用户OTC种类数 = 3即可得到结果。
方法2:度量值配合可视化筛选
无需添加计算列,创建度量值后在可视化组件中设置筛选:
当前用户OTC种类数 = DISTINCTCOUNT('原始数据'[OTC])
将表格可视化组件拖入页面,添加所有需要的字段(Key、Name、DOB、OTC),在筛选面板中添加度量值当前用户OTC种类数,设置筛选条件为等于3。
方法3:Power Query预处理
进入Power Query编辑器,按以下步骤操作:
- 选中原始数据表,点击转换选项卡 → 分组依据
- 分组依据选择
Key(可结合Name、DOB确保用户唯一),新列名设为OTC种类数,操作选行的计数(不同),列选择OTC - 将分组后的表与原始数据表合并(合并查询),匹配条件选
Key,合并类型选仅保留匹配行 - 筛选合并后的表中
OTC种类数 = 3的行,删除多余的OTC种类数列即可
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

