PowerBI创建含MTD/YTD选项的Slicer Group以按需显示列
实现MTD/YTD切片器切换显示指定列及过滤行的方案
1. 创建切片器选项表
先手动建一个包含MTD、YTD选项的维度表,给切片器提供选择项。在Power BI的「建模」选项卡中新建表,输入DAX表达式:
Slicer_Group = DATATABLE("Period Type", STRING, {{"MTD"}, {"YTD"}})
2. 编写列显示控制度量值
为需要切换显示的每一列创建度量值,控制列的可见性:
- 控制B列显示:
Show Column B = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "MTD", 1, 0)
- 控制C列显示:
Show Column C = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "MTD", 1, 0)
- 控制D列显示:
Show Column D = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "MTD", 1, 0)
- 控制E列显示:
Show Column E = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "YTD", 1, 0)
- 控制F列显示:
Show Column F = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "YTD", 1, 0)
- 控制G列显示:
Show Column G = IF(SELECTEDVALUE(Slicer_Group[Period Type]) = "YTD", 1, 0)
3. 设置表格列的可见性规则
选中目标表格,在右侧「格式」面板找到「列可见性」设置:
- 对B、C、D、E、F、G列,选择「基于度量值显示」,对应关联上面创建的度量值。比如B列绑定
Show Column B,选中MTD时自动显示,YTD时隐藏。 - A列保持「始终显示」即可。
4. 添加行过滤逻辑(仅显示相关行)
创建度量值过滤对应周期下无数据的行:
Filter Rows = VAR SelectedPeriod = SELECTEDVALUE(Slicer_Group[Period Type]) RETURN IF( SelectedPeriod = "MTD" && NOT(ISBLANK([B]) && ISBLANK([C]) && ISBLANK([D])), 1, IF( SelectedPeriod = "YTD" && NOT(ISBLANK([E]) && ISBLANK([F]) && ISBLANK([G])), 1, 0 ) )
把这个度量值拖到表格的「筛选器」面板,设置为「等于1」,表格就只会显示当前选中周期下有有效数据的行。
5. 配置切片器
将Slicer_Group[Period Type]字段拖到画布上的切片器控件,在切片器「格式」面板设置「选择类型」为「单选」,确保一次只能选中MTD或YTD。
额外说明
如果需要显示MTD/YTD的聚合计算值(而非原始列数据),需先创建日期表,再用DAX计算对应周期的聚合值,比如:
MTD B = CALCULATE(SUM('原始表'[B]), DATESMTD('日期表'[Date]))
之后用这些计算后的度量值代替原始列,再按上述步骤配置显示规则即可。
内容的提问来源于stack exchange,提问作者Ivan Nel
相关产品推荐
相关产品推荐

