欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:答网友问06 RankX多字段分层级的排名问题

2021-09-19 06:57 作者:孙兴华zz  | 我要投稿

一、网友提问全部内容如下:

二、网友的问题是怎么出现的?

1.先看Sheet1这张表的排名(总计if+Hasonevalue组合我不用考虑)

表名:Sheet1

【度量值】总销售1 = SUM(Sheet1[销售1]) 

【度量值】排名1 = RANKX(all(Sheet1[商品名称1]),[总销售1])

通过《DAX神功》第2卷第5回的学习【排名1】这个公式我们应该知道他的工作原理

如果我们的【排名1】写成下面这样,你还知道它的工作原理吗?见下图

【度量值】排名1 = RANKX(all(Sheet1[商品名称1],Sheet1[商品分类1]),[总销售1])

现在我们将【排名1】恢复成原来的样子

【度量值】排名1 = RANKX(all(Sheet1[商品名称1]),[总销售1])

《DAX神功》第2卷第6回最后跟大家总结了:

重点:可以聚合度量值的销量、金额、分数等数值,但是不能聚合排名的名次值!2元+5元=7元,1个+2个=3个,第3名+第5名我不会算

这个时候,大家肯定会有疑问,RankX的排名不是不能在矩阵上筛选聚合名次吗?

我说「商品分类1」没有筛选聚合【排名1】的名次你信吗?

你肯定不信!因为你认为眼睛看到的就是事实,对不对?

《小学二年级语文下册》人教版  第13课《画杨桃》

因为角度不同,你看到的结果就不同!

我证明给你看,「商品分类1」没有筛选聚合【排名1】的名次

我们从行标题上,取消「商品名称1」,这就是真相

它是分组后的重新排名,而不是聚合排名!


你要先知道什么叫做筛选聚合名次,我们才能知道为什么不能这样做:

如上图所示,分类是水果,商品是B,如果不在有其它条件,我可以认为这是一个商品,除非你有其它条件,比如规格(盒装,散装)等。我可以将水果商品B的销量聚合但是无法将名次聚合。

名次怎么办?名次只能重新排名!比如10个人参加运动会,分别获得1~10名的成绩

后来,发现有3个人服用兴奋剂,取消原成绩。剩下的7个人应该按各自的成绩重新排名。

还记得我在《DAX神功》第2卷第5回给大家举的案例吗?当时不能给你灌输分组的概念,我们要循序渐进的讲,当序号放到表或矩阵上面时,相当于重新分组,每种颜色是一组,分了5组,每组只有一个商品,所以排名都是1。

回到我们Sheet1这个案例上来,看看他的工作流程

当我们将报表中的改成矩阵时,就更明显了:

2.再看Sheet2这张表的排名(总计if+Hasonevalue组合我先不考虑)

【度量值】总销售2 = sum(Sheet2[销售2]) 

【度量值】排名2 = RANKX(all(Sheet2[商品名称2]),[总销售2])


网友疑惑的原因:为什么将产地字段放到行标题上就错误了?

我说它没错,你信吗?我画出它的工作流程:

在第4步上你可以看到,家电和日用品被分为两组(每种颜色是一组),第5步我再通过产地继续分组(每种颜色是一组),北京洗衣机是家电里面的第1名,北京彩电是家电里的第2名。

上海家电就一个冰箱所以是第1名,南京,天津,武汉都是在日用品里都只有一个商品,所以都是它们自己那个组的第1名。

我们通过两个证明,来验证我说的话:

证明1:如果我将Sheet2改成下面这样

因为日用品和南京是一组,家电和北京是一组,在各自的组里进行排名

证明2:如果我将Sheet2改成下面这样

下面每种颜色是一组:

三、如何解决网友的问题

你先回答我,你想要什么结果?这个很重要?这是业务!

如果您的产地只是显示,不参与排名,只是以「商品分类2」来分组,换句话说,就是只分第一次组,第二次不分组

这个过程说人话,就是移除「产地」的筛选功能

KeepFilters(列)是指定列恢复筛选

ALL(列)是指定列取消筛选

【度量值】排名2 = RANKX(all(Sheet2[商品名称2],Sheet2[产地]),[总销售2]) 

你没看错,就这么简单!

但是方法不止一种,还有一种方法:

《孙兴华讲PowerBI火力全开》笔记28.1 REMOVEFILTERS 清除筛选

REMOVEFILTERS与USERELATIONSHIP和CROSSFILTER一样,都是Calculate的调节器,本身不返回值。

【度量值】排名3 = RANKX(all(Sheet2[商品名称2]),calculate([总销售2], REMOVEFILTERS(Sheet2[产地]))) 

【排名2】与【排名3】是等价公式

REMOVEFILTERS 是 ALL 函数青春版(缩水版或乞丐版),但它只能用作 CALCULATE 调节器,起到移除筛选器的作用,不能像 ALL 那样多才多艺。

ALL 函数的有两种不同的用法,表函数和CALCULATE调节器,但是公式复杂了以后,你就不好辨认了。为了公式易读性更强,你可以在移除筛选器的时使用REMOVEFILTERS,仅此而已。

RankX函数还没有结束,下节课更精彩!

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110

Power BI之DAX神功:答网友问06 RankX多字段分层级的排名问题的评论 (共 条)

分享到微博请遵守国家法律