Power BI之DAX神功:第2卷第6回 让RankX的第3参数不再神秘
《孙兴华讲PowerBI火力全开》笔记25课已经提到过RankX的第三参数
那一年我跟大家承诺过,一定会在火力全开的后续版本中给大家讲解。
现在是我们实现承诺的时刻!
有如下表:

需求:60分以下不及格,60~85分以下及格,85~90分以下良好,90分及以上优秀
《DAX神功》第1卷第3回介绍了表构造函数
思路:
【新建表】表 = SelectColumns({0,60,85,90},"范围",[Value])

【度量值】总分=Sum('Sheet1'[分数])
【度量值】找位置 = rankx('表','表'[范围],[总分])

Ps:找位置这个度量值,在{0,60,85,90}这张表中,找到每个分数的位置,并编号

【度量值】
评价 =
switch(TRUE(),
[找位置]=1,"优秀",
[找位置]=2,"良好",
[找位置]=3,"及格",
"不及格")

当然以上步骤是我们思考的过程,我们可以将这些步骤写在一起:

评价2 =
VAR a= sum(Sheet1[分数])
VAR b= rankx({0,60,85,90},[Value],a)
return
switch(TRUE(),
b=1,"优秀",
b=2,"良好",
b=3,"及格",
"不及格")


可能有些小伙伴会有疑问,自定义分段的表我们可以使用表构造函数{}处理
如果我想创建一个表,例如:从0到100,步长为20,需要手写吗?不需要
【新建表】表 2 = GENERATESERIES(0,100,20)

如果需要更换字段名,详见《DAX神功》第1卷第3回
【新建表】表 2 = SelectColumns(GENERATESERIES(0,100,20),"范围",[Value])

《The Definitive Guide to DAX》书中对RankX第三参数解释:(若我翻译不佳请见谅,你们可以参考中文版译者高飞前辈的翻译)
RankX第三参数是标量表达式,作用是:使用不同的表达式分别计算查找表和用于排序的值。
也许是我翻译问题,这句话我第一次看到时,不易理解。
我讲一下我的理解方式,并附证明:
现在我们更换一张有重复姓名的表来分析:

需求:销售90以上优秀,85以上良好,60以上及格,60以下不及格
【度量值】
评价 =
VAR a= sum(Sheet2[销量])
VAR b= rankx({0,60,85,90},[Value],a)
return
switch(TRUE(),
b=1,"优秀",
b=2,"良好",
b=3,"及格",
"不及格")

细心的小伙伴会发现一个问题:孙兴华是不是上节课讲错了?他不是说过RankX不能在矩阵上筛选,这张表中孙兴华有两次销售,分别是51和9,这不就是分组聚合了吗?加在一起是60,正好及格。
接下来,孙兴华给你们证明,他是对的!
很多人会想起上节课的 【度量值】排名2 = RANKX(ALL(Sheet1[商品]),[总销售])
你别忘记,上节课你的行标题上面的商品字段和你排名2中的公式sheet1是一张表(自己表中的字段可以筛选自己的表),如果有多张表,且一对多关系,那么一端也可以筛选多端。
我们再看今天这张表:

【度量值】总销量=Sum(Sheet2[销量])
我们以下面的公式为例,{0,60,85,90} 这张表跟你的Sheet2没有毛关系吧?也没有连线吧?这是我用表构造函数造出来的。
【度量值】等级排名 = rankx({0,60,85,90},[Value],[总销量])
所以,姓名字段是不能筛选{0,60,85,90} 这张表的。
我问你:不能筛选这不就相当于all吗?
我们继续观察,下面两个度量值(第1个度量值是我们上节课用到的)
【度量值】排名2 = RANKX(ALL(Sheet1[商品]),[总销售])
【度量值】等级排名 = RANKX({0,60,85,90},[Value],[总销量])
由于{0,60,85,90}跟我们Sheet2这张表无关,故不能筛选,相当于all函数,且第2参数指定了它的列,就相当于ALL(列)
现在Rankx第三参数的秘密已经不再是秘密了
两个参数时的 RankX(ALL(列),[度量值]) 等价于 RankX(构造表,列,[度量值])

口说无凭,谁指证,谁举证,我来证明:


【度量值】总销售 = sum(Sheet3[销售])
【度量值】排名1 = RANKX(ALL(Sheet3[商品]),[总销售])
【度量值】排名2 = RANKX({3,5,7},[Value],[总销售])


重点:可以聚合度量值的销量、金额、分数等数值,但是不能聚合排名的名次值!2元+5元=7元,1个+2个=3个,第3名+第5名=不会算
关于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等等