事前にロードされているテーブルからのデータのロード

すでにロードされているテーブルからデータをロードし変換するには、2 つの方法があります。

  • Resident LOAD では、Resident 述語を以後の LOAD ステートメントで使用し、新規テーブルをロードします。
  • 先行するロード- 先行する LOAD または SELECT ステートメントから、ソースを指定せずにロードします。

Resident と先行する LOAD の違い

大半の場合、いずれの方法を使用しても結果は同じです。先行する LOAD は一般に高速なオプションですが、代わりに Resident LOAD を使用する必要がある場合もあります。

  • Order_by 節を使用して、LOAD ステートメントを処理する前にレコードをソートしたい場合。
  • 先行するLOADがサポートされていない以下のプレフィックスのいずれかを使用したい場合。
    • Crosstable
    • Join
    • Intervalmatch

Resident LOAD

LOAD ステートメントで Resident 述語を使用すると、以前ロードしたテーブルからデータをロードできます。日付や数値の処理といった Qlik Sense 関数を使用するオプションがない場合でも、SELECT ステートメントを使用してロードされたデータで計算を行う場合に役立ちます。

Example:  

この例では、最初の Crosstable LOAD では日付の変換を実行できないため、Resident ロードで変換を行います。

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

先行するロード機能を使用すると、1 つのパスでテーブルをロードし、複数の連続した変換を定義できます。基本的に、これは以下の LOAD または SELECT ステートメントからロードする LOAD ステートメントのことで、通常指定する FromResident などのソース修飾子を指定せずに実行します。この方法では、LOAD ステートメントをいくつでもスタックできます。ステートメントの評価は、最下部のステートメントから順番に、上に向かって実行されます。

Resident を使用しても同じ結果を得られますが、ほとんどの場合、先行する LOAD の方が時間がかかりません。

先行する Load のもう 1 つの利点は、計算を 1 か所に維持して、その上に配置された LOAD ステートメントで再利用できるという点にあります。

注: JoinCrosstableIntervalmatch のプレフィックスは、先行する LOAD とは併用できません。

Example 1: SELECT ステートメントでロードされたデータの変換

SELECT ステートメントを使用してデータベースからデータをロードすると、Qlik Sense 関数を使用して SELECT ステートメントでデータを解釈することができなくなります。この問題を解決するには、データの変換を行う場所、SELECT ステートメントの上に LOAD ステートメントを追加します。

この例では、前の SELECT ステートメントをソースとして使用し、LOAD ステートメントで Qlik Sense 関数Date# を使用する文字列として、保存された日付を解釈します。

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 ;

See also: