Power BI之DAX神功:第4卷第2回 创建基于范围的关系
提到基于范围的关系,第一个应该想到的是分数区间,例如95~100是优秀,0~59是不及格。在工作中,还有很多区间范围,例如最基础的客单价。
有些人问我,为什么你总拿卖菜的举例,这里就有一个最大的问题,如果我是财务,且我现在是给财务讲知识,那我应该用财务知识举例,但我不是财务,且现在我面向所有人,就要用所有人都懂的案例,卖菜、卖水果、开个网店,明显是不需要指定专业的,谁都懂的知识。我4岁就带着儿时的小伙伴,拿着一堆塑料玩具水果在马路边上过家家,小伙伴手里还抱着个洋娃娃。当时我在上幼儿园。
一、区间范围

我想将上面区间表的评价列,V到客户表中,是无法直接做的。
区间表行数比较少,我们只需要通过IF或SWITCH方式来写,你要思考一个问题,新增一个列真的比加入一张表更消耗性能吗? 有这个可能,但不一定。
我们可以通过以下两种方式新建列:详见《孙兴华讲PowerBI火力全开》笔记12.2和12.3
由于IF语句嵌套太多时,容易乱,这时Switch更适合做这样事:

根据《火力全开》第12课讲的知识,我们可以将新建列代码写成下面的样子:
二、回答网友问题
问:中文版《权威指南》第454和455页的案例测试出现问题!
答:别照着抄,这不是学语言。它的案例上一张销售表,一张区间表,这两张表本来就没关系?可能是作者跟你开了一个玩笑,也可能写到这一篇时正好是愚人节,西方人对愚人节很重视的,我小时候在愚人节时告诉同学,老师找你,同学去了办公室,老师问清了情况把我批了一顿,批我的理由:这不是中国人的节日。我大概举例说明一下:

【1】作者先通过Switch函数给客户表增加列(我这里的客户表就好比人家的销售表),新建列函数如下:
返回结果:

【2】将客户表与区间表建立关系。你先别笑:)

【3】再到客户表中新建列
《DAX神功》第1卷第10回 我们讲到,一行一列的表,可以返回标量值,上面的公式:筛选区间表最小金额小于等于客户表消费金额,且区间表最大金额大于客户表消费金额的这张表,用这张表再筛选出对应的标量值。

星爷:怎么样,开不开心,意不意外?哈哈哈哈...
先别抬扛,我知识写成下面的代码也可以:但是你无法通过序号建立两张表的关系,要解决这个问题,我们需要下节课来讲
最终,区间表也导入了,关系有了,新建列也建立了。可能有人会说,这样做有一个好处,因为现在的评价字数比较少,如果字数多,我们先用switch返回1,2,3,4,5,6... 这样好一些。如果你打字速度慢最根本的解决方法是练打字速度,如果你短期无法提升打字速度也有办法:将客户表中的最大那列前N项复制过来,评价那列前N项复制过来。

敲上A列的'客户表'[消费金额]<=,与C和E列的逗号引号,分别选A3:A5、C3:C5、E3:E5,按Ctrl+D向下填充。《孙兴华讲Excel基础篇》都讲过这些最基础的知识。

我们在G列把A到E列都连接起来:

将G3:G5复制到记事本,添加开头和结尾,搞定:

现在,你知道DAX大师跟你开的这个玩笑了吧?不需要哪门知识学到精通,哪怕是皮毛,只要思路对,都可以融汇贯通。人脑容量是有限的,一种东西装满了,自然就要舍弃其它的东西,比如科学家英语数学都好,但是他们没有像我这样天天打游戏、刷剧、无条件免费讲课出来让网络讲师生气的:)科学家将所有时间都放在学习和科研工作上面了。
三、特殊情况

有些小伙伴会说了,如果区间表变成上图样子,Switch函数就不行了。这明显是你的区间表配置不合理。我就想不通,有些坏人做了违法的事情花钱找律师给他辩护,你不违法不行吗?你为什么不从根本上解决问题呢?(律师可能不爱听了,我只是看不贯那些坏人,不是影响你们生意)
例如,我们在客户表新建评价列时,张三消费97元,既符合30~100的区间,又符合80~300的区间,在筛选表时,肯定会出现下图这样的表:除去表头,这是一个2行1列的表,能返回标量值吗?肯定不行

所以遇到这种情况,返回空就可以了,《DAX神功》第1卷第4回 我们讲了IFERROR函数

新建列代码应该改写成:
返回:

又有小伙伴要提问了,因为张三同时满足中和大,不想返回空,想返回:中、大
详见《DAX神功》第1卷第10回 我们讲到了CONCATENATEX函数
返回结果:

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