【ThoughtSpotTips】データモデル結合ルールについて

ThoughtSpotのデータモデル結合ルールについて解説します。

 

こんにちは!ShintaroInomataです。

本記事では、データモデルエディターの設定タブにある、データモデル結合ルールについて解説します。

「結合を段階的に適用」には「(ほとんどの場合に推奨)」と記載されているため、「よく分からないけど、とりあえずこっちを選んでおこう」と設定している方も多いのではないでしょうか?

もちろん「結合を段階的に適用」で問題はありませんが、その仕組みや意味を理解しておくことで、より適切な検索が可能になります。

 

 

最初に結論を言うと、

結合を段階的に適用:検索に含まれる列を持つテーブルに対してのみ、結合が適用

全ての結合を適用:検索に含まれるかどうかにかかわらず、全てのテーブルに対して結合が適用

となります。

 

ただ、これだけではイメージしにくい部分もあるかと思いますので、それぞれの設定が実際にどのような挙動をするのかご紹介します。

 

検証データの説明

まず、今回の検証に使うデータについて説明します。

売上明細はファクトテーブル、製品マスタはディメンションテーブルとして扱い、両者は「product_id」をキーに結合されます。

このデータの特徴として、製品マスタの「product_id=106」は売上明細に含まれておらず、一度も売れた実績がないことが分かります。

 

 

結合を段階的に適用

モデルの作成

「結合を段階的に適用」に設定したモデルを作成していきます。

まず、テーブルタブで結合の設定を行います。左側を売上明細(ファクトテーブル)、右側を製品マスタ(ディメンションテーブル)を選択し、Join Typeは「内側(Inner Join)」、カーディナリティは「多対一」に設定します。

 

 

次に列タブの設定です。

「Product Id」と「Product Name」をディメンションテーブルから、「Revenue」をファクトテーブルから選択します。

 

 

最後に、設定タブで「結合を段階的に適用」が選択されていることを確認したら、モデルの作成は完了です。

 

挙動の確認

次に作成したモデルを使って検索を行います。

まず、「Product id」と「Product Name」を検索バーに入力し、テーブル形式で表示します。

ディメンションテーブルにのみ存在する「product_id=106」が含まれており、全体で6行が表示されています。

 

 

次にクエリビジュアライザーを確認してみます。

ディメンションテーブルの列が選択されているだけで、他のテーブルとの結合は行われていないことが分かります。

 

 

次に「Revenue」を検索バーに追加します。

すると、先ほどの6行から5行に減り、「product_id=106」が表示されなくなったことが分かります。

 

 

クエリビジュアライザーを確認します。

「Revenue」はファクトテーブルに存在する列のため、検索に追加すると、モデルで設定したとおりにディメンションテーブルとの結合が実行されます。

「product_id=106」はファクトテーブルに存在しないため、結合が成立せず、表示されません。これが「結合を段階的に適用」の挙動になります。

 

 

すべての結合を適用

モデルの作成

「すべての結合を適用」に設定したモデルを作成していきます。

モデルの設定タブで「すべての結合を適用」を選択し、それ以外の設定(テーブルの結合条件や列の選択など)は先ほどと同様にしてモデルを作成します。

 

 

挙動の確認

検索を行っていきます。先ほどと同様に、「Product id」と「Product Name」を検索バーに入力します。

 

 

先ほどは、ディメンションテーブルの「Product Id」と「Product Name」を検索バーに入力した際、ディメンションテーブルにのみ存在する「product_id=106」も含まれ、全体で6行表示されていました。

しかし今回は、同じ条件で検索しているにもかかわらず、表示されたのは5行のみで、「product_id=106」は含まれていません。

 

クエリビジュアライザーを確認します。

 

 

ファクトテーブルの項目を検索バーに入力していないにもかかわらず、結合が強制的に適用されています。

そのため、ディメンションテーブルにのみ存在する「product_id=106」はファクトテーブルと結合されず、表示されません。結果として表示件数は5行となりました。

これが、「結合を段階的に適用」と「すべての結合を適用」の大きな違いになります。

 

当然ながら、「Revenue」を選択しても、表示結果は変わりません。

 

 

まとめ

基本的には、推奨されている「結合を段階的に適用」を使用して問題ありません。この設定では、検索で使用された列に関連するテーブルのみが結合対象となるため、不要な結合が行われず、柔軟な検索が可能です。

一方で、「すべての結合を適用」は、検索で使用された列にかかわらず、あらかじめモデルで設定された結合が常に適用されるため、結合条件に一致しないデータは検索結果から除外されます。特定の条件に一致するレコードのみを厳密に抽出したい場合などに有効です。

ちなみに「すべての結合を適用」を設定していても、件数の多い方(今回の例ではディメンションテーブル)に対してOuter Joinを設定すれば、「結合を段階的に適用」と同様に全件表示されます。

一見すると些細な違いに思えますが、検索結果の件数や内容に影響を及ぼす部分ですので、それぞれの動作を正しく理解しておくことが重要です。

 

参考URL

ThoughtSpotドキュメント:https://docs.thoughtspot.com/cloud/10.9.0.cl/worksheet-progressive-joins

※2025/05/30時点の情報です(バージョン10.9.0.cl-65)

ThoughtSpotの導入はぜひKCMEで!

製品に対する操作方法、技術的な質問などは導入前・導入後に関わらずメールにてお答えします。また、ThoughtSpotを用いたビジュアライゼーション作成、組み込み開発、ヘルプデスク対応なども承りますので、お気軽にご相談ください。

おすすめの記事