Power BI之DAX神功:第4卷第20回 计算TOP N%与TOPN函数无关
正如标题所示,计算TOP N%与TOPN函数无关,但是与我们上节课的知识密不可分。
需求:销售量在前30%的商品有多少个,分别卖了多少件?
我们还延用上节课的表做案例:这两张表我上节课提供了VBA代码你可以复制运行得到

一、DAX方法计算前N%销售

【1】回忆累积销量怎么写
详见《DAX神功》第1卷第14回
返回结果:

【2】累计百分比
刚才我们写累计销量时,是不是要先有销量呀?累计占比,你是不是要先有占比呀?
返回结果:

我们为了展示结果,所以将占比和累计占比分开写的,实战中写到一个度量值下就可以了,但是你要注意写法:详见《DAX神功》答网友问03
【3】计算前N%销售
先说思路:

为什么要用少量的数据做测试,因为一眼就能看出对错。如果我们需要前70%的商品,结果就是D、E、F,我们找到76.92%这个值,筛选小于这个值的就可了。

现在前N%就可以计算出来了:
返回结果就是:前70%的商品销售

Ps: 如果你想计算前70%的商品数量,将度量值【总销量】改成【总数量】=CountRows('商品表')
二、利用参数写成动态
【1】创建参数表
详见《DAX神功》第2卷第6回:我不习惯用建模中的新建参数,GENERATESERIES和构造表函数已经够我用了
返回表:

放到切片器中:改字段名详见《DAX神功》第1卷第3回

【2】计算前N%的数量
这个公式不用解释,上面我们求的是前N%的销售,现在改成数量,就是改了一个度量值。只不过将0.7写成了SELECTEDVALUE('参数表'[Value])),切片器选的是什么这里就是什么,动态了吧
【3】利用《DAX神功》第4卷第19回的知识写今天的案例
公式解读:
var x : 当我们切片器上筛选前N%时,这里会显示有几个,有几个就等于是前几名?
var tb:对商品表[商品名称]排名,筛选小于等于x的那张表,假设是前5名的表
var z :用这张表(假设是前5名)筛选度量值【总销量】
var y : 计算这张(假设是前5名)的销售合计
return: 如果参数表筛选了且放在矩阵中商品表[商品名称]只有一个值,我们就显示度量值z,否则显示度量值y,否则就是没有筛选时,就显示度量值【总销量】。

《孙兴华讲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等等