随着学习PBI的深入 ,各种操作技能也都逐渐被掌握,那么指标的动态化是必然会去尝试的一件事情。
就像这样:
老板想看撒就看撒,不用在不同的页面间切换来切换去的,在一页报告就可以搞定,是非常高效的,也是衡量你的PBI水平的一项重要指标吧!几乎可以说,这是你从小白,到入门的必经之路。
简要介绍一下制作过程:
首先,需要建立一张中间表,可以通过“输入数据”,和建模tab里的“新建表” 实现
该表需要包含需要转换的指标名称
其次,写一个动态指标切换的度量值
指标动态切换 = SWITCH(TRUE(),
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售额",
[KPI1.销售额],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润",
[KPI2.利润],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售数量",
[KPI4.销售数量],
[KPI1.销售额]
)
简单解释一下,当选择销售额时,则显示销售额,选择利润,则显示利润,选择销售数量则显示销售数量,什么都不选的时候,默认显示销售额。
直接应用这个动态切换的度量值,再配合“指标名称”的切换器,就可以完成度量值的自由切换了。
有2个细节:
1个是切片器中选择项目的排序问题,可以使用按列排序,来进行定义
第2个是图表的标题切换,也可以使用度量值,进行自定义的设置
动态标题 =
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])
随着你经验的增加,可能会考虑增加几个指标的切换,那也没问题,直接在指标名称和指标动态切换里做相应的修改就可以了。
很自然的,我们会把有关比率的指标,如利润率,客户转换率也放进来。
**比率类的指标一般设置为百分比的格式 这也是很简单的,只要依葫芦画瓢就可以了。
step1 增加利润率的选项
setp2 修改度量值,增加利润率
指标动态切换 = SWITCH(TRUE(),
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售额",
[KPI1.销售额],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润",
[KPI2.利润],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售数量",
[KPI4.销售数量],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润率",
[KPI3.毛利率],
[KPI1.销售额]
)
这样就完成了,可是我们看到的是这样的。
没事,这应该是数据的类型没有设置好,也很简单。把数据类型设置成百分比就可以了,这时问题就来了!
这个指标动态选择度量值,既包含了销售额,销售数量,和利润率,这时应该如何设置呢?不管了,还是先来尝试一下吧~
尝试1,将利润率指标,设置成百分比格式,然而,并没有什么用!
尝试2,将动态指标设置成百分比,
那就会把销售额等其他指标也一同设置为百分比格式,这显然不是我们想要的。
一种无力感瞬间传遍全身...
尝试3,使用Format函数将利润率包裹起来,强行转换成百分比格式。
SELECTEDVALUE(
'指标名称表'[请选择需要查看的指标])="利润率",
FORMAT([KPI3.毛利率],"0.00%")
结果是这样的!利润率显示不了!
使用format的percent形式呢?
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润率",
FORMAT([KPI3.毛利率],"percent")
结果还是一样的.
......
wow!
这是什么鬼,这是可能已经真正感觉到很无助了!
怎么办呢?有一个变通的办法,可以把利润率X100来显示,
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润率",
[KPI3.毛利率]*100
这也是没有办法啊? 老板,您就将就着看吧!只要不是太弱智,都能看得懂的!
这一定是个bug!期待微软下次更新吧!那这背后到底是什么情况呢,有解决的方案嘛?其实,这个问题到目前为止,真的是无解的,这涉及到DAX中关于数据类型的一些基本原理。
来揭晓答案吧
指标动态切换 = SWITCH(TRUE(),
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售额",
[KPI1.销售额],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润",
[KPI2.利润],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="销售数量",
[KPI4.销售数量],
SELECTEDVALUE('指标名称表'[请选择需要查看的指标])="利润率",
[KPI3.毛利率],
[KPI1.销售额]
)
当这样写的时候,该度量值可以被设置成,数值(小数,百分比,或者整数类型)
当然这取决于我们调用度量值的属性。当使用FORMAT函数,强行转换为百分比格式的时候,只是看着是百分比格式而已,其实已经format函数转换以后,值已经被强行转成文本格式。
来看看format 函数的官方说明
FORMAT(<value>, <format_string>)
看到这个说明,估计你已经明白一多半了,没错,公式说明的最后是以string 结尾的,这就说明format 函数返回的是一个文本类型的值
很自然的,文本类型的值,当然无法以图形的形式展现了!还有一个重要的细节,很容易被大家所忽视,请思考一下,这时该度量值中,既包含了销售额的数值类型,又包含了经过format 函数转换后的文本类型的值,那这个度量值现在是什么类型的呢?
这是一个比较容易被忽视的细节,当有2种以上数据类型时,这个类型就变成了“变体”。说白了就是不确定,当你需要他是男的时候,他就是男的,当你需要她是女的时候,她就是女的,突然想到在量子力学领域很有名的一个定理:
薛定谔的猫
和这只既生又死的猫一样,当没有被选择的时候,就处于这样一个既是数值,又是文本的状态。随着我们去调用他,就会按照需要来改变其格式。
有点跑题了,这么说是方便大家更好的理解这个概念!那照这么说的话,这么简单的功能,就真的没有办法了嘛?看起来是这样的,在一个图形里是没法实现的,所以之前把值乘以100,来显示几乎是个比较好的变通方案了。
还有一个可行的方案是,使用表或矩阵来实现
在表里,可以被很好的实现。利润率的”%“显示的好好的!目前为止,这是比较可行的2个方案,如果大家有更好的解决方案,欢迎沟通交流!
总结:
这样一个看着很不起眼的设置,其实背后,蕴含着大量信息,值得我们去思考。
这个设置的难点在于百分比格式只是小数类型的一种而已,与千分位格式设置一起,PBI只提供了菜单界面的设置,而DAX本身除了Format以外的函数,并没有函数可以提供这样一种设置。期望在以后的更新中会有解决的方案。