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

すでにロードされているテーブルからデータをロードし変換するには、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 ステートメントを使用してロードされたデータで計算を行う場合に役立ちます。

この例では、最初の 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 ステートメントのことで、通常指定する From や Resident などのソース修飾子を指定せずに実行します。この方法では、LOAD ステートメントをいくつでもスタックできます。ステートメントの評価は、最下部のステートメントから順番に、上に向かって実行されます。

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

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

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

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

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

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

例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() &lt;= ToDate - FromDate + 1 ;

### 先行する LOAD の制限

* Join、Crosstable、Intervalmatch のプレフィックスは、先行する LOAD とは併用できません。
* distinct を使用して一意のレコードをロードしている場合、distinct はロード先のテーブルにのみ反映されるので、Load ステートメントの先頭に distinct を配置する必要があります。

## 詳細を見る

* [Load](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Drop table](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)