如何在Power BI中基于多产品列创建单一下拉切片器
在Power BI中创建产品下拉切片器筛选购买用户的方案
现有数据
| ID | TYPE | Product 1 | Product 2 | Product 3 |
|---|---|---|---|---|
| 1 | A | 1 | 1 | 0 |
| 1 | B | 0 | 0 | 1 |
| 2 | A | 0 | 1 | 1 |
| 2 | B | 1 | 0 | 1 |
| 3 | A | 1 | 0 | 0 |
需求说明:除ID和TYPE列外,其余为0/1二进制列,用于标识用户是否购买对应产品。需创建包含Product 1、Product 2、Product 3的单一下拉切片器,筛选出购买所选产品的用户。
步骤1:将宽表转换为窄表(逆透视)
当前产品列是宽格式,无法直接作为切片器选项,需要先转成窄表:
- 进入Power Query编辑器,选中
ID和TYPE列 - 点击转换选项卡 → 逆透视其他列
- 重命名生成的列:将
Attribute改为Product,Value改为Purchased - 关闭并应用,得到如下结构的表:
| ID | TYPE | Product | Purchased |
|---|---|---|---|
| 1 | A | Product 1 | 1 |
| 1 | A | Product 2 | 1 |
| 1 | A | Product 3 | 0 |
| 1 | B | Product 1 | 0 |
步骤2:创建独立产品维度表(推荐)
为避免切片器与主表的交互冲突,建议创建独立的产品维度表:
- 在Power Query中,从转换后的表提取
Product列的唯一值,生成新表Product List(仅包含Product列) - 在数据模型中,建立
Product List[Product]与主表Product列的一对一关系
步骤3:创建DAX度量值判断用户购买状态
在主表中创建如下度量值,用于判断当前用户是否购买了切片器选中的产品:
用户已购买 = VAR SelectedProd = SELECTEDVALUE('Product List'[Product]) RETURN MAXX( FILTER('主表', '主表'[Product] = SelectedProd), '主表'[Purchased] )
如果需要支持多选切片器(筛选购买所有选中产品的用户),使用这个度量值:
用户已购买所选全部产品 = VAR SelectedProducts = VALUES('Product List'[Product]) VAR UserPurchased = CALCULATETABLE(VALUES('主表'[Product]), ALLEXCEPT('主表', '主表'[ID])) RETURN IF(COUNTROWS(EXCEPT(SelectedProducts, UserPurchased)) = 0, 1, 0)
步骤4:配置切片器与视觉对象
- 从
Product List表拖入Product字段到画布,创建下拉切片器 - 拖入
ID等用户字段到目标视觉对象(如表格、卡片图) - 为视觉对象添加筛选条件:选择对应的度量值,设置筛选规则为
等于1
内容的提问来源于stack exchange,提问作者Grzegorz Szymala
相关产品推荐
相关产品推荐

