继续上面的问题。让10名之后的子类别只显示在others里面:
这个显示结果虽然达到了基础的目的,但并不是很理想。很明显,我们想的是让others在最后一行:
这样,前10名是放在一起的,others放在最后一行。真实的业务场景往往就是如此,我们只关心前10名的情况,前10行就给我老老实实地放这10个类别,剩下的放在最后一行,对于others,我关心的只是份额,甚至我一点也不关心,因为加在一起都不足10%。(由此,我们可以想这么一个问题,排名最后的几个类别,如果合在一起占比不足10%,则直接显示为others,剩余的类别直接显示类别名,也就是直接显示类别名的数量是动态变化的。)
这就意味着我们并不是按照sales进行排序,因为按照sales排序,others应该显示在第6行,这显然跟第一张图相同了。
要注意,这三列看上去并没有排序。但是本质上还是排序了,因为默认排序就是按照第一列的名称进行的。而按照表中的列进行排序,我们完全可以使用“按列排序”的办法来实现按照其他列来排序,所以这个时候选择子类别2,进行“按列排序”,我们选择表中的sales.rankx,这样就用sales.rankx的大小来表示子类别的显示,颇有点偷天换日的感觉,“按列排序”也是真实业务场景中运用非常广泛的技巧:
结果显示:
因为对于子类别2中的others而言,对应着多个rankx值,因此不能实现按列排序:
那么解决办法是:让others对应的rankx值相同。
写法很简单,跟子类别2一样,只要让大于10的rankx都显示为11即可。
sales.rankx2 = IF([sales.rankx]<=10,[sales.rankx],11)
然后再应用按列排序,即可达到我们的目的:
注意:按列排序有时会出现循环依赖问题,是因为所要依据的列和原始列直接存在着因果关系。
满足了上面这个要求后,理论上客户还是会提出更高的要求的。比如,当使用切片器时,我选择不同的年份,子类别的排序是不同的,甚至显示的子类别也不相同:
上图我们要特别注意,不论我选择哪一年,others永远是在最后一行,而且上面的10行数据都是按照从大到小的顺序排列。
说明:示例中,选择不同年份,总计值的占比不为100%,但这个不是本文要说明的主要问题,所以就没再修改。实际情况中,还是要注意的。
由于我们的数据是直接在表中进行设置的,因此表中的排名是不会随着切片器的选择变动而变化的,因此也就无法实现上面的效果。
那么上面的效果是如何做的呢?请持续关注【学谦数据运营】。
本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!