多表格串联
串联是指获取两个表格并将两个表格组合成一个表格的操作。
两个表格中,一个表格堆叠在另一个表格上方,每个不同列名称占据一列,从而使两个表格彼此增加。数据不会更改,并且合并后的表格包含的记录数与两个原始表格的总记录数相同。此外,还可连续执行多条串联操作,以串联两个以上的表格。
自动串联
如果两个或多个已加载表格的字段名和字段数量完全相同,Qlik Sense 会自动串联不同语句的内容到一个表格中。
字段的数量和名称必须与要发生的自动串联完全相同。两个 LOAD 语句的顺序是任意的,但表格会指定首先加载的表格的名称。
执行以下操作:
- 在 Scripting Tutorial 应用程序中,打开数据加载编辑器。
- 单击Dates选项卡。
- 单击加载数据。
- 在部分 Dates 中脚本内的新行上,复制并粘贴 Table2 的LOAD 语句。这将导致数据被加载两次。将第二个表格命名为 Table2a。
- 单击加载数据。
- 打开数据模型查看器。
- 单击显示预览。
介于您目前已编写的加载脚本,Qlik Sense 从 Dates.xlsx 数据文件将 628 行加载到 Table2 中。
您还可以删除现有脚本,并复制并粘贴以下内容:
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
您的脚本应如下所示:
Qlik Sense 不加载 Table2 然后是 Table2a。它将认为 Table2a 具有和 Table2 相同的字段名称和字段数目。然后它将 Table2a 的数据添加至 Table2,然后删除表格 Table2a。结果是 Table2 现在具有 1,256 行。
仅会创建 Table2。选择 Table2。表格具有 256 行。
强制串联
即使两个或多个表格的字段集并不完全相同,仍有可能强制 Qlik Sense 串联两个表格。这可以使用脚本的 Concatenate 前缀来实现,即将一个表格串联至另一个命名表格或最新创建的表格。
执行以下操作:
- 按如下编辑 Table2a 的 LOAD 语句:添加 Concatenate 并注释掉 Week。
- 单击加载数据。
- 打开数据模型查看器。
- 单击数据模型查看器中的 Table2,然后单击预览。
- 单击 Table2 中的 Week。预览显示该字段的非空值数目为 628。但是,如果单击其他任何字段,则会看到非空值的数目为 1256。 Week 仅从 Table2 加载一次。值或记录的数目是 Table2 和 Table2a 中记录数的总和。
您的脚本现在应当如下:
Table2a:
Concatenate LOAD
"Date",
Month (Date) as "Month",
Quarter,
// "Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
通过注释掉 Week,我们可确保表格不相同。
现在,您可以看到未创建 Table2a。
表格具有字段 Date、Month、Quarter、Week 和 Year。字段 Week 仍会显示,这是因为该字段是从 Table2 中加载的。
防止串联
如果两个或多个已加载表格的字段名和字段数量完全相同,Qlik Sense 会自动串联不同语句的内容到一个表格中。可以使用 NoConcatenate 语句来防止此行为。然后,使用相关 LOAD 或 SELECT 语句加载的表格不会与现有表格串联。
执行以下操作:
- 为了能够完全分离两个表的内容,将 NoConcatenate 添加至 Table2a 中的 LOAD 语句,并重命名字段,使得 Qlik Sense 不会基于匹配字段创建合成钥。取消注释 Table2 中的 Week,使得两个表格具有相同字段。
- 单击加载数据。
- 打开数据模型查看器。
- 现在,我们已经完成了对串联的演示,我们不再需要 Table2a。删除 Table2a 的 LOAD 语句中的所有行,然后单击加载数据。
您的脚本现在应当如下:
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
NoConcatenate LOAD
"Date" as "Date2",
Month (Date) as "Month2",
Quarter as "Quarter2",
"Week" as "Week2",
"Year" as "Year2"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
现在您可以看到,两个表格已完全分隔。