从之前加载的表格中加载数据

可以通过两种方法从已经加载的表格中加载和转换数据。

  • Resident LOAD — 在后续 LOAD 语句中使用 Resident 谓词加载新表格。
  • 前置 Load — 从前置 LOADSELECT 语句加载,而无需指定源。

Resident 或前置 LOAD

在大多数情况下,可以通过使用任一种方法获得相同的结果。前置 LOAD 通常是更快的选项,但是在某些情况下,您需要使用 Resident LOAD

  • 在处理 LOAD 语句之前,如果您要使用 Order_by 子句对记录进行排序。
  • 如果您要使用以下任何前缀,在这种情况下,前面的 LOAD 不受支持:
    • Crosstable
    • Join
    • Intervalmatch

Resident LOAD

您可以在 LOAD 语句中使用 Resident 断言,以便从之前加载的表格加载数据。当您想要在使用 SELECT 语句(没有选项使用 Qlik Sense 函数)加载的数据上执行计算时(例如日期或数值处理),这很有用。

Example:  

在本例中,数据解释在 Resident 加载中执行,因为在初始 Crosstable LOAD 中无法完成。

PreBudget: Crosstable (Month, Amount, 1) LOAD Account, Jan, Feb, Mar, … From Budget; Budget: Noconcatenate LOAD Account, Month(Date#(Month,’MMM’)) as Month, Amount Resident PreBudget; Drop Table PreBudget;
提示: 一种使用 Resident 的常见情况是,您希望使用临时表格来计算或筛选数据。一旦您使用临时表格达到了目的,就会使用 Drop table 语句将其删除。

前置 Load

前置 Load 可让您在一次遍历中加载表格,但仍然需要定义多个连续的转换。总的来说,它是一个 LOAD 语句,可从下面的 LOADSELECT 语句加载,而无需指定通常使用的源限定符,如 FromResident。您可以按此方法叠加任意数量的 LOAD 语句。首先将会对底部的语句进行求值,然后再对上面的语句进行求值,以此类推,直至求值到顶部的语句。

可以使用 Resident 实现相同的结果,但在大多数情况下前置 LOAD 运行速度更快。

前置 Load 的另一个好处是可将计算保存在一个地方,并在上面部署的 LOAD 语句中进行重复使用。

Example 1: 可通过 SELECT 语句加载转换数据。

如果使用 SELECT 语句从数据库加载数据,则不能使用 Qlik Sense 函数解释 SELECT 语句中的数据。解决方法是添加 LOAD 语句,这样就可以针对上面的 SELECT 语句执行数据转换。

在本例中,我们在 LOAD 语句中使用 Qlik Sense 函数 Date# 解释存储作为字符串的日期,并使用上一个 SELECT 语句作为源。

LOAD Date#(OrderDate,’YYYYMMDD’) as OrderDate;
SQL SELECT OrderDate FROM … ;

Example 2: 可通过重复使用计算简化脚本

在本例中,我们在脚本中多次使用了计算:

LOAD Age(FromDate + IterNo() – 1, BirthDate ) as Age, Date(FromDate + IterNo() – 1 ) as ReferenceDate Resident Policies While IterNo() <= ToDate - FromDate + 1 ;

通过在第一次遍历中引入计算,我们在前置 LOAD 的 Age 函数中进行了重复使用:

LOAD ReferenceDate, Age(ReferenceDate, BirthDate ) as Age; LOAD *, Date(FromDate + IterNo() – 1 ) as ReferenceDate Resident Policies While IterNo() <= ToDate - FromDate + 1 ;

前置 Load 的限制

  • 以下前缀不能与前置 LOAD 结合使用:JoinCrosstableIntervalmatch
  • 如果您使用 distinct 加载唯一记录,需要将 distinct 置于第一加载语句,因为 distinct 仅影响目标表格。

See also: