使用 Join 和 Keep 合并表格
将两个表格组合成一个表格的联接操作。组合后的表格记录是由原始表格的记录所组成,通常在将两个表格的记录合并到任何一个表格中时,一个常见值可用于一个或几个常见字段,这就是所谓的自然联接。在 Qlik Sense 中,联接可在脚本中创建,以生成逻辑表格。
联接已处于脚本中的表格是完全有可能的。Qlik Sense 逻辑随后无法看到单独的表格,但能看到联接结果,即单一的内部表格。某些情况下这是必要的,但也存在一些缺点:
- 加载表格往往会变得更大,这将使 Qlik Sense 运行得更慢。
- 一些信息可能会丢失:原始表格中的频率(记录数)可能不再可用。
Keep 功能可以在表格存入 Qlik Sense 之前将两个表格中的一个或两个缩减为表格数据的交集,旨在减少需要使用显式联接的情况。
Join
进行联接的最简单方法是在脚本中使用 Join 前缀,以联接内部表格与另一个命名表格或最后创建的表格。该联接是外部联接,创建两个表格的所有可能的数值组合。
示例:
结果内部表格包含字段 a、b、c 和 d。根据这两个表格的字段值不同,记录的数量也会有所不同。
有关更多信息,请参阅Join。
使用 Join
Qlik Sense 脚本语言中的显式 Join 前缀可完全联接这两个表格。结果会生成一个表格。此类联接通常会导致非常大的表格。
执行以下操作:
- 打开高级脚本编写教程应用程序。
- 在数据加载编辑器中新增脚本段。
- 调用部分 Transactions。
-
在右菜单的 DataFiles 下,单击选择数据。
- 上传然后选择 Transactions.csv。
- 在选择数据自窗口中,单击插入脚本。
- 上传然后选择 Salesman.xlsx。
- 在选择数据自窗口中,单击插入脚本。
- 单击加载数据。
- 打开数据模型查看器。数据模型如下所示:
您的脚本应如下所示:
然而,让 Transactions 和 Salesman 表格分离可能并非所需的结果。最好是将两个表格联接。
执行以下操作:
- 要设置联接表的名称,请在第一条 LOAD 语句上方添加以下行:
- 要联接 Transactions 和 Salesman 表格,在第二个 LOAD 语句上方添加以下行:
- 单击加载数据。
- 打开数据模型查看器。数据模型如下所示:
Transactions:
Join(Transactions)
您的脚本应如下所示:
Transactions:
LOAD
"Transaction ID",
"Salesman ID",
Product,
"Serial No",
"ID Customer",
"List Price",
"Gross Margin"
FROM [lib://DataFiles/Transactions.csv]
(txt, codepage is 28591, embedded labels, delimiter is ',', msq);
Join(Transactions)
LOAD
"Salesman ID",
Salesman,
"Distributor ID"
FROM [lib://DataFiles/Salesman.xlsx]
(ooxml, embedded labels, table is Salesman);
Transactions 和 Salesman 表格的所有字段现在都已合并成一个 Transactions 表格。
Keep
Qlik Sense 的其中一个主要功能就是使表格之间形成关联,而不是联接这些表格,这种关联可以大大减少使用内存,提高处理速度并且灵活多变。Keep功能旨在减少需要使用显式联接的情况。
两个 LOAD 或 SELECT 语句之间的 Keep 前缀有将两个表格中的一个或两个表格缩减为表格数据交集的效果,然后才将其存储到 Qlik Sense。Keep 前缀必须是 Inner、Left 或 Right 关键字之一。选择表格记录的方法与相应联接方法相同。但是,这两个表格并未联接,而是分别命名后存储在 Qlik Sense 中。
有关更多信息,请参阅Keep。
Inner
数据加载脚本中的 Join 和 Keep 前缀可以位于前缀 Inner 之后。
如果用于 Join 之前,说明两个表格之间的联接应为内部联接。由此生成的表格所包含的两表格之间的组合必带有两表格的完整数据集。
如果用于 Keep 之前,说明首先应使两个表格缩减为它们自身的共同交集,然后才可在 Qlik Sense 中存储这些表格。
示例:
在这些示例中,我们使用源表格 Table1 和 Table2。
注意这些仅为示例。在 Qlik Sense 中没有附带的练习。
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Inner Join
首先,我们使用两个表格中合并的数据在表格上执行 Inner Join,从而使 VTable 仅包含一行,即两个表格中仅有的记录。
A | B | C |
---|---|---|
1 | aa | xx |
Inner Keep
如果我们执行 Inner Keep,则会获得两个表格。这两个表格通过字段 A 关联。
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
有关更多信息,请参阅Inner。
Left
数据加载脚本中的 Join 和 Keep 前缀可以位于前缀 left 之后。
如果用于 Join 之前,说明两个表格之间的联接应为左联接。由此生成的表格所包含的两表格之间的组合仅带有第一个表格的完整数据集。
如果用于 Keep 之前,说明首先应使第二个表格缩减为其与第一个表格间的共同交集,然后才可在 Qlik Sense 中存储此表格。
示例:
在这些示例中,我们使用源表格 Table1 和 Table2。
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
首先,我们在表格上执行 Left Join,从而产生 VTable,其中包含 Table1 中的所有行(与 Table2 中匹配航的字段合并)。
A | B | C |
---|---|---|
1 | aa | xx |
2 | cc | - |
3 | ee | - |
如果我们执行 Left Keep,则会获得两个表格。这两个表格通过字段 A 关联。
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
有关更多信息,请参阅Left。
Right
Qlik Sense 脚本语言中的 Join 和 Keep 前缀可以位于 right 前缀之后。
如果用于 Join 之前,说明两个表格之间的联接应为右联接。生成的表格仅包含这两个表格的组合,其中第二个表格带有完整数据集。
如果用于 Keep 之前,说明首先应使第一个表格缩减为其与第二个表格间的共同交集,然后才可在 Qlik Sense 中存储此表格。
示例:
在这些示例中,我们使用源表格 Table1 和 Table2。
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
首先,我们在表格上执行 Right Join,从而产生 VTable,其中包含 Table2 中的所有行(与 Table1 中匹配航的字段合并)。
A | B | C |
---|---|---|
1 | aa | xx |
4 | - | yy |
如果我们执行 Right Keep,则会获得两个表格。这两个表格通过字段 A 关联。
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
4 | yy |
有关更多信息,请参阅Right。