按照惯例,先上链接:
往期推荐
如何在矩阵的行上显示“其他”【1】
如何在矩阵的行上显示“其他”【2】
如何在矩阵的行上显示“其他”【3】切片器动态筛选的猫腻
引子
正常情况下,我们所见的表或者矩阵,都是这样的(销售额是度量值):
子类别是列,销售额是度量值聚合sum求和,子类别不会有重复值。
没什么特别的,因为但凡使用过Power BI两次以上的,都习以为常了。
所以,如果你看到下面这个矩阵,你是否会感到意外?
注意,后面两列都是度量值。理论上不会同时显示两个名称为“器具”的行,也不会同时出现三把“椅子”,且对应着不同的聚合值。
除非。。。这三个“椅子”,根本不是同一把“椅子”。
那么问题来了,如何让多个不同的“椅子”看上去是同一把“椅子”呢?
椅子
椅子
椅子
请问上面三行的椅子是相同的吗?
看上去的确是相同的。
但是如果你选中上面的三行的椅子,你就会发现:
三行的椅子是不同的,第二行椅子后多了3个空格,第三行椅子后多了5个空格。也就是说,如果给这三行的椅子都打上引号,那么它们分别是:
“椅子”
“椅子 ”
“椅子 ”
也就是说,上面的表中,三个椅子,三个器具都是加上了不同数量的空格,即它们并不是看上去那样完全相同,而是完全不同的子类别。
然而Power BI的表和矩阵在显示的时候,默认会将文本前后的空格忽略掉,也就是上图所展示的,呈现效果完全一样。
正文开始
上一篇文章中我们已经实现了这个效果:
当年度切片器变换筛选时,子类别中显示的种类和顺序是不相同的,但不变的是:
- ①others永远显示在最后一行
- ②显示的10个子类别按照sales或sales%从高到低排序
但是我们不想子类别的前面带有年度的显示,那么我们就可以使用“引子”中介绍的方法,通过添加空格的方式来实现不同年份的同一个子类别名称是不相同的:
代码语言:javascript复制子类别3 =
SWITCH(
[年度],
2016," ",//1个空格
2017," ",//2个空格
2018," ",//3个空格
2019," "//4个空格
)&[子类别2]
历史数据中只有2016-2019年,我们可以在不同的年份对应的子类别上分别加上不同数量的空格,这样,在[子类别3]这一列中,就不会有重复值了,也就是说在对[子类别3]进行“按列排序”选择[sales.oneyear.rankx2]列时,就不会出现错误了。
最终呈图:
完美解决!
说是很完美,但是,完不完美只有我自己知道。
比如,年度切片器如果不选或者多选的时候,就露馅了,完全不觉明历:
为避免露馅,只能设置为单选:
但这样一来,就没法查看所有年度的总数据排名了,略有瑕疵。
后记
以上的办法有点取巧了,也过于麻烦了。不过没办法,有时候想要实现某个功能,只能采取一些非常手段。
原本这个问题可以使用度量值来解决,但是度量值要实现的必要条件是在矩阵上额外添加一列排序:
(来源:阿伟,固定城市分组配色。报告非常棒,值得学习。
https://app.powerbi.com/view?r=eyJrIjoiZTY1ZGU2ZjAtN2QwZS00MWIzLWE2YWMtYTAyMzA0YzdhYTc1IiwidCI6ImZkZGRjNjEyLWYxMjUtNGI2YS04MDAyLWZlZTdlY2IyNzE4NSIsImMiOjF9)
但是,这可能会产生一些自己并不想要的结果,比如上面画圈的两个位置。
如果处理的比较好,甚至可以将这一列给“隐藏”掉:
(来源:夕枫,多维度动态帕累托分析,优质报告,非常值得学习。
https://app.powerbi.com/view?r=eyJrIjoiOWI1YmQzNWQtNzE1NS00NmE3LWE1ODQtNmEzY2MxN2Q4MmE2IiwidCI6ImUzYjQyNWIwLTNmMTAtNDE1Yy1iYWE3LTEzMmRmNGY3Yjk2NCJ9)
正如我在这篇文章中所采用的思想:
Power BI巧用“空白度量值”,解决诸多复杂的问题
将某一列的宽度缩小到最小,可以实现假装“隐藏”,仿佛这一列不存在一样:
但是,一定不能让报告使用者点击其他列排序,因为一旦点击了其他列的排序,就回不去了,因为真正的排序列被“隐藏”了。所以,作者巧妙地将原列名“隐藏”掉,改用带着文本的按钮来显示标题:
这思想着实很厉害了,值得学习。
这就是我说的“看得见”与“看不见”——看上去看不见但还是能看得见。
题外话:最近写的文章,不是为了比较谁的方法的优劣,也不是为了抢谁的生意。纯粹是为了探讨,而在探讨的过程中,我也的确学习到了不少厉害的人(比如上面两位)的报告的优点。希望大家也是。千万不能目中无人,藐视一切,钱赚多了,心眼却跟着变小。
最后放一张图:
根据上面的思路,可以实现动态显示TopN,其他为others。可以选择任意列进行排序:
报告链接:https://app.powerbi.cn/view?r=eyJrIjoiOGZiNDExNDUtZjcyMi00NTkzLWEyYTktZGIzMDYyYmVmYWFjIiwidCI6IjE2ZWNmNzE1LTFhNTgtNDJkNi1iODU0LWJkZmE5NmI1YzI4MyJ9&pageName=ReportSection80382258b4884005d3c2
END