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

Power BI之DAX神功:第3卷第7回 别以为你会用UNION函数

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

在《孙兴华讲火力全开》中,UNION函数我们只是简单介绍。现在是原理课,我们今天重点讲一下UNION的原理知识。

一、UNION函数最简单的介绍

作用:将多张表连接到一起。(下限最少2张表,上限没试过)

以上三张表不存在任何连线关系

【新建表】合并表 = UNION('表1','表2','表3')

二、当UNION参数都是表时,它要求表的列数和列顺序必需相同

// 第1列找第1列,第2列找第2列,以此类推。参数第1张表的列名决定了合并表的列名。如果你列的顺序不对,合并后内容就错了。

结果:

三、UNION函数对合并结果不去重

// 有SQL基础的朋友要注意,DAX中的UNION与SQL中的UNION是反着的,类似于SQL中UNION ALL的存在

证明:

结果:

【新建表】合并表 = UNION('表1','表2','表3')

四、配合DISTINCT使用对合并表去重

【新建表】合并表 = distinct(UNION('表1','表2','表3'))

// 详见《DAX神功》第1卷第9回 

五、将指定列进行合并

// ALL、VALUES、DISTINCT函数你根据需求使用。三者区别我们已经在之前的课程多反复讲过了。

【新建表】合并表 = UNION(VALUES('表1'[姓名]),VALUES('表2'[名称]),VALUES('表3'[名字]))

六、UNION结果是否具有数据沿袭

<1> 来自相同表、相同名称的列

需求:一班和二班同学,每个人的平均成绩

// UNION函数中所有表都来自相同表、相同列,结果保持了数据沿袭

<2> 更多复杂情况

PS: 此案例出于教学目的,实际工作中你应该将表5和表6合并成一张表

注意:以下三张表没有任何连线关系

【1】合并表来自相同表、相同列,失去数据沿袭时的处理方法

返回结果:

原因:CALCULATE(AVERAGE('表7'[分数])) 来自表7,但是因为表5和表7之间并无连线关系,两个没有关系的表是不存在数据沿袭的。

解决方案:

返回结果:

【2】不同表、相同列与不同表、不同列失去数据沿袭,但有处理方法

<1> 不同表、不同列失去数据沿袭

<2> 不同表、相同列失去数据沿袭

【3】恢复数据沿袭方法一:将指定列应用到筛选器

// 这种方法只限于3个表中都有的列,一般是主键与外键的关系

如果我们使用表5中姓名和表6中name列,真的就不可以实现相同效果了吗?权威指南上面没有举例,但是我们可以通过之前学习的知识实现。方法不只一种,大家可以随意发挥

第一步:新建表   

tb1 = DISTINCT(UNION('表5','表6'))

第二步:tb1与表7进行虚拟连线

// 详见《DAX神功》第2卷第21回

第三步:通过虚拟关系实现不同列名保持数据沿袭

【4】恢复数据沿袭方法二:TREATAS恢复沿袭

七、UNION合并时列名由第1参数决定,数据类型具体情况具体分析

《DAX神功》第1卷第4回 给大家讲过,当一个列中既有数值类型又有文本类型时,它默认使用可以通过用的文本类型。如果都是数值型,优先使用数值型。

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

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

Power BI之DAX神功:第3卷第7回 别以为你会用UNION函数的评论 (共 条)

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