Power BI之DAX神功:第4卷第18回 TopN函数初体验
《DAX神功》第2卷第5回至第9回 我们详细讲解了RANKX函数,那RANKX和TOPN函数的区别是什么?
一、RANKX函数与TOPN函数的区别
RANKX函数的工作:世界杯四强球队排名是:第1名、第2名、第3名、第4名
TOPN函数的工作:给我世界杯四强的名单:A队、B队、C队、D队(谁是第1不知道)


【1】RANKX函数:是迭代函数

【2】TOPN函数:是表函数
语法:TOPN(前几名,对哪张表排序,用来排序的度量值或表达式,默认降序/ASC升序)
Ps: 第3参数和第4参数可以循环使用
它的计算顺序非常简单:

返回结果:

TOPN返回的表是第2参数所有列,如果你想选择需要的列,可以使用all、values、distinct、summarize等函数实现
返回结果:

二、TOPN第四参数千万别误会
默认是降序,这里的升序和降序,与返回表无关,它指的是分配度量值之后取最大值(降序)的前2名还是最小值(升序)的前2名。当我们使用ASC时返回如下:

返回表的顺序:源表什么顺序,返回表就是什么顺序。ORDER BY在DAX中只能用在查询语句中,如果我想实现下表的样子:

我们将新建表公式写成这样:详见《DAX神功》第4卷第16回
如果我们要计算前2名的销量(方法有很多种),可以写成这样:
返回结果:

三、TOPN附加排序规则

我们将销售表的【销量】稍做修改,再去运行TOPN新建表代码:
因为A和B并列第2,所以这里所谓的前2名,就是第1名和并列第2名,一共3个商品

那么土豆和茄子我只保留其一,是可以使用TOPN多列排序,不会出错。《权威指南》上有这样一句话:TOPN总是在有相同值的情况下返回多行。你来回答我,表格中哪个列没有相同值?主键列!只要这张表有主键,你使用多列排序就不会出错。
计算过程:

返回结果:返回表的排序问题你就不用管了,因为TOPN返回一个集合,你就当他没顺序吧。

为什么要这样做,你一定要清楚!例如:张三销售200万元,李四销售150万元,王五销售150万元,如果你不去掉李四和王五的一个人,你告诉领导:前2名销售金额累计500万元,第1名销售200万元,领导说哪里来的文盲?你可以去办辞职手续了。
还没被辞退的小伙伴们,更多TOPN知识,我们下节课再说!

《孙兴华讲PowerBI火力全开》PowerBI必学课程
https://www.bilibili.com/video/BV1qa4y1H7wp
《DAX神功》文字版合集:
https://www.bilibili.com/read/readlist/rl442274
《DAX神功》视频版合集:
https://www.bilibili.com/video/BV1YE411E7p3
《DAX神功番外篇》文字版合集:
https://www.bilibili.com/read/readlist/rl478271
PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等