テーブルAとテーブルBの結合時に一部カラムを不一致条件にしたい

この商品(テーブルA)を買っている人が他に購入している商品(テーブルB)を出す場合、
テーブルAとテーブルBをuser_idで結合していますが、
テーブルBの中にテーブルAと重複するデータが存在しており、
「分析」の計算フィールドにてorder_idが不一致した場合カウントする、というような出し方をしています。
集計できてはいるのですが、テーブルB側から取得するデータ量が必要以上に多くなることで、SPICEの使用量を圧迫しています。

Tableauを使用する場合は
・user_idの一致で結合
・order_idの不一致で結合
というような結合条件で必要最低限のデータソースを作成できていたのですが、
QuickSightで上記のようなテーブル結合をSPICE容量を抑えて行うのに良い方法はございますでしょうか?

1 Like

@MktKb

ご質問いただきありがとうございます!

①分析画面ではなくデータセットの準備画面にて計算フィールドの作成とフィルター適用を行うことで、order_id が同じとなる行を除いたテーブルを作成する

(例)
計算フィールド作成
ifelse({order_id}={order_id[tableb.csv]},1,0)
フィルター適用画面

②データソース側で事前に結合いただく

といった方法があるのではないかと考えておりますが、いかがでしょうか?

1 Like

@MktKb 様、
その後の状況はいかがでしょうか。もし疑問が解消しているようでしたら、お手数ですが回答者のコメントに対し✅アイコンでSolutionの付与をお願いいたします。

@mririka @Masahito
ご回答いただきありがとうございます!

①を一旦試してみたのですが、
サンプルイメージにはない要素で一つ要件をお伝え忘れていたことがありまして、
「Table Aにはレコードがあるが、Table Bにレコードがないuser_id」も分析対象とするために、Table AとTable BをLeft Joinで結合する必要があります。

いただいた計算フィールドだとTable AとTable Bが必ず一致するレコードしか対象にならないため、Left Joinで使える形に修正することはできますでしょうか?

1 Like

@MktKb

ご確認いただきありがとうございます!

結合設定で Left Join を選択いただいた場合、Table B にレコードがない user_id も残すことが可能です。

また、Table B にレコードがない order_id に関して、
計算フィールド ifelse({order_id}={order_id[tableb.csv]},1,0) の値は 0 となるため、フィルターで省かれることはありません。

例えば、テーブル A に user_id が 6666 のユーザーを追加した場合、レコードは以下の参考画像のように残り、Table B 側のカラムは空欄となります。

こちらで想定される動きが実現できておりますでしょうか?

@mririka
ありがとうございます。
Left Joinでも想定している動きが実現できました。

結果的には、
①ではデータ量の大幅な削減には繋がらなかったのですが、
同時並行で検証してみた②の方(カスタムSQLの記述方法を改善)で、データ量を1/3程度削減できました。

ご教示いただきありがとうございました!

2 Likes