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

Power BI之DAX神功:第4卷第19回 利用TOPN函数将前N名分成一组及图表动态显示

2021-12-28 14:47 作者:孙兴华zz  | 我要投稿

一、课件准备

将下面的VBA代码复制到Excel VBE编译器的模块中运行

得到下面的两张表:

二、利用TOPN将前N名分成一组

我想得到下表这张表的结果:

【1】我要先取到销量前3名的表

通过下面的代码我们就可以获取到上图红框内的数据

【2】我们要给销售前3名的数据排名

通过下面代码我们就可以获得上图红框之内的数据

【3】计算其它

其实就相当于在整张表中,去掉前3名的表,就是其它的表

就是我们在数据库中讲的左外挖空:A相当于全部的表,B相当于前3名的表

而在我们上面的代码中,tb1就是A表,tb2就是B表

详见《DAX神功》第3卷第8回 EXCEPT函数

通过上面的代码,我们就可以获得到下图绿框之内的数据:

因为其它我们只需要一个总和销售:8+10+12=30

这个时候我们可以制作一张表:如下图

详见《DAX神功》第1卷第3回 表构造函数

因为你前面提到了前3名和其它,那其它必然是4,因为UNION连接表时要求,两张表的列数要相等,所以这里表构造函数要与前3名的表排名后的列数一致。

【4】最后将两张表合并

因为这两张表不会出现重复行,所以不必考虑去重问题,但是在其它情况下使用UNION时要考虑重复行问题。

返回结果:

三、最简单的静态图表

我们想一下,第一次在Excel中做图,我们是怎么做的?我们是不是准备好下面这张表,然后去做图?

那刚才我们做好了这张表,直接做图不就好了吗?

四、动态图表显示

【1】新建一张表,包含所有商品名称和其它

因为商品表中没有其它,所以我们要重构一张新的商品表,但是我们不能让新的商品表与商品表连线,这样会出现循环依赖。所以我们取商品编码和商品名称,让新的商品表与销售表连线。

【2】新表与其它表不要建立关系

我们学习了数据沿袭,这里关系越少越好,多一条关系你就多一种考虑。比如你突然来到一个新单位,你看到张三什么都不干,就在那玩,然后你跟到老板办公室说:老板张三什么都不干,就在那玩。老板说:出去!

你知道张三与老板什么关系?所以说下面的线越多,你要考虑的问题就越多。

【3】开始测试

//将下面的度量值【测试】放到矩阵上, 如果新表[商品名称]在矩阵上只有一个值,就显示孙兴华,否则显示颖宝。

返回结果:我们平时经常处理让总计为空,今天让总计变成"颖宝"。

【4】先解决总计问题

无论第1名和其它,还是第N名和其它,那总计永远是总值,不会因筛选而发生发变。所以度量值如下:

现在修改度量值【测试】

第一个问题解决了:

【5】处理商品名称-其它

当商品名称="其它"时,我们返回"热巴",否则返回"孙兴华"

热巴=[销量合计]-[前3名销量]  // 78-48=30

返回结果:

【6】最后处理前3名的问题

我们暂时将这个度量值命名为:孙兴华

原理:新表的商品名称列商品表商品名称列做标记,更改了数据沿袭。筛选这张表中RANKX排名小于等于3的(就是前3名)

修改度量值【测试】

返回结果:

也可以将它改成图表:

【7】将N写成动态

首先我们要将测试所用到的度量值都写到一起

上面的公式中出现了两次3,我们将3写成参数就好了

我们将参数表中的Value字段放到切片器上即可

Ps: 给参数表改表头详见《DAX神功》第1卷第3回,也可以使用建模中的新建参数按钮,我个人不喜欢用。

【8】解决小问题

当我们没有选择切片器参数时,只显示其它,我们想在没有筛选时显示ABCDEF不显示其它

原理:当参数[Value]被筛选时,显示什么,否则显示什么?我们使用变量K来代替否则返回的值。搞定!

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

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

Power BI之DAX神功:第4卷第19回 利用TOPN函数将前N名分成一组及图表动态显示的评论 (共 条)

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