從先前載入的表格載入資料

從已載入表格中載入並轉換資料有兩種方法。

  • 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 陳述式中重複使用它。

Example 1: 轉換由 SELECT 陳述式載入的資料

如果您使用 SELECT 陳述式從資料庫載入資料,則不能使用 Qlik Sense 函數,在 SELECT 陳述式中解譯資料。解決方案是在 SELECT 陳述式上方新增 LOAD 陳述式,您可以從中執行資料轉換。

在此範例中,我們使用 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 ;

前置載入的限制

  • 下列前置詞不能與前置 LOADJoinCrosstableIntervalmatch 搭配使用。
  • 若您正在使用 distinct 載入獨特記錄,則需要將 distinct 置於第一個 LOAD 陳述式,如同 distinct 僅影響目的地表格。

See also: