# 使用 Crosstable 前缀

交叉表是常见的表格类型，特点是在两个标题数据正交列表之间显示值矩阵。只要您拥有数据的交叉表，均可使用 Crosstable 前缀转换数据并创建所需的字段。

## Crosstable 前缀

在下面的 Product 表中，每个月份必须使用一列，且每种产品必须使用一行。

Product 表

| 产品 | Jan 2014 | Feb 2014 | Mar 2014 | Apr 2014 | May 2014 | Jun 2014 |
| --- | --- | --- | --- | --- | --- | --- |
| A | 100 | 98 | 100 | 83 | 103 | 82 |
| B | 284 | 279 | 297 | 305 | 294 | 292 |
| C | 50 | 53 | 50 | 54 | 49 | 51 |

加载表时，输出是一个表，其中 Product 一个字段，月份中的每个一个字段。

具有 Product 字段的 Product 表，并且月份中的每个一个字段

具有 Product 字段的 Product 表，并且月份中的每个一个字段

具有 ProductProduct 字段的 ProductProduct 表，并且月份中的每个一个字段 ![带有产品字段的产品表，每个月有一个字段。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-data-model-before.png)

如果您想要分析此数据，则可以轻松收集一个字段中的所有数字和另一个字段中的所有月份。在本例中，这是一个三列表，每个类别 (Product, Month, Sales) 有一列.

具有 Product、Month 和 Sales 字段的 Product 表格

具有 Product、Month 和 Sales 字段的 Product 表格

具有 ProductProduct、MonthMonth 和 SalesSales 字段的 ProductProduct 表格 ![包含产品、月份和销售字段的产品表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-data-model-after.png)

Crosstable 前缀可将数据转换成一个表格，其中一列为 Month，另一列为 Sales。另一种方法是使用字段名称并将其转换成字段值。

执行以下操作：

1. 新建应用程序并将其命名为高级脚本编写教程。

2. 在数据加载编辑器中新增脚本段。

3. 命名部分为 Product。

4. 在右菜单的 DataFiles 下，单击选择数据。

5. 上传然后选择 Product.xlsx。

6. 在选择数据自窗口中选择 Product。

   提示注释确保选中了字段名称下面的嵌入的字段名称以包含您加载数据时表格字段的名称。

7. 单击 添加。

   您的脚本应如下所示：

   ```
   LOAD
       Product,
       "Jan 2014",
       "Feb 2014",
       "Mar 2014",
       "Apr 2014",
       "May 2014",
       "Jun 2014"
   FROM [lib://DataFiles/Product.xlsx] 
   (ooxml, embedded labels, table is Product);	
   ```

8. 单击加载数据。

9. 打开数据模型查看器。数据模型如下所示：

   具有 Product 字段的 Product 表，并且月份中的每个一个字段

   具有 Product 字段的 Product 表，并且月份中的每个一个字段

   具有 ProductProduct 字段的 ProductProduct 表，并且月份中的每个一个字段 ![带有产品字段的产品表，每个月有一个字段。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-data-model-before.png)

10. 单击数据加载编辑器中的 Product 标签。

11. 在 LOAD 语句上方输入以下内容：

    ```
    CrossTable(Month, Sales)
    ```

12. 单击加载数据。

13. 打开数据模型查看器。数据模型如下所示：

    具有 Product、Month 和 Sales 字段的 Product 表格

    具有 Product、Month 和 Sales 字段的 Product 表格

    具有 ProductProduct、MonthMonth 和 SalesSales 字段的 ProductProduct 表格 ![包含产品、月份和销售字段的产品表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-data-model-after.png)

    注意输入数据只有一列作为限定符字段；作为内部键（上例中的 Product）。但是，您可以拥有多个此类字段。如果这样，则必须在 LOAD 语句的属性字段前面列出所有限定字段，且 Crosstable 前缀的第三个参数必须用来定义限定字段的数量。您不能使用前置 LOAD 或将前缀放置在 Crosstable 关键字的前面。但是您可使用自动串联。

    在 Qlik Sense 中的表格里，您的数据形式如下：

    表格示出了使用 Crosstable 前缀加载的数据

    表格示出了使用 Crosstable 前缀加载的数据

    表格示出了使用 CrosstableCrosstable 前缀加载的数据![表格示出了使用 Crosstable 前缀加载的数据。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-sense-table.png)

    例如您现在可以使用数据 创建条形图：

    条形图示出了使用 Crosstable 前缀加载的数据

    条形图示出了使用 Crosstable 前缀加载的数据

    条形图示出了使用 CrosstableCrosstable 前缀加载的数据![条形图示出了使用 Crosstable 前缀加载的数据。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-crosstable-sense-chart.png)

信息注释要了解关于 Crosstable 的更多信息，请参阅 Qlik Community 中的该博客文章：[Crosstable 加载](https://community.qlik.com/t5/Qlik-Design-Blog/The-Crosstable-Load/ba-p/1468083)。 这些行为将在 QlikView 的上下文中讨论。然而，逻辑同样适用于 Qlik Sense。

数字解释不适用于属性字段。这意味着如果您将月份用作列标题，则将不会自动对其进行解释。解决方法是使用 Crosstable 前缀创建一个临时表格，然后运行第二次通过它，使解释如下例所示：

注意这仅为示例。在 Qlik Sense 中没有附带的练习。

```
tmpData:
Crosstable (MonthText, Sales)
LOAD Product, [Jan 2014], [Feb 2014], [Mar 2014], [Apr 2014], [May 2014], [Jun 2014]		
FROM ... 
 
Final:
LOAD Product,
Date(Date#(MonthText,'MMM YYYY'),'MMM YYYY') as Month,
Sales
Resident tmpData;
Drop Table tmpData;
```

## 清除内存缓存

可以删除为清除内存缓存而创建的表。当按照上一节所述加载到临时表格后，然后在不再需要时应将其删除。例如：

DROP TABLE Table1, Table2, Table3, Table4; DROP TABLES Table1, Table2, Table3, Table4;

也可以放置字段。例如：

DROP FIELD Field1, Field2, Field3, Field4; DROP FIELDS Field1, Field2, Field3, Field4; DROP FIELD Field1 from Table1; DROP FIELDS Field1 from Table1;

如您所见，关键字 TABLE 和 FIELD 可为单数或复数。