連結
連結とは、2 つのテーブルを 1 つにまとめる操作のことです。
2 つのテーブルを連結するには、テーブルを上下に重ね合わせます。その際、各テーブルにそれぞれ固有の列名を持つ列が 1 つ必要となります。データは変更されず、作成されるテーブルには元の 2 つのテーブルの合計と同じ数のレコードが含まれます。複数の連結操作を連続で実行して、複数のテーブルを連結したテーブルを作成できます。
自動連結
ロードされた複数のテーブルの項目名と項目数が完全に一致する場合、Qlik Sense はさまざまなステートメントのコンテンツを 1 つのテーブルに連結します。
自動連結させるためには、項目の数と名前は、完全に同じでなければなりません。2 つの LOAD ステートメントの順番は任意ですが、テーブルには、最初にロードされたテーブルの名前が与えられます。
次の手順を実行します。
- Scripting Tutorial アプリでデータ ロード エディターを開きます。
- Dates タブをクリックします。
- [データのロード] をクリックします。
- スクリプト セクション Dates の新しい行で、Table2 の LOAD ステートメントをコピーします。これによりデータが 2 回ロードされます。2 つ目のテーブルに Table2a という名前をつけます。
- [データのロード] をクリックします。
- [データ モデル ビューア] を開きます。
- [プレビューの表示] をクリックします。
これまでに記述したロード スクリプトに基づき、Qlik Sense は 628 行を Dates.xlsx データ ファイルから Table2 にロードします。
既存のスクリプトを削除して、以下のスクリプトをコピーして貼り付けることもできます。
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
これで、スクリプトは次のようになります。
Qlik Sense は Table2 をロードせず、続いて Table2a をロードしません。その代わり、Table2a の項目名と項目数が Table2 と同じであることを認識します。次に Table2a のデータを Table2 に追加し、テーブル Table2a を削除します。その結果、Table2 の行数が 1,256 行になります。
Table2 のみが作成されています。Table2 を選択します。このテーブルには 256 行あります。
強制連結
複数のテーブルにまったく同じ項目セットが存在しない場合でも、Qlik Sense は 2 つのテーブルを強制的に連結できます。強制連結は、スクリプトで Concatenate プレフィックスを使用すると実行できます。このプレフィックスは、特定のテーブルを別の名前のテーブルまたは一番最近に作成されたテーブルに連結します。
次の手順を実行します。
- Table2a の LOAD ステートメントを編集し、Concatenate を追加して Week をコメント アウトします。
- [データのロード] をクリックします。
- [データ モデル ビューア] を開きます。
- データ モデル ビューアで Table2 をクリックし、次に [プレビュー] をクリックします。
- Table2 の Week をクリックします。プレビューには、この項目に Null でない値が 628 個あることを示されます。しかし、他の項目をクリックすると、Null でない値の数は 1256 と表示されます。Week は Table2 から 1 回のみロードされています。結果として生成されるテーブルのレコード件数は、Table2 と Table2a に含まれるレコードの合計となります。
スクリプトは次のようになります。
Table2a:
Concatenate LOAD
"Date",
Month (Date) as "Month",
Quarter,
// "Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Week をコメント アウトすることで、テーブルがまったく同じにならないようにします。
ご覧のように、Table2a は作成されていません。
テーブルには Date、Month、Quarter、Week、および Year という項目があります。項目 Week が表示されたままになっているのは、Table2 からロードされているためです。
連結の防止
ロードされた複数のテーブルの項目名と項目数が完全に一致する場合、Qlik Sense はさまざまなステートメントのコンテンツを 1 つのテーブルに連結します。このような動作は NoConcatenate ステートメントによって防ぐことができます。関連付けられた LOAD または SELECT ステートメントでロードされたテーブルは、既存のテーブルに連結されません。
次の手順を実行します。
- 2 つのテーブルのコンテンツを完全に分離させるには、Table2a の LOAD ステートメントに NoConcatenate を追加し、一致する項目に基づいて Qlik Sense が合成キーを生成しないように、項目の名前を変更します。Table2 の Week をコメント解除して 2 つのテーブルの項目を同じにします。
- [データのロード] をクリックします。
- [データ モデル ビューア] を開きます。
- 連結の実演は以上で終了です。Table2a はもう必要ありません。Table2a の LOADステートメントからすべての行を削除し、[データのロード] をクリックします。
スクリプトは次のようになります。
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
NoConcatenate LOAD
"Date" as "Date2",
Month (Date) as "Month2",
Quarter as "Quarter2",
"Week" as "Week2",
"Year" as "Year2"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
これで 2 つのテーブルが完全に分離されました。