はじめに
Qlik Senseを初学者の方で、「データモデルビューに“$Syn 1”など見慣れないテーブルが出てきた」「思った通りにフィルタが機能しない」など場面に直面したことがあるかもしれません。その多くの原因となるのが合成キーです。
本記事では、合成キーとは何か、またその解消方法を解説します。
合成キーとは
Qlik Seneでは、複数のテーブルにおいて同じ名前のフィールドが2つ以上存在しているとき、内部的に合成キーが自動で作成されます。 合成キーは「$Syn 1」「$Syn 2」と自動生成されたテーブルとしてデータモデルビューアに表示されます。
合成キーが作られると、Qlik Senseは合成キーとなっているフィールドの組み合わせでテーブル同士を結合させることを自動判断で行っており、意図しない結びつきやパフォーマンス悪化の原因となることがあります。

なぜ合成キーが作成されるのか
以下のような状況で合成キーが作成されます。
- テーブルA・テーブルBなど複数のテーブルにおいて、同じフィールド名が2つ以上存在している。例:上図の「商品コード」「商品分類コード」。
- それらのフィールドが意図的には異なる役割を持っているにもかかわらず、名前が同じためQlikが自動で関連付けてしまっている。例:テーブルAのDateは「受注日」、テーブルBの「Dateは「請求日」のはずが、両方「日付」と命名されている。
合成キーの解消方法
先ほど例としてあげた以下のテーブルの合成キーを解消します。

合成キーが作成されている場合のリロードログ
合成キーが作成されている場合、リロードログに$Synテーブルの作成メッセージと合成キーがいくつ作成されているか表示されます。

合成キーの解消方法
元のロードスクリプト

手順
今回「商品コード」と「商品分類コード」で同じフィールド名が2つ以上存在しているため合成キーが作成されています。
- 「商品コード」と「商品分類コード」を1つの項目にまとめ、それをテーブル結合キーとします。例では項目の間に「-」を入れて結合キーを作成しています。
- 作成する「商品マスタ結合キー」に「商品コード」と「商品分類コード」の情報が含まれているため、商品マスタ側の「商品コード」と「商品分類コード」をコメントアウトし削除します。

合成キーが作成されていないことがわかります。

作成されたテーブル

おわりに
合成キーは、同じ名前のフィールドを複数テーブルが持っていることで自動作成されるQlik Senseの仕組みです。また、合成キーは意図しない結びつきやパフォーマンス悪化の原因になるので、データモデルビューアでテーブルの結びつきは正しいのかを確認しておくことが大切です。













