MktKb
1
この商品(テーブルA)を買っている人が他に購入している商品(テーブルB)を出す場合、
テーブルAとテーブルBをuser_idで結合していますが、
テーブルBの中にテーブルAと重複するデータが存在しており、
「分析」の計算フィールドにてorder_idが不一致した場合カウントする、というような出し方をしています。
集計できてはいるのですが、テーブルB側から取得するデータ量が必要以上に多くなることで、SPICEの使用量を圧迫しています。
Tableauを使用する場合は
・user_idの一致で結合
・order_idの不一致で結合
というような結合条件で必要最低限のデータソースを作成できていたのですが、
QuickSightで上記のようなテーブル結合をSPICE容量を抑えて行うのに良い方法はございますでしょうか?
1 Like
mririka
2
@MktKb 様
ご質問いただきありがとうございます!
①分析画面ではなくデータセットの準備画面にて計算フィールドの作成とフィルター適用を行うことで、order_id が同じとなる行を除いたテーブルを作成する
(例)
計算フィールド作成
ifelse({order_id}={order_id[tableb.csv]},1,0)
フィルター適用画面
②データソース側で事前に結合いただく
といった方法があるのではないかと考えておりますが、いかがでしょうか?
1 Like
@MktKb 様、
その後の状況はいかがでしょうか。もし疑問が解消しているようでしたら、お手数ですが回答者のコメントに対し✅アイコンでSolutionの付与をお願いいたします。
MktKb
4
@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 側のカラムは空欄となります。
こちらで想定される動きが実現できておりますでしょうか?
MktKb
6
@mririka
ありがとうございます。
Left Joinでも想定している動きが実現できました。
結果的には、
①ではデータ量の大幅な削減には繋がらなかったのですが、
同時並行で検証してみた②の方(カスタムSQLの記述方法を改善)で、データ量を1/3程度削減できました。
ご教示いただきありがとうございました!
2 Likes