PowerBI动态分组与切片器:折线图添加“其他”系列解决方案咨询
问题描述
拥有带时间维度的销售数据集,结构如下:
| Company | SubBrand | Analytical Name | Sales | Market |
|---|---|---|---|---|
| Company A | Brand 1 | Product 1 | Num. | Market A |
| Company A | Brand 1 | Product 2 | Num. | Market B |
| Company B | Brand 2 | Product 3 | Num. | Market A |
| Company C | Brand 3 | Product 4 | Num. | Market A |
需创建满足以下要求的报表:
- 两个静态切片器:选择分析市场(如Market A/B)、选择分析类别维度(Company/SubBrand/Analytical Name)
- 动态切片器(Slicer3):根据前两个切片器的选择,展示对应市场下所选维度的所有选项
- 折线图按时间展示选中类别的市场份额(公式:
所选类别销售额/所选市场总销售额),同时需添加未选中/其他数据系列,展示未选中类别的合计市场份额
遇到的障碍:
- 折线图图例无法直接使用度量值
- DAX无法直接创建基于切片器选择的动态分组表
可行解决方案
步骤1:创建维度选择参数表
新建手动输入表(命名为类别维度选择),作为Slicer2的维度选择源:
| 维度名称 |
|---|
| Company |
| SubBrand |
| Analytical Name |
步骤2:创建动态图例表
用DAX创建动态表(命名为动态图例表),自动合并选中项和“其他”,作为折线图的图例源:
动态图例表 = VAR 选中维度 = SELECTEDVALUE('类别维度选择'[维度名称]) VAR 当前市场所有项 = CALCULATETABLE( SWITCH( 选中维度, "Company", VALUES('销售数据'[Company]), "SubBrand", VALUES('销售数据'[SubBrand]), "Analytical Name", VALUES('销售数据'[Analytical Name]) ), ALLSELECTED('销售数据'[Market]) ) VAR 选中项 = SWITCH( 选中维度, "Company", VALUES('销售数据'[Company]), "SubBrand", VALUES('销售数据'[SubBrand]), "Analytical Name", VALUES('销售数据'[Analytical Name]) ) VAR 其他项 = ROW(选中维度, "其他") RETURN UNION(选中项, 其他项)
步骤3:创建市场份额度量值
编写DAX度量值(命名为市场份额),计算每个图例项的市场份额,包含“其他”的合计值:
市场份额 = VAR 选中维度 = SELECTEDVALUE('类别维度选择'[维度名称]) VAR 当前图例项 = SWITCH( 选中维度, "Company", SELECTEDVALUE('动态图例表'[Company]), "SubBrand", SELECTEDVALUE('动态图例表'[SubBrand]), "Analytical Name", SELECTEDVALUE('动态图例表'[Analytical Name]) ) VAR 所选市场总销售额 = CALCULATE(SUM('销售数据'[Sales]), ALLSELECTED('销售数据'[Market])) VAR 选中项总销售额 = CALCULATE( SUM('销售数据'[Sales]), SWITCH( 选中维度, "Company", '销售数据'[Company] IN VALUES('销售数据'[Company]), "SubBrand", '销售数据'[SubBrand] IN VALUES('销售数据'[SubBrand]), "Analytical Name", '销售数据'[Analytical Name] IN VALUES('销售数据'[Analytical Name]) ), ALLSELECTED('销售数据'[Market]) ) VAR 市场所有项总销售额 = CALCULATE( SUM('销售数据'[Sales]), ALLSELECTED('销售数据'[Market]), ALLSELECTED('动态图例表') ) RETURN IF( 当前图例项 = "其他", DIVIDE(市场所有项总销售额 - 选中项总销售额, 所选市场总销售额, 0), DIVIDE( CALCULATE( SUM('销售数据'[Sales]), SWITCH( 选中维度, "Company", '销售数据'[Company] = 当前图例项, "SubBrand", '销售数据'[SubBrand] = 当前图例项, "Analytical Name", '销售数据'[Analytical Name] = 当前图例项 ), ALLSELECTED('销售数据'[Market]) ), 所选市场总销售额, 0 ) )
步骤4:配置报表组件
- 静态切片器:
- Slicer1:使用
销售数据[Market]字段 - Slicer2:使用
类别维度选择[维度名称]字段
- Slicer1:使用
- 动态切片器(Slicer3):根据选中维度,拖入
动态图例表对应的字段(如选中Company则拖入动态图例表[Company],需隐藏“其他”选项) - 折线图:
- 轴:拖入时间字段
- 图例:拖入
动态图例表对应的维度字段(与Slicer3一致) - 值:拖入
市场份额度量值
关键说明
动态图例表会根据切片器选择自动更新,确保“其他”项始终被包含- 度量值通过
ALLSELECTED函数保留市场切片器的筛选上下文,同时排除图例表的筛选以计算全市场总额 - DIVIDE函数避免除数为0的错误,返回0作为默认值
内容的提问来源于stack exchange,提问作者Siarampoo
相关产品推荐
相关产品推荐

