经常有人问如何用度量值做切片器,或者如何放在图表的坐标轴上?
基于度量值本身的特点以及可视化的制作逻辑,度量值不可能直接制作切片器,也不能用于图表的坐标轴,
但并非不能实现同样的效果,
本文通过一个例子来再现这个需求,并给出一个变通的解决思路。
下面这个可视化表格,是每个客户及其贡献利润的列表:
如果要对客户做分类,定义利润贡献超过2000元的客户成为“高贡献客户”,1000元到2000元的成为“一般贡献客户”,而低于1000元的为“低贡献客户”。
对这个需求可以这样写个度量值:
客户类型
=
SWITCH(
TRUE(),
[贡献利润]>=2000,"高贡献客户",
[贡献利润]>=1000,"一般贡献客户",
"低贡献客户"
)
结果如下:
这个度量值的逻辑很简单,其结果会返回客户的三个类型。
对于上面的列表,很多人想进一步设计,
把度量值放到切片器里筛选,点击哪个类型,列表中就只显示该类型的数据
,比如点击“高贡献客户”,表格中直接只显示相应的客户信息。
这个需求看起来合情合理,不过度量值本身是个单一值,虽然看起来可以返回三种类型,但这是在不同的上下文环境下实现的,也是由于这个原因,度量值不允许做切片器,只有列字段才能做切片器,那么上述需求是不是无法实现呢?
当然不是,其实稍微变通一下,就可以很简单地实现。
先制作一个客户类型辅助表,如下。
制作方式参考:
Power BI 辅助表制作方式汇总
用辅助表的字段做切片器。
这样就实现了在切片器中显示出度量值返回的三个类型,下面只需要再写个度量值,将切片器与表格联动起来就可以了。
客户类型筛选
=
IF([客户类型]=MAX('客户类型'[类型]),1)
这个度量值的逻辑是,如果某个客户的类型等于切片器所选的类型,返回1。然后将这个度量值放到表格的筛选器中,只显示值为1的数据。
然后切片器就可以与表格动态交互了:
这样就实现了"度量值制作切片器"的效果。
以上是切片器单选的情况,如果
切片器多选
,需要把上面的度量值稍微改一下就可以实现了。
客户类型筛选 =
IF([客户类型] IN VALUES('客户类型'[类型]),1)
另外,还有个常见的需求是,让度量值作为坐标轴,比如利用柱形图来展示每种客户类型有多少客户,如果直接把度量值放到坐标轴上,肯定也是做不到的,坐标轴同样必须是列字段。
其实我们还是可以利用上面的思路,利用辅助表中的类型字段,放到坐标轴上,然后写个度量值,来计算每种类型的客户数量。
客户数量 按类型
=
COUNTROWS(
FILTER('客户',[客户类型]=MAX('客户类型'[类型]))
)
这个度量值的逻辑是,利用FILTER来筛选客户表中,属于当前上下文类型的列表,然后计算这个列表行数,得到当前类型的客户数量。
将这个度量值作为柱形图的值,就可以统计出每个类型的客户数量:
这就是将度量值作为"坐标轴"的效果。
(
更多关于客户类型的计算还可以参考这篇文章:
PowerBI业务分析:客户细分
)
通过上面的例子,就变通实现了度量值作为切片器/坐标轴的效果,希望能为你的可视化设计打开一点思路。
PowerBI星球的最新版内容合辑,值得你收藏学习: