# 多表格串联

串联是指获取两个表格并将两个表格组合成一个表格的操作。

两个表格中，一个表格堆叠在另一个表格上方，每个不同列名称占据一列，从而使两个表格彼此增加。数据不会更改，并且合并后的表格包含的记录数与两个原始表格的总记录数相同。此外，还可连续执行多条串联操作，以串联两个以上的表格。

## 自动串联

如果两个或多个已加载表的 字段名称和字段数量完全相同，应用程序将自动将不同语句的内容串联为一个表。

字段的数量和名称必须与要发生的自动连接完全相同。两个 LOAD 语句的顺序是任意的，但表格会指定首先加载的表格的名称。

执行以下操作：

1. 在Scripting Tutorial应用程序中打开数据加载编辑器。
2. 单击Date标签。
3. 单击加载数据。

   根据您目前编写的加载脚本，应用程序将从 Dates.xlsx 数据文件加载 628 行到 Table2 中。

   数据加载进度窗口

   数据加载进度窗口

   数据加载进度窗口 ![数据加载进度窗口](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-load-progress-dates.png)
4. 在部分 Dates 中脚本内的新行上，复制并粘贴 LOAD 的Table2 语句。这将导致数据被加载两次。将第二个表格命名为 Table2a。

   您还可以删除现有脚本，并复制并粘贴以下内容：
   ```
   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);
   ```

   您的脚本应如下所示：

   在 Dates 标签中加载脚本

   在 Dates 标签中加载脚本

   在 DatesDates 标签中加载脚本 ![在日期标签中加载脚本。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-load_dates_concat-cloud-rev.png)
5. 单击加载数据。

   应用程序不会加载 Table2，然后加载 Table2a。它将认为 Table2a 具有和 Table2 相同的字段名称和字段数目。然后它将 Table2a 的数据添加至 Table2，然后删除表格 Table2a。结果是 Table2 现在具有 1,256 行。

   数据加载进度窗口中的多表格串联

   数据加载进度窗口中的多表格串联

   数据加载进度窗口中的多表格串联 ![数据加载进度窗口中的多表格串联。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-load-progress-dates-concat.png)
6. 打开数据模型查看器。
7. 单击显示预览。

   仅会创建 Table2。选择 Table2。表格具有 1256 行。

   显示 的数据模型查看器Table2

   显示 的数据模型查看器Table2

   显示 的 的数据模型查看器Table2Table2 ![显示 Table2 的数据模型查看器。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_data_model_viewer_table2.png)

## 强制串联

即使两个或多个表没有完全相同的字段集，仍然可以强制应用程序串联这两个表。这可以使用脚本的 Concatenate 前缀来实现，即将一个表格串联至另一个命名表格或最新创建的表格。

执行以下操作：

1. 按如下编辑 LOAD 的 Table2a 语句：添加 Concatenate 并注释掉 Week。

   您的脚本现在应当如下：
   ```
   Table2a:
   					Concatenate LOAD
   					"Date",
   					Month (Date) as "Month",
   					Quarter,
   					// "Week",
   					"Year"
   					FROM [lib://DataFiles/Dates.xlsx]
   				(ooxml, embedded labels, table is Dates);
   ```

   通过注释掉 Week，我们可确保表格不相同。
2. 单击加载数据。
3. 打开数据模型查看器。

   现在，您可以看到未创建 Table2a。
4. 单击数据模型查看器中的 Table2，然后单击预览。

   表格具有字段 Date、Month、Quarter、Week 和 Year。字段 Week 仍会显示，这是因为该字段是从 Table2 中加载的。
5. 单击 Week 中的 Table2。预览显示该字段的非空值数目为 628。但是，如果单击其他任何字段，则会看到非空值的数目为 1256。 Week 仅从 Table2 加载一次。值或记录的数目是 Table2 和 Table2a 中记录数的总和。

## 防止串联

如果两个或多个已加载表的字段名称和字段数量完全相同，应用程序将自动把不同语句的内容串联到一个表中。可以使用 NoConcatenate 语句来防止此行为。然后，使用相关 LOAD 或 SELECT 语句加载的表格不会与现有表格串联。

执行以下操作：

1. 为了能够完全分离这两个表的内容，请在 Table2a 中的 LOAD 语句中添加 NoConcatenate，并重命名字段，以使应用程序不会基于匹配字段创建合成钥。取消注释 Week 中的 Table2，使得两个表格具有相同字段。

   您的脚本现在应当如下：
   ```
   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);			
   ```
2. 单击加载数据。
3. 打开数据模型查看器。

   现在您可以看到，两个表格已完全分隔。

   显示 Table2 和 Table 2a 的数据模型查看器

   显示 Table2 和 Table 2a 的数据模型查看器

   显示 Table2Table2 和 Table 2aTable 2a 的数据模型查看器 ![显示 Table2 和 Table 2a 的数据模型查看器。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-data-model-sales-noconcat.png)
4. 现在，我们已经完成了对串联的演示，我们不再需要 Table2a。删除 LOAD 的 Table2a 语句中的所有行，然后单击加载数据。