Qlik SenseでのQVDの作成
はじめに
QVD(QlikView Data)ファイルは、Qlik SenseもしくはQlikViewが内部的に保持するネイティブなデータ形式でそのままエクスポートされたテーブルデータになります。元データと比較して、このQVDは圧縮されてデータサイズが小さくコンパクトで、かつネイティブなデータ形式で保持されていますので、QVDからの読み取りは10~100倍高速になります。この特長を生かし、毎回DBなどのデータソースへアクセスせず、一旦このQVDに保存してから複数のアプリで利用するなどの用途で利用されます。
ここでは、QVDファイルの作成・読込み方法をご説明します。
事前の準備
このエントリでは、「10分で試すQLIK SENSEでデータ分析」の手順に従ってQlik Sense Desktopのインストールとアプリの作成(「売上分析」アプリ)が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。
QVDファイルの作成
アプリを開き、上部ナビゲーションから「データモデルビューア」を開きます。
「売上明細」のテーブルがこのアプリに含まれていることが確認します。ここでは、この「売上明細」のデータをQVDに保存したいと思います。
上部ナビゲーションから「データロードエディタ」を開きます。
最後尾のタブ(以下の例では「セクション」タブ)を選択し、[+]ボタンをクリックします。
タブの名前を「QVD保存」に変更します。
右側のデータ接続定義に作成済みの「売上データ」という名称のデータ接続があることを確認します。(このデータ接続は、「10分で試すQLIK SENSEでデータ分析」でデータを取り込んだ際に自動的に作成されたものになります。)「売上データ」の「データを選択」アイコンをクリックします。
ソースデータの「商品マスタ.xlsx」と「売上明細.xlsx」が保存されているフォルダが開かれます。今回はこのフォルダにQVDファイルを保存したいと思います。そのまま「キャンセル」をクリックします。
QVDの作成には「Store [テーブル名] Into [保存先QVDファイル名].qvd;」の構文を利用します。「保存先QVDファイル名」は[lib://データ接続定義名/ファイル名]の形式で入力します。ここでは、先ほど確認した「売上データ」のデータ接続定義のフォルダに「売上明細.qvd」ファイルという名称で保存しますので、以下の形で[lib://売上データ/売上明細.qvd]として「データのロード」を実行します。
Store 売上明細 Into [lib://売上データ/売上明細.qvd];
尚、以下の形でエクスポートする列を絞ったり、列名を変更して保存することも可能です。
- Store 列1, 列2 from テーブル名 Into [lib://データ接続定義名/ファイル名];
- Store 列1 AS A1, 列2 AS A2 from テーブル名 Into [lib://データ接続定義名/ファイル名];
また、以下の形で後尾に(txt)を付加することで、QVDではなくCSVの形式で保存することも可能です。
- Store 売上明細 Into [lib://売上データ/売上明細.csv](txt);
右上の「データのロード」ボタンをクリックしてロードを実行し、再度「売上データ」のデータ接続を開きます。「売上明細.qvd」が作成されたことを確認し、そのまま「キャンセル」をクリックします。
QVDファイルからのデータ取り込み
ここでは新規アプリを作成し、上記の手順でQVDに保存した売上明細のデータをロードして取込みます。アプリを新たに作成し、「ファイルおよびその他のソースからのデータを追加」を選択します。
「マイコンピューター」をクリックします。
先ほど「売上明細.qvd」を保存したフォルダパスを開き、「売上明細.qvd」を選択して右矢印のアイコンをクリックします。
データのプレビューが表示されます。「データの追加」をクリックします。
「閉じる」をクリックします。これでQVDから「売上明細」のデータを取り込む作業が完了しました。
標準モードと最適化モード
QVDからの読込みには、「標準モード」と「最適化モード」の2つがあります。CSVやDBなどのソースデータからデータをロードすることに比べQVDから読み込むのは高速ですが、その中でも「最適化モード」は「標準モード」に比べてより高速です。「データロードエディタ」からデータロードを実行し、データロードのログの以下の個所に「最適化済み」と表示されている場合は「最適化モード」で読み込んでいることが確認できます。
「最適化モード」はQVDからの読込みの際に変換処理が行われずにそのままデータを読み込む場合に有効となります。従って必要な変換処理はQVDの保存前に行う方が効率的です。ただし、以下の処理は「最適化モード」でも行うことが可能です。
- Where Exist(項目名)の処理
- 項目名の変更
全テーブルをQVDに保存するための便利な方法
上記では一つのテーブルをQVDに保存しました。アプリに含まれる全てのテーブルをエクスポートする場合、Store構文を複数記述するのではなく、以下のステートメントで一度に全てのテーブルをエクスポートできます。(赤字の保存先については実際の環境に合わせて修正が必要です。)
For i=NoOfTables() To 0 Step -1
Let vTableName = TableName($(i));
If Not isNull(NoOfRows('$(vTableName)')) Then
Store $(vTableName) Into [lib://売上データ/$(vTableName).qvd](qvd);
EndIf
Next