取り込み済みテーブルからのデータ読み取りと集計処理-Resident Load, Group By, Order By
はじめに
Resident Loadを使うことにより、既にQlik Sense内に取り込んだテーブル上のデータを読み取ることができます。Resident Loadは既に読み込んだデータをOrder byでソートする場合や、Crosstable, Join, Intervalmatchなどの各種の変換処理を実行する場合に利用されます。
準備
このエントリでは、「Qlik Senseロードスクリプトによる変換処理の基礎」が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。
>>「Qlik Senseロードスクリプトによる変換処理の基礎」
以下のデータモデルの中から「売上明細」のテーブルのデータをResident Loadで読み取り、集計などを行って別のテーブルに格納する処理を行います。
Resident Loadの基本的な使い方 – Group Byの例
ではまず、以下のスクリプトをロードスクリプトの最後尾に追加してみたいと思います。
売上集計:
Load
商品コード,
Sum(数量) AS 数量集計,
Sum(販売価格) AS 売上集計
Resident 売上明細
Group By 商品コード;
Resident句の後に「売上明細」を指定し、「売上明細」のテーブルからデータを読み取ります。また、Group By句で「商品コード」を集計軸と指定し、「数量」と「販売価格」をSumで集計してそれぞれ「数量集計」と「売上集計」の項目に格納する処理を行います。結果のデータを「売上集計」のテーブルに格納します。
上記の処理を追加してロードを実行すると、以下の形で売上集計のテーブルが追加されます。プレビューでデータの内容を確認すると、「商品コード」をキーとして集計値が「数量集計」と「売上集計」の項目に格納されていることが確認できます。
この様に、Resident Loadを利用することで既にQlik Sense内に取り込んだテーブル上のデータを読み取って集計などの処理を施し、新たなテーブルに格納することができます。
Resident Loadを利用する際の注意点 – Order Byの例
では、次にResident Loadを利用する際の注意点を幾つかご説明したいと思います。その説明のために、今回は先ほどの処理の代わりにResident Loadを使って「売上明細」のデータを「販売日付」でソートする処理を行ってみたいと思います。
先ほど追加したスクリプトを削除し、以下のスクリプトをロードスクリプトの最後尾に追加してデータのロードを実行します。
売上明細_日付ソート済み:
Load
伝票番号,
販売日付,
都道府県コード,
顧客コード,
商品コード,
数量,
販売価格,
販売原価
Resident 売上明細
Order by 販売日付;
実行後にデータモデルビューアを開いてデータモデルを確認してみます。どの様な状況になっているでしょうか?今回はテーブルが新たに追加されていません。
その原因は「テーブルの自動連結と強制連結-Concatenate」のエントリでご説明したように、Qlik Senseではロードされた複数のテーブルの項目名と項目数が完全に合致する場合、これらのテーブルは一つに纏めるという「自動連結」が行われることが理由です。今回のケースでは元の「売上明細」と新たにResident Loadで作成しようとした「売上明細_日付ソート済み」のテーブルの項目名と項目数が完全に一致するため、全てのデータが既存の「売上明細」に連結されて纏められてしまいました。そのため、プレビューで「売上明細」テーブルの行数を確認すると実行前の倍になっていることが確認できます。
では、新たなテーブルを作成するにはどのようにすれば良いのでしょうか?「テーブルの自動連結と強制連結-Concatenate」の最後に触れた「Noconcatenate」プレフィックスを利用すると、連結を回避することができます。
売上明細_日付ソート済み:
Noconcatenate Load
伝票番号,
販売日付,
都道府県コード,
顧客コード,
商品コード,
数量,
販売価格,
販売原価
Resident 売上明細
Order by 販売日付;
ただし、この処理を実行すると次は以下の様な合成キーの警告が表示されます。これは、今度は「売上明細_日付ソート済み」が新たなテーブルとして作成されたのですが、「売上明細」と項目名が同じなためこれらの2つのテーブル間で合成キーが作成されてしまっているからです。
この様な合成キーの作成を避けるために、最後に以下の処理を追加して再度ロードを実行します。
Drop Table 売上明細;
Rename Table 売上明細_日付ソート済み To 売上明細;
ソート済みデータが新たな「売上明細_日付ソート済み」テーブルに格納された後で、ここではDrop Tableで「売上明細」テーブルを一旦削除し、「売上明細_日付ソート済み」テーブルの名称を元の「売上明細」に戻す処理を行っています。
そうすると、結果のデータモデルは元の以下の形となっていることが確認できます。
また、データを確認すると、以下の形で「売上明細」のデータが「販売日付」でソートされていることが確認できます。
まとめ
ここでは、既にQlik Sense内に取り込んだテーブル上のデータを読み取って集計処理などを行うことができるResident Loadの利用方法と、利用する上での注意点についてご説明しました。