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

PowerBI之DAX神功:答网友问01.ALLEXCEPT函数应用

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

很多网友,咨询PowerBI我并没有回复,这里有两个原因:

1.关于图表的问题:我工作中基本不做图,只分析结果,领导不好糊弄,你云叔和化腾哥哥应该也是有着相同的爱好。这方面我个人水平有限帮不到你。

2.关于业务的问题:隔行如隔山,你的表通过学习也许我能看懂,但是需要花费时间去理解你的业务,凡是10分钟我不能理解的表,我就不去研究他了。即便你是某知名互联网公司花重金请的财务总监,现在让你去做刑侦分析,跟换个小学生去没有区别,结果就是什么都看不懂呗。

我在视频中使用的表都非常简单,我讲什么就用什么表,方便大家理解具体知识点,你如果哪里不会,问哪里就好了,但是将你复杂的模型发过来,我浪费时间去研究不值得,我研究出来做视频也没有太多人愿意看,他们会觉得具体业务与自己无关且不易理解。也许在互联网上,有一些讲师能帮到你,因为你们职业对口,例如都是财务业务自然就是互通的。

凡是,提问者将问题转换成小学生能听懂的语言(小学生无法解决问题,但是通过你的讲解他们能看懂你的表),我都会尽力帮助你。当你无法转化语言时,你的问题可能不是来自计算机软件上面,而是你的业务不熟练。

为什么罗老师讲法,大家都爱听?再换个其它人给你讲,也许你就睡着了。语言表达能力很重要。

提问粉丝:**雨雪

提问时间:2021年8月7日

以上内容,是粉丝真实提问,并不是我从国外哪个网站上看到个案例在里这讲。

在讲课之前,我还是要重申那句话:

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

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


网友发过来的表格,已经是人为精简过,小学生都能看懂的数据了。不过,我又在这个基础上精简了记录数,目的是可以实现口算,判断对错。如下图所示:

用户需求:每天按类别的销售数量求占比

我们新建一个度量值,并将它放在表上:

(因为矩阵不能并列放两个行标题进行筛选)

总销售 = sum('Sheet1'[销售])

这个度量值所有的字段都可以筛选它

我们再做一个度量值:

all表 = calculate([总销售],all('Sheet1'))

这个度量值所有的字段都不能筛选它

现在你可能会想,我问的是ALLEXCEPT,你给我讲ALL干什么?记得电视剧《大宅门》,白景琦与女儿白佳莉的对话吗?白佳莉说中医过时了,战场上救死扶伤要依靠西医,白景琦说西医治标不治本,你们就会哪疼治哪!白佳莉反问道:难到脑袋疼还治脚吗?白景琦说对啦,有的时候脑袋疼就需要治脚。

《DAX神功》中西医结合

问ALLEXCEPT函数,需要理解ALL,只要理解了ALL函数,ALLEXCEPT函数秒懂,如果不懂ALL函数,那么ALLEXCEPT函数学了也没用。头痛有的时候还真的是治脚。

现在我们使用ALL(列)

all日期 = CALCULATE([总销售],all(Sheet1[日期]))

只有日期不能筛选,但是其它字段可以筛选

仔细观察,当类别可以筛选时,红25,黄45,蓝30

【总销售】是可以被所有字段筛选,现在我们将日期放到筛选行上

由于使用了all(日期)取消了对日期字段的筛选,只有类别字段可以筛选它,现在两个度量值相除可以求占比了。

因为你现在用的不是矩阵,是表,所以这里会有一个误区,当你将表换成矩阵时,值也可以做行标题。如下图:

这时你会发现,销售仍然可以筛选 all(日期)

如果,我不想让取消销售的筛选功能:

all销售 = CALCULATE([总销售],all(Sheet1[销售]))

如果我想看每个类别,每日的销售占比,我应该只让类别进行筛选,取消其它列的筛选:

all销售和日期 = CALCULATE([总销售],all(Sheet1[销售],Sheet1[日期]))

由于本案例只有3个列,以后列多了,怎么办?

ALLEXCEPT = CALCULATE([总销售],ALLEXCEPT('Sheet1',Sheet1[类别]))


现在你再去算占比,就达到了要求,每天按类别的销售数量占比。其实这些知识我在《DAX神功》第8课都讲了,只是讲的不是你现在的表格。

所以,数学是多么的重要?

《The Definitive Guide to DAX》这本书大家都能买得起,可是不运用数学的逻辑思维,大家真的能理解吗?

为什么孙兴华在2020年不讲原理?因为DAX没有原理,公式的推导过程才是原理。

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

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


PowerBI之DAX神功:答网友问01.ALLEXCEPT函数应用的评论 (共 条)

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