はじめに

年や月単位で売上データを同じフォーマットで別々のファイルで管理している場合などには、それらのファイルのデータを一つのテーブルに纏める必要があります。Qlik Senseではこれらの複数のファイルの項目名と項目数が完全に合致する場合には自動的に一つのテーブルに連結して纏めてくれます。また、項目が異なる場合でも指定を行えば強制的に一つのテーブルに連結することも出来ます。このエントリではそれらのテーブル連結についてご説明します。

準備

このエントリでは、「Qlik Senseロードスクリプトによる変換処理の基礎」が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。

>>「Qlik Senseロードスクリプトによる変換処理の基礎」

また今回、追加で「売上明細_追加1.xlsx」、「売上明細_追加2.xlsx」の2つのファイルを利用します。以下からダウンロードして下さい。

>>「追加データ」のダウンロード

自動連結

Qlik Senseではロードされた複数のテーブルの項目名と項目数が完全に合致する場合、これらのテーブルは一つに纏められます。これを「自動連結」と呼びます。ここでは、既にロード済みの「売上明細」テーブルと同じ項目定義の「売上明細_追加1.xlsx」のファイルを読み込み、データを連結して追加したいと思います。

まず、「データモデルビューア」を開いて「売上明細」テーブルを選択し、行数を確認します。1,000行格納されていることが確認できます。

image

ダウンロードした「追加データ」を解凍して保存し、「Qlik Senseロードスクリプトによる変換処理の基礎」でご説明した手順に従って解凍したフォルダをデータ接続先として追加します。

1

データ接続定義~「追加データ」の「データを選択」アイコンをクリックして「売上明細_追加1.xlsx」のファイルを選択し、「売上明細_追加1.xlsx」のファイルを読み込むスクリプトを「自動生成セクションタブ」の最後尾に追加します。そしてデータのロードを実行します。

2

ロードの完了後、「データモデルビューア」で再度「売上明細」テーブルの行数を確認します。1,025行に増えていることを確認して下さい。この様に同じ項目名と項目数を持つファイルは自動的に連結されます。

image

尚、ここでは実際に実行は行いませんが、以下の形でファイル名に「*(ワイルドカード)」を使うことで複数のファイルを一度にロードすることも可能です。この様にして、同様のフォーマットのファイルはまとめて取り込んで一つのテーブルに連結することも可能です。

image

強制連結

「売上明細_追加2.xlsx」のファイルを同様の手順で追加します。既存の「売上明細」テーブルには「都道府県コード」の項目が含まれていますが、このファイルにはこの項目が含まれていません。まずはこのような場合にそのままデータを取り込むとどのようになるかを確認してみます。

先ほどと同様の手順で「売上明細_追加2.xlsx」のファイルを読み込むスクリプトを「自動生成セクションタブ」の最後尾に追加し、データのロードを実行します。

image

データロードを実行すると、以下のように「合成キー」が作成された警告が表示されます。

image

「データモデルビューア」を確認すると「売上明細」とは別に「売上明細-1」というテーブルが作成され、こちらに先ほどロードしたデータが格納されてしまっていることが確認できます。またそのため、「合成キー」が作成されてしまっています。Qlik Senseでは同名の項目をキーとして自動で紐付けますが、テーブル間で複合キーの関係が存在する場合にはこの「合成キー」が作成されます。(合成キーの詳細については「合成キーと循環参照」のエントリをご参照ください。)

image

Qlik Senseでは2つのテーブルが全く同じ項目の構造を持たない場合でも、「Concatenate」プレフィックスを利用することで2つのテーブルの結合を強制することができます。先ほど追加したスクリプトに以下の赤字の部分を追加してデータのロードを再度実行します。


Concatenate(売上明細) LOAD
    伝票番号,
    販売日付,
    顧客コード,
    商品コード,
    数量,
    販売価格,
    販売原価
FROM [lib://追加データ/売上明細_追加2.xlsx]
(ooxml, embedded labels, table is 売上明細);

「データモデルビューア」を確認すると先ほどのテーブルが追加されておらず、売上明細のテーブルにデータが追加されて行数が1,050行となっていることが確認出来ます。

image

この時データを確認すると、追加した「売上明細_追加2.xlsx」のデータは「売上明細」テーブルに強制的に結合されていますが、「都道府県コード」を含まないためヌル値となっていることが確認できます。この様に項目が異なる場合でも強制的にテーブルを連結して纏めることが可能です。

image

連結の回避

上記のケースとは逆に、「Noconcatenate」プレフィックスを使うことで項目名と項目数が完全に合致する複数のテーブルの結合を回避することも出来ます。

image

まとめ

以上、Qlik Senseでの複数ファイルの自動連結および強制連結についてご説明しました。