Power BI之DAX神功:第4卷第10回 选择正确的关系类型
一、我不会坑你更不会误导你
我只是喜欢超越自己,如果110米跨栏只有我一个人,我跑半小时也是第一;当其它运动员出现才叫竞技体育,我要感谢所有DAX和M函数的有偿讲师,在他们的帮助和建议下,我不断的超越自己,完善课程。我既不坑你也不误导你,我一直向你们主张,在学习初期要做到以下几点:
规范数据类型
使用一对多的表关系
表格能用一张就不用两张,能用两张就不用三张,四张含以上不是大神就是笑话。
新人能用新建列处理的问题尽量选择新建列
能通过数据清洗或是SQL缩小范围获取数据尽量将数据范围缩小
因为你是初学者,你要把自己当成是首都医科大学大一的新生,而不是把自己当成一个医学院士。你只有先把结果做正确,才能进阶!就像开车一样,你要先保证安全,才能做赛车手。 不是所有的司机都是赛车手,不是所有使用PowerBI的人都是数据分析师、BI总监;如果各方面都以专业水平要求一个人,前无古人后无来者没有人能够及格。你选择学习就是要这个成长过程。
二、在一对多关系中物理关系与虚拟关系哪个更方便?
从《DAX神功》第4卷第1回~第4卷第9回,我们从物理关系讲到虚拟关系,它们的目的是一样的,都是将筛选器从一张表转移到另一张表。
物理关系:通过新建列、新建表,所见即所得。就好比夫妻领了结婚证。
虚拟关系:只存在于DAX公式中。就好比演员中的夫妻,只存在于这部戏里,一个公式就是一部戏!张三、李四、王五都是演员。因为剧情需要结为戏中的夫妻,在A剧中张三与李四结婚了,在B剧中张三与王五结婚了,不同的电视剧要根据需要拍不同的结婚镜头。
如果你选择虚拟关系,多个公式,你就要分别在每个公式中建立关系,可你不是在演戏,试想一下当你建立了30个公式时,突然产品经理改需求了,你要改30个公式。当你使用物理关系时,你只改一次关系。
《权威指南》和《DAX神功》共同建议:物理关系更易管理,不易出错。
三、在1对多关系中物理关系与虚拟关系哪个速度快?
物理关系使用储存引擎,虚拟关系使用公式引擎。物理关系更快一些,从两方面体现:
1. 缓存
【1】储存引擎VeriPaq模式扫描表格后生成缓存
VeriPaq导入表:将缓存保存到内存中,数据源刷新时缓存也随之被刷新。
DirectQuery链接表:以查询的方式随时从数据源(例如SQL Server服务器)获取数据,不创建缓存。
【2】公式引擎向储存引擎发出请求,读取由储存引擎创建的缓存
总结:公式引擎相当于每次从数据源中重新查询,或是读取储存引擎创建的缓存。
孙兴华:创造成了PowerQuery M函数总结,每次使用时直接搜索,速度非常快。
张三:没有M函数总结,每次使用时,来找孙兴华的M函数总结后查找相关函数,或者直接在官网上找M函数。
那你说孙兴华和张三,谁更快?
2.内核与线程
CPU的内核数量在表没有被分段时是体现不出来的,PowerBI每100万行分段一次,以AMD2200G为例,四核CPU,假设有400万行数据,四个内核都去一个查询里打工,但是如果我只有90万行数据,那只有一个内核跑出来打工,其它三个内核宅在家里。请注意:存储引擎才能使用多内核。

一定有人会问,Excel只有104万行,那你就是坐井观天了,TXT、CSV保存2G以上容量的太多了,我经常用Pandas来处理这些大数据,Access也能保存2G以内的文件。
再说线程:AMD2200G,4核4线程,4核代表4个内核,4线程用通俗的语言解释:同一时间通过4条线路完成工作。好比做饭,单线程就是干完一件事再做另一件事,假设你炖牛肉2个小时,炖排骨2个小时,羊蝎子2个小时,酱肘子2小时,你做这四样总计用时2+2+2+2=8小时,如果是四线程,他会同时进行,2小时四件事都搞定。(我这是给非专业人员举例,你不要用专业术语抬扛)
但是,公式引擎是单核单线程,无论你的CPU是几核几线程,公式引擎都是一件事一件画的做,且表格越大速度差距越大,因为他只有一个核心一个线程参加工作。公式引擎每次按顺序向储存引擎发出查询请求,每次执行一个查询。
总结:物理关系使用储存引擎,虚拟关系使用公式引擎,因为储存引擎比公式引擎快,所以物理关系快于虚拟关系。
《权威指南》和《DAX神功》共同建议:物理关系更快
四、多对多关系
《权威指南》:更推荐于双向筛选关系,次之扩展表/沿袭。
《DAX神功》:均不推荐,除非避无可避,否则尽量避开。
五、综合推荐
《权威指南》:优先物理关系,次之双向筛选关系、多对多扩展表/沿袭和弱关系,最后虚拟关系
《DAX神功》:优先物理关系,次之虚拟关系,最后多对多扩展表、双向筛选关系、弱关系
权威指南站在性能角度,DAX神功站在安全角度。

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