跳到主要内容
使用 Crosstable 前缀

在该页面上

使用 Crosstable 前缀

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

Crosstable 前缀

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

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 table with Product field, and one field each for the months.

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

具有 ProductMonthSales 字段的 Product 表格
Product table with Product, Month, and Sales fields.

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

执行以下操作:

  1. 新建应用程序并将其命名为高级脚本编写教程
  2. 数据加载编辑器中新增脚本段。
  3. 命名部分为 Product
  4. 在右菜单的 DataFiles 下,单击选择数据

  5. 上传然后选择 Product.xlsx
  6. 选择数据自窗口中选择 Product
  7. 提示注释确保选中了字段名称下面的嵌入的字段名称以包含您加载数据时表格字段的名称。
  8. 单击插入脚本
  9. 您的脚本应如下所示:

    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);

  10. 单击加载数据
  11. 打开数据模型查看器。数据模型如下所示:
  12. 具有 Product 字段的 Product 表,并且月份中的每个一个字段
    Product table with Product field, and one field each for the months.

  13. 单击数据加载编辑器中的 Product 标签。
  14. LOAD 语句上方输入以下内容:
  15. CrossTable(Month, Sales)

  16. 单击加载数据
  17. 打开数据模型查看器。数据模型如下所示:
  18. 具有 ProductMonthSales 字段的 Product 表格
    Product table with Product, Month, and Sales fields.

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

    Qlik Sense 中的表格里,您的数据形式如下:

    表格示出了使用 Crosstable 前缀加载的数据
    Table showing data loaded using Crosstable prefix.

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

    条形图示出了使用 Crosstable 前缀加载的数据
    Bar chart showing data loaded using the Crosstable prefix.

信息注释要了解关于 Crosstable 的更多信息,请参阅 Qlik Community中该文章:Crosstable 加载。 这些行为将在 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;

如您所见,关键字 TABLEFIELD 可为单数或复数。