Power BI DAX需求:基于多选筛选动态计算客户分组并生成图表
Power BI 图表制作方案
需求概述
制作X轴为分组区间(Band)、Y轴为对应区间客户数量的图表,同时配置支持多选的筛选器(选项为Type1、Type2、Type3),筛选器选中不同组合时,需按规则计算客户剩余价值并匹配对应区间统计数量:
- 选中Type1:计算
Column D - Column E,结果10对应「6-10」区间、15对应「10+」区间,图表显示两区间各1个客户 - 选中Type2:计算
Column D - Column F,结果5、4均对应「1-5」区间,图表显示该区间2个客户 - 选中Type3:计算
Column D - Column G,结果2对应「1-5」区间、6对应「6-10」区间,图表显示两区间各1个客户 - 同时选中Type1和Type2:计算
Column D - (Column E+Column F),结果0对应「0」区间、3对应「1-5」区间,图表显示两区间各1个客户
实现步骤
1. 创建筛选器维度表
新建独立维度表(用于提供筛选器选项),内容如下:
| Type |
|---|
| Type1 |
| Type2 |
| Type3 |
注:该表无需与主数据表建立关系,用于后续通过DAX识别选中的筛选项
2. 编写DAX计算逻辑
(1)剩余价值计算度量值
创建度量值剩余价值,根据筛选器选中的Type组合计算对应值:
剩余价值 = VAR SelectedTypes = VALUES('Type筛选表'[Type]) RETURN SWITCH( TRUE(), "Type1" IN SelectedTypes && "Type2" IN SelectedTypes && "Type3" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column E]) - SUM('主数据表'[Column F]) - SUM('主数据表'[Column G]), "Type1" IN SelectedTypes && "Type2" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column E]) - SUM('主数据表'[Column F]), "Type1" IN SelectedTypes && "Type3" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column E]) - SUM('主数据表'[Column G]), "Type2" IN SelectedTypes && "Type3" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column F]) - SUM('主数据表'[Column G]), "Type1" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column E]), "Type2" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column F]), "Type3" IN SelectedTypes, SUM('主数据表'[Column D]) - SUM('主数据表'[Column G]), SUM('主数据表'[Column D]) // 未选中任何Type时的默认值,可按需调整 )
(2)区间客户数统计度量值
创建度量值区间客户数,将剩余价值匹配到对应区间并统计客户数量:
区间客户数 = VAR CurrentBand = SELECTEDVALUE('区间表'[Band]) RETURN COUNTROWS( FILTER( '主数据表', VAR IndividualValue = SWITCH( TRUE(), "Type1" IN VALUES('Type筛选表'[Type]) && "Type2" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column E] - '主数据表'[Column F], "Type1" IN VALUES('Type筛选表'[Type]) && "Type3" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column E] - '主数据表'[Column G], "Type2" IN VALUES('Type筛选表'[Type]) && "Type3" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column F] - '主数据表'[Column G], "Type1" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column E], "Type2" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column F], "Type3" IN VALUES('Type筛选表'[Type]), '主数据表'[Column D] - '主数据表'[Column G], '主数据表'[Column D] ) RETURN SWITCH( TRUE(), IndividualValue = 0, "0", IndividualValue > 0 && IndividualValue <=5, "1-5", IndividualValue >5 && IndividualValue <=10, "6-10", IndividualValue >10, "10+" ) = CurrentBand ) )
(3)创建区间维度表
新建区间表用于X轴分组,内容如下:
| Band |
|---|
| 0 |
| 1-5 |
| 6-10 |
| 10+ |
3. 配置图表与筛选器
- 将
区间表中的Band字段拖至图表X轴 - 将
区间客户数度量值拖至图表Y轴 - 将
Type筛选表中的Type字段拖至筛选器面板,设置为多选模式
效果验证
根据筛选器的不同选择,图表将自动计算剩余价值并匹配对应区间统计客户数量,与预期结果一致:
- 选Type1:「6-10」「10+」区间各1个客户
- 选Type2:「1-5」区间2个客户
- 选Type3:「1-5」「6-10」区间各1个客户
- 选Type1+Type2:「0」「1-5」区间各1个客户
内容的提问来源于stack exchange,提问作者DataGeek
相关产品推荐
相关产品推荐

