水一篇。
有位名字是xx,也的确是xx的同学问了这么一个问题:
以下用示例数据说明。
想要的结果如下(前10名显示,后面的为others):
思路上其实非常简单:通过构建一个新的表,将销售额度量值放进去,排序,前10名用原先的类别,后面的都替换为others,拖到表中排序即可。
其实所有的问题都可以拆解为一步一步地进行设置,然后使用不同的语言来实现这些步骤,PowerBI也不过就是一个工具,重点还是上面的思路,用任何其他编程语言其实都得按照上面的思路进行,这一点我们无法否认。因此,学习编程,本质上是在学习解决问题的思路,是在学习如何将一个复杂问题拆解为一个一个简单的小问题,然后逐个击破。
而无论是在教学上,还是在工作上,生活上,诸多问题也都是这种思路。尤其是这么多年的教学工作,我深深认识到,作为一名教师,给他们传授知识与技能、过程与方法仅仅是皮毛,最核心的应该传授给他们认识问题、分析问题、拆解问题、逐个解决问题的方法论,也就是情感态度与价值观问题。
上面这个问题其实简单,解决也很快速,但是我会分为多篇文章来写,每一篇文章的最后我会放一个图,用该篇文章的办法是做不到的,但是只要再多写几步,就可以完成,大家可以先进行思考,请大家持续关注。
以下是具体步骤:
1.数据表按照子类别显示的销售额排名:
2.抽取子类别为表:
代码语言:javascript复制子类别表 = VALUES(data[子类别])
3.将子类别对应的销售额填上
代码语言:javascript复制sales = [sales]
注意此处[sales]是另一个表的度量值,在DAX圣经中,意大利人特地说明,引用度量值不带表,引用列必须用表。
4.排序:
代码语言:javascript复制sales.rankx = RANKX('子类别表','子类别表'[sales])
注意此处的[sales]是表的列,所以必须带着表名。
5.新的名称:
代码语言:javascript复制子类别2 = IF([sales.rankx]<=10,[子类别],"others")
排序后大于10的都显示为others。
5.上图,按照销售额或者百分比排序:
OK了!基本上满足了小白的要求。
当然,美中不足的是,因为others这一行在中间,看着就有点别扭。按照我个人的习惯,是前10行从大到小排列的子类别,最后一行显示others,如下图所示:
这个问题解决起来也不是很困难,关注【学谦数据运营】,下一篇详细解