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

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编辑器,按以下步骤操作:

  1. 选中原始数据表,点击转换选项卡 → 分组依据
  2. 分组依据选择Key(可结合Name、DOB确保用户唯一),新列名设为OTC种类数,操作选行的计数(不同),列选择OTC
  3. 将分组后的表与原始数据表合并(合并查询),匹配条件选Key,合并类型选仅保留匹配行
  4. 筛选合并后的表中OTC种类数 = 3的行,删除多余的OTC种类数列即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:25:39