前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在矩阵的行上显示“其他”【2】

如何在矩阵的行上显示“其他”【2】

作者头像
陈学谦
发布2021-11-15 16:24:32
1.6K0
发布2021-11-15 16:24:32
举报
文章被收录于专栏:学谦数据运营

继续上面的问题。让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即可。

代码语言:javascript
复制
sales.rankx2 = IF([sales.rankx]<=10,[sales.rankx],11)

然后再应用按列排序,即可达到我们的目的:

注意:按列排序有时会出现循环依赖问题,是因为所要依据的列和原始列直接存在着因果关系。

满足了上面这个要求后,理论上客户还是会提出更高的要求的。比如,当使用切片器时,我选择不同的年份,子类别的排序是不同的,甚至显示的子类别也不相同:

上图我们要特别注意,不论我选择哪一年,others永远是在最后一行,而且上面的10行数据都是按照从大到小的顺序排列

说明:示例中,选择不同年份,总计值的占比不为100%,但这个不是本文要说明的主要问题,所以就没再修改。实际情况中,还是要注意的。

由于我们的数据是直接在表中进行设置的,因此表中的排名是不会随着切片器的选择变动而变化的,因此也就无法实现上面的效果。

那么上面的效果是如何做的呢?请持续关注【学谦数据运营】。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档