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

PowerBI之DAX神功:第1卷第11回 基础表函数之ALLSELECTED

2021-08-10 16:17 作者:孙兴华zz  | 我要投稿

        《The Definitive Guide to DAX》介绍ALLSELECTED是DAX中最复杂的一个函数,但是现在,你就放轻松,在基础使用中,它是一个最简单的函数。复杂的内容会放到第3卷中详细讲解。

讲课之前,我还是那句话:

世界上本没有路,走的人多了便成了路。

DAX本没有原理,公式的推导过程就是原理。

我的学习方法是,只要知道了DAX语法和规则后,自己推导原理。


根据上图,我们做三个度量值,并放到矩阵中:

总捐款 = sum('Sheet1'[捐款])

all表 = Calculate([总捐款],all('Sheet1'))

all姓名班级捐款 = calculate([总捐款],all('Sheet1'[姓名],'Sheet1'[班级],'Sheet1'[捐款])) 

如图所示:

【总捐款】:哪个字段都能筛选

【all表】:哪个字段都无法筛选

【all姓名班级捐款】:姓名、班级、捐款这三个字段无法筛选


现在我们修改度量值后再看一下效果:(我不想保留无意义的度量值)

<1> 将度量值【all表】改成【占比1】

all表 = calculate([总捐款],all('Sheet1'))

占比1 = [总捐款]/calculate([总捐款],all('Sheet1'))

由于我们使用的是ALL(表),【占比1】的分母永远是固定值60

当我们使用「性别」字段做切片器时,【占比1】仍然计算每个人占捐款总和的比例。如下图

如果我们通过切片器,选择男的时候,想看张三、王五占男生的比例

<2> 将度量值【all姓名班级捐款】改成【占比2】

all姓名班级捐款 = calculate([总捐款],all('Sheet1'[姓名],'Sheet1'[班级],'Sheet1'[捐款])) 

占比2 = [总捐款]/calculate([总捐款],all('Sheet1'[姓名],'Sheet1'[班级],'Sheet1'[捐款])) 

占比2 = [总捐款]/calculate([总捐款],ALLEXCEPT('Sheet1','Sheet1'[性别])) 

目的达到了,但是这样不方便,如果我现在将切片器改成班级,这个时候结果错了,如下图

由于占比2已经取消了班级的筛选,现在的占比2结果是张三占男生的比例,李四占女生的比例。

不可能每换一次切片器,我就换一次度量值呀!太不灵活了。

这还不是最大的问题,all('Sheet1'[姓名],'Sheet1'[班级],'Sheet1'[捐款])相当于是对这些列取消筛选,但是【性别】列是可以通过内部与外部筛选的

现在我们需要:内部筛选不生效,但是外部筛选生效(如:切片器)

需要一个函数将切片器写活,今后无论用哪个字段做切片器时,它都能实现每个人对切片器这个字段的占比。

占比2 = [总捐款]/calculate([总捐款],ALLSELECTED('Sheet1')

当我们在切片器上筛选指定字段时,这个字段就会自动取消外部筛选,得到正确的占比。

ALL(表名):永远取那个固定值,谁都不能筛选它。

ALLSELECTED(表):内部筛选全部取消,但外部筛选可以。

        如果,这么简单的数据你听着都很费力,那么你做为一名数据分析人员,当你对自己业务不理解,对自己表不熟悉,根本就无法分析。勿忘初心,一定要把业务学好,软件是次要的。

《DAX神功》视频版同步更新:

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


PowerBI之DAX神功:第1卷第11回 基础表函数之ALLSELECTED的评论 (共 条)

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