データの変換
データ ロード エディター でさまざまなテクニックを使って、データを変換および操作できます。
データ操作のメリットの 1 つは、ファイルからデータのサブセットのみをロードするという選択ができることです。つまり、テーブルからいくつかの列だけを選択してより効率的にデータを処理できます。また、データを複数回に渡りロードして、生データをいくつかの新しい論理テーブルに分化することもできます。さらに、複数のソースからデータをロードして、Qlik Sense にある 1 つのテーブルに結合することも可能です。
このトピックでは、まず Resident LOAD を使って、次に Preceding LOAD を使って、いくつかの基本的なデータ変換を実行します。
Resident LOAD
Resident ソース修飾子を LOAD ステートメントで使用すると、以前ロードしたテーブルからデータをロードできます。日付や数値の処理といった Qlik Sense 関数を使用するオプションがない場合でも、SELECT ステートメントを使用してロードされたデータで計算を行う場合に役立ちます。
この例では、Sales_Buckets という新しいテーブルを作成し、Resident LOAD を使って Table1 からデータをロードします。Sales_Buckets テーブルで、quantity_threshold という変数を作成し、Where ステートメントを使ってしきい値と一致するデータのみをロードします。
- Scripting Tutorial アプリでデータ ロード エディターを開きます。
- Sales タブをクリックします。
- 次の内容をスクリプトの最後に追加します。
- [データのロード] をクリックします。
- [データ モデル ビューア] を開きます。 指定した項目と設定したしきい値に従ってロードされたデータを使用して Sales_Buckets という新しいテーブルが作成されたことを確認できます。
- アプリのテーブルにデータを追加します。[Item] および [Customer] を軸として追加します。Count で集計されるメジャーとして High-Quantity を追加し、再度 Sumで集計します。続いて、次の数式を指定した新しい列をメジャーとして追加します。
- これで、この例を完了しました。quantity_threshold 変数と Sales_Buckets テーブルのスクリプトをコメント アウトしてください。
SET quantity_threshold = 12000;
Sales_Buckets:
LOAD
"Sales Qty" as "High_Quantity",
"Item Description" as "Item",
"Customer Number" as "Customer"
Resident Table1
Where ("Sales Qty" > $(quantity_threshold));
これで、スクリプトは次のようになります。
= Sum(High_Quantity) / Count(High_Quantity)
テーブルを見ると、たとえば、Customer 10025737 から High Top Dried Mushrooms の大量の注文が 4 回あり、平均数量は 14,800 であることがわかります。項目でデータのソートを実行するには、[完了] をクリックして [編集] モードを終了します。
スクリプトの最後は次のようになります。
先行する LOAD
先行する LOAD を使用すると、変換を実行してフィルターを適用し、1 つのパスでデータをロードできます。基本的に、これは以下の LOAD または SELECT ステートメントからロードする LOAD ステートメントのことで、通常指定する From や Resident などのソース修飾子を指定せずに実行します。この方法では、LOAD ステートメントをいくつでもスタックできます。ステートメントの評価は、最下部のステートメントから順番に、上に向かって実行されます。
このチュートリアルで前述したように、LOAD および SELECT ステートメントを使用して、データを Qlik Sense にロードできます。各ステートメントは、1 つの内部テーブルを生成します。LOAD はファイルまたはインライン テーブルから、SELECT はデータベースからデータをロードする際に使用します。このチュートリアルでは、ファイルからロードしたデータを使用しました。この例では、インライン テーブルを使用します。ただし、SELECT ステートメントの前に先行する LOAD を使用し、データを操作できる点は注目に値します。基本は、今回説明する LOAD の使用と同じです。
この例は、このチュートリアルでロードしているデータには関連していません。先行する LOAD がどのように見えるかを示す目的のみに使用されています。データ ロード エディターで、Transactions というインライン テーブルを作成します。日付の変換は先行する LOAD で実行され、 transaction_date という新しい項目が作成されます。この項目は sale_date 項目から作成されます。
- 新しいアプリを作成し、ReformatDate という名前を付けます。
- データ ロード エディターを開き、TransactionData という新しいタブを作成します。
- 次のスクリプトを追加します。
- [データのロード] をクリックします。
- [データ モデル ビューア] を開きます。 Transactions テーブルを選択して展開します。先行する LOAD ステートメントで * で指定されたとおり、すべての項目がロードされたことを確認できます。transaction_date という新しい項目が作成されました。この項目は、日付の書式が再設定されています。
Transactions:
Load *,
Date(Date#(sale_date,'YYYYMMDD'),'DD/MM/YYYY') as transaction_date;
Load * Inline [ transaction_id, sale_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, m, orange
3752, 20180916, 5.75, 1, 5646471, S, blue
3753, 20180922, 125.00, 7, 3036491, l, Black
3754, 20180922, 484.21, 13, 049681, xs, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black ];
これで、スクリプトは次のようになります。