有时为了节省页面空间,让当前报表提供更多的信息,经常会有这样的设计,即提供一些选项给报表使用人,当报表使用人选定某个项目时,当前报表才显示该项目的信息,如下:
如果不使用外部工具,实现上述功能一般有两种做法:
(1)使用书签功能,通过书签 按钮控制多个视觉对象的显示和隐藏,设置相对比较麻烦。
(2)使用辅助表,利用DAX新建一个用于显示切换的度量值步骤如下:
- 新建一个辅助表:
- 构建度量值:
(使用辅助表,还可以分别创建三个度量值,与视觉对象的功能组合起来使用)
然后将辅助表的指标名称列加入到切片器视觉对象,这样就可以让用户通过该切片器控制度量值[指标切换]值的显示。
但有一个问题,该度量值的显示格式只能设置为单一样式(如利润率想设置为百分比,其他设置为逗号分隔的整数样式),如果使用DAX中format函数分别指定样式,其结果又变成了文本,无法参与后续计算,在视觉对象中呈现会有许多限制。
目前,使用计算组很容易解决这个问题。计算组的定义需要使用外部工具Tabular Editor,使用TabularEditor创建计算组后,模型中就多了一个表格,该表格有两列:一列是Name列(可以重命名),别一列列名为Ordinal,用来设置排序。如下:
并将收入计算项定义为度量值 [收入]、利润计算项定义为度量值[利润]、利润率计算项定义为度量值[利润率]
上表中每一行对应一个计算项,每一个计算项可以定义值及值显示格式,与使用辅助表类似,也需要将上述的[Name]列加入至当前页面的切片器视觉对象.
然后将度量值(值= BLANK())用矩阵呈现出来,就可以得到与用辅助表的方法十分类似的结果,其原理如下:
正因为计算组会影响当前页面所有受[Name]列筛选的度量值,因此,原使用辅助表构造的值也会发现变化,如下:
如表1中的度量值虽然是通过辅助表与DAX重写了,但是由于计算组表[Name]列中的“收入”是选定状态,在交互筛选的作用下,表1表2中的度量值都会传入计算组,然后返回收入计算项定义的值(表达式),也就是显示[收入],即使目前表1对应的辅助表的指标名称选定为“利润”。
事实上,表1中的度量值[指标切换]等价于
代码语言:javascript复制CALCULATE([指标切换],'指标名称计算组'[Name]="收入")
表2中的度量值[指标切换]等价于
代码语言:javascript复制CALCULATE([值],'指标名称计算组'[Name]="收入")
注:生成的计算组表的列也可以向其他普通表的列一样在DAX表达中引用
不管是上面表1中的度量值[指标切换],还是表2中的度量值[值],都会被'指标名称计算组'表中的[Name]列“收入”项所指向的定义表达式(即度量值[收入])所替换,也就是说上面两个度量值最终都被替换成了[收入]
可以将计算项理解为 特殊的自定义函数 ,其输入参数为度量值(取决于该度量值是否受计算组表列的筛选影响),函数的定义即计算项的定义,返回的结果为计算项重新定义后的表达式。而计算组则是一组计算项的集合。
(未完待续....)