Join
join 前缀可连接加载的表格和现有已命名的表格或最近创建的数据表。
联接数据的效果是通过一组额外的字段或属性扩展目标表,即目标表中不存在的字段或特性。源数据集和目标表之间的任何公共字段名都用于确定如何关联新的传入记录。这通常被称为“自然联接”。根据联接关联的唯一性和使用的联接类型,Qlik 联接操作可能导致生成的目标表具有比开始时更多或更少的记录。
有四种类型的联接:
左侧联接
左联接是最常见的联接类型。例如,如果您有一个事务数据集,并希望将其与参考数据集组合,则通常会使用 Left Join。首先加载事务表,然后加载引用数据集,同时通过 Left Join 前缀将其连接到已加载的事务表。Left Join 将保持所有交易的原样,并添加找到匹配项的补充参考数据字段。
内部联接
当您有两个数据集,其中您只关心存在匹配关联的任何结果时,请考虑使用 Inner Join。如果未找到匹配项,这将从加载的源数据和目标表中删除所有记录。因此,这可能会使目标表中的记录比连接操作发生之前更少。
外部联接
当您需要同时保留目标记录和所有传入记录时,请使用 Outer Join。如果未找到匹配项,则仍保留每组记录,而连接另一侧的字段将保持未填充(空)。
如果省略类型关键字,则默认联接类型为外部联接。
右侧联接
此联接类型保留所有将要加载的记录,同时将联接所针对的表中的记录减少到只有传入记录中存在关联匹配的记录。这是一种利基联接类型,有时用于将已预加载的记录表缩减为所需子集。
语法:
[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )
参数 | 说明 |
---|---|
tablename | 可以将命名的表格与加载的表格进行比较。 |
loadstatement或 selectstatement | LOAD 或 SELECT 语句适用于加载的表格。 |
这些主题可以帮助您使用此函数:
主题 | 说明 |
---|---|
使用 Join 和 Keep 合并表格 中合并表格 | 本主题进一步解释了“连接”和“保留”数据集的概念。 |
Keep | Keep 加载前缀类似于 Join 前缀,但它不组合源数据集和目标数据集。相反,它根据所采用的操作类型(内部、外部、左侧或右侧)修剪每个数据集。 |
示例 1 - 左联接:使用参考数据集丰富目标表
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
表示更改记录的数据集,该数据集加载到名为 Changes 的表中。它包括一个状态 ID 关键字段。
-
表示变更状态的第二数据集,通过将其与左 Join加载前缀连接来加载并与原始变更记录组合。
此左联接确保更改记录保持完整,同时添加状态属性,其中根据公共状态 ID 找到传入状态记录中的匹配项。
加载脚本
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Status:
Left Join (Changes)
Load * inline [
Status ID Status Sub Status
1 Open Not Started
2 Open Started
3 Closed Completed
4 Closed Cancelled
5 Closed Obsolete
] (delimiter is '\t');
结果
打开数据模型查看器,并记录数据模型的形状。仅存在一个非规范化表。它是所有原始变更记录的组合,匹配的状态属性连接到每个变更记录上。
更改 |
---|
更改 ID |
状态 ID |
计划的开始日期 |
计划的结束日期 |
业务影响 |
状态 |
子状态 |
如果在数据模型查看器中展开预览窗口,您将看到整个结果集的一部分被组织到一个表中:
更改 ID |
状态 ID | 计划的开始日期 | 计划的结束日期 | 业务影响 | 状态 | 子状态 |
---|---|---|---|---|---|---|
10030 |
4 | 19/01/2022 | 23/02/2022 | 无 | 关闭 | 已取消 |
10031 |
3 | 20/01/2022 | 25/03/2022 | 低 | 关闭 | 已完成 |
10015 |
3 | 04/01/2022 | 15/02/2022 | 低 | 关闭 | 已完成 |
10103 |
1 | 02/04/2022 | 29/05/2022 | 中等 | 打开 | 未开始 |
10116 | 1 | 15/04/2022 | 24/04/2022 | 无 | 打开 | 未开始 |
10134 |
1 | 03/05/2022 | 08/07/2022 | 低 | 打开 | 未开始 |
10264 | 1 | 10/09/2022 | 17/10/2022 | 中等 | 打开 | 未开始 |
10040 |
1 | 29/01/2022 | 22/04/2022 | 无 | 打开 | 未开始 |
10323 | 1 | 08/11/2022 | 26/11/2022 | 高 | 打开 | 未开始 |
10187 | 2 | 25/06/2022 | 24/08/2022 | 低 | 打开 | 已开始 |
10185 | 2 | 23/06/2022 | 08/09/2022 | 无 | 打开 | 已开始 |
10220 | 2 | 28/07/2022 | 06/09/2022 | 无 | 打开 | 已开始 |
10326 | 2 | 11/11/2022 | 05/12/2022 | 无 | 打开 | 已开始 |
10138 |
2 | 07/05/2022 | 03/08/2022 | 无 | 打开 | 已开始 |
10334 | 2 | 19/11/2022 | 06/02/2023 | 低 | 打开 | 已开始 |
由于 Status 表中的第五行(Status ID:'5'、Status:'Closed'、Sub Status:'Obsolete')与 Changes 表中的任何记录都不对应,因此此行中的信息不会出现在上面的结果集中。
返回至数据加载编辑器。加载数据并打开工作表。创建新表并将该字段添加为维度: Status。
添加该度量:
=Count([Change ID])
现在您可以按状态检查更改的数量。
状态 | =Count([Change ID]) |
---|---|
打开 | 12 |
关闭 | 3 |
示例 2 – 内部联接:仅合并匹配记录
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
表示更改记录的数据集,该数据集加载到名为 Changes 的表中。
-
第二个数据集表示源系统 JIRA 中的变更记录。通过使用 Inner Join 加载前缀将其与原始记录连接,将其加载并合并。
该 Inner Join 确保只保留两个数据集中的五个变更记录。
加载脚本
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
JIRA_changes:
Inner Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10000 JIRA
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
20000 TFS
] (delimiter is '\t');
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
Source System
-
Change ID
-
Business Impact
现在您可以检查五个结果记录。来自 Inner Join 的结果表将只包括两个数据集中具有匹配信息的记录。
源系统 | 更改 ID | 业务影响 |
---|---|---|
JIRA | 10030 | 无 |
JIRA | 10134 | 低 |
JIRA | 10220 | 无 |
JIRA | 10323 | 高 |
JIRA | 10334 | 低 |
示例 3 – 外部联接:合并重叠记录集
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
表示更改记录的数据集,该数据集加载到名为 Changes 的表中。
-
第二个数据集表示源系统 JIRA 中的变更记录。通过使用 Outer Join 加载前缀将其与原始记录连接,将其加载并合并。
这确保了来自两个数据集的所有重叠更改记录都被保留。
加载脚本
// 8 Change records
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
] (delimiter is '\t');
// 6 Change records
JIRA_changes:
Outer Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
10597 JIRA
] (delimiter is '\t');
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
Source System
-
Change ID
-
Business Impact
现在您可以检查 10 个结果记录。
源系统 | 更改 ID | 业务影响 |
---|---|---|
JIRA | 10030 | 无 |
JIRA | 10134 | 低 |
JIRA | 10220 | 无 |
JIRA | 10323 | - |
JIRA | 10334 | 低 |
JIRA | 10597 | - |
- | 10015 | 低 |
- | 10031 | 低 |
- | 10040 | 无 |
- | 10138 | 无 |
示例 4 – 右联结:通过辅助主数据集修剪目标表
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
表示更改记录的数据集,该数据集加载到名为 Changes 的表中。
-
第二数据集表示源系统 Teamwork 的变更记录。通过将其与 Right Join 加载前缀连接,将其加载并与原始记录组合。
这确保只保留 Teamwork 更改记录,而如果目标表没有匹配 Change ID,则不会丢失任何 Teamwork 记录。
加载脚本
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Teamwork_changes:
Right Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10040 Teamwork
10015 Teamwork
10103 Teamwork
10031 Teamwork
50231 Teamwork
] (delimiter is '\t');
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
Source System
-
Change ID
-
Business Impact
现在您可以检查五个结果记录。
源系统 | 更改 ID | 业务影响 |
---|---|---|
团队工作 | 10015 | 低 |
团队工作 | 10031 | 低 |
团队工作 | 10040 | 无 |
团队工作 | 10103 | 中等 |
团队工作 | 50231 | - |