Power BI中基于三个产品类型切片器实现动态列矩阵的技术问询
实现多切片器控制矩阵列的Power BI方案
核心思路
因为三个切片器都基于product type,直接用原数据表会导致切片器互相联动,所以需要创建独立的切片器表隔离筛选逻辑,再通过度量值分别计算每个切片器选中值对应的数值,最后将这些度量值作为矩阵的列。
步骤1:创建独立切片器表
用DAX创建三个与原数据表无关联的产品类型表,确保三个切片器的选择互不影响:
-- 第一个切片器的产品类型表 Slicer_ProductType1 = DISTINCT('原数据表'[product type]) -- 第二个切片器的产品类型表 Slicer_ProductType2 = DISTINCT('原数据表'[product type]) -- 第三个切片器的产品类型表 Slicer_ProductType3 = DISTINCT('原数据表'[product type])
注意:不要让这三个表与原数据表建立任何关系。
步骤2:创建对应度量值
为每个切片器创建度量值,计算选中产品类型的values总和,同时处理未选中的情况:
-- 对应第一个切片器的数值度量 Value_Slicer1 = VAR SelectedType = SELECTEDVALUE(Slicer_ProductType1[product type]) RETURN IF( NOT ISBLANK(SelectedType), CALCULATE( SUM('原数据表'[values]), '原数据表'[product type] = SelectedType ), BLANK() )
复制上述DAX,替换Slicer_ProductType1为Slicer_ProductType2和Slicer_ProductType3,得到Value_Slicer2和Value_Slicer3两个度量值。
步骤3:配置矩阵与切片器
矩阵设置:
- 行区域:拖入原数据表的
attribute字段 - 值区域:依次拖入
Value_Slicer1、Value_Slicer2、Value_Slicer3三个度量值 - (可选)右键度量值→重命名,调整列标题使其更直观
- 行区域:拖入原数据表的
切片器设置:
- 添加三个切片器视觉对象,分别绑定
Slicer_ProductType1[product type]、Slicer_ProductType2[product type]、Slicer_ProductType3[product type]
- 添加三个切片器视觉对象,分别绑定
优化技巧
若希望未选中的切片器对应的列自动隐藏,可给每个度量值添加视觉级筛选:
- 选中矩阵,进入「筛选」面板
- 找到对应度量值,添加筛选条件:
Value_Slicer1 不等于 空白 - 对另外两个度量值重复此操作
如果需要支持单个切片器多选产品类型,修改度量值中的
SELECTEDVALUE为VALUES即可:
Value_Slicer1_Multi = VAR SelectedTypes = VALUES(Slicer_ProductType1[product type]) RETURN IF( NOT ISEMPTY(SelectedTypes), CALCULATE( SUM('原数据表'[values]), '原数据表'[product type] IN SelectedTypes ), BLANK() )
内容的提问来源于stack exchange,提问作者A_B
相关产品推荐
相关产品推荐

