アクションを利用したフィルターについて

データセットAとデータセットBがあり、1つの分析で別シートでビジュアルを作成しようとしています。
Aで絞り込んだ結果から表示されたユーザーで、Bのビジュアルをフィルターをかけたいと思っています。

ナビゲーションアクションを利用して、セルで指定したものを別シートのパラメータに設定し、フィルターをかけることはしたことがあるのですが、列選択はできるのでしょうか?

もしくは、もっといい方法があれば教えていただきたいです!

@optarc.yamaji

ご質問頂きありがとうございます。

課題をより明確に理解するため、列選択というのはどのような操作を想定されているのか、具体例、サンプルデータや理想のアウトプットイメージなどの情報を追加でご共有頂けますでしょうか?

ご確認ありがとうございます。

イメージといたしましては、以下のようなデータセットAとBがあり、それぞれ1つの分析で利用を想定しています。

データセットAで金額が空白のユーザーに絞り込んだ結果、そこで取得した結果をデータセットBのパラメータとして利用したいと思っております。

以前、セルにあるユーザーBをクリックして、ナビゲーションアクションを利用してデータセットBのビジュアルのパラメータに設定する、ということをしたことがあるのですが、ユーザー全部をパラメータにする、もしくはその結果をデータセットBに反映させることができるのかが知りたいです。

@optarc.yamaji
詳細な情報ありがとうございました。
残念ながら、現時点で、列データ(複数の値、B D E G I など)そのものをパラメータとして渡すことはできません。
代替案を検討するにあたり、どうしてデータセットAとデータセットBを分離して、別なシート、別なビジュアル、別な分析としているのでしょうか?
実装の背景を可能な範囲でかまいませんので、お聞かせいただけないでしょうか?
通常ですと、「SQLのWhere句で、XXX is NULL と書いてしまって、ユーザーをキーとしてテーブルを2つとも突合すれば良さそうだ。」と思ってしまいました。

1 Like

ご回答ありがとうございます。

実装の背景を可能な範囲でかまいませんので、お聞かせいただけないでしょうか?
通常ですと、「SQLのWhere句で、XXX is NULL と書いてしまって、ユーザーをキーとしてテーブルを2つとも突合すれば良さそうだ。」と思ってしまいました。

上記の対応をしようと思わなかった背景としましては以下になります。
1.データセットAはS3にファイルが到達するたび頻繁に更新されるデータセットで、データセットBはカスタムSQLで5つのデータカタログを結合して作成した過去3年分のデータとなっており、結合して利用しようと思わなかった
2.SQLが書けないユーザーでの実装を想定していた

よろしくお願い致します。

@optarc.yamaji
お忙しいところ、回答いただきありがとうございます。
代替案として、以下のいずれかが現実的かと思います。

  1. Redshift Provisioned をお使いであれば、Redshift Spectrum を使って S3 のファイルにクエリをすることを検討してみてはいかがでしょうか? CSV とかでファイルが更新されていくのであれば、 Glue 等を使って、 Parquet 等の列指向型ファイルフォーマットへの変換および日付等によるパーティション設定をおすすめします。それによって、頻繁に更新されるファイルに相当するテーブルと過去 3 年分のデータもテーブル結合によって準備でき、データセット A とデータセット B のユーザーをキーにして突合も容易になると思います。
  2. Redshfit Serverless をお使いであれば、Redshift Spectrum と同等の機能が内包されておりますので、Redshift Spectrum のような特別な準備をすることなく、Provisioned と同様に S3 へのアクセスが可能になります。
  3. Redshift を使わない方法として、S3 上で上記と同様のファイルフォーマット変換およびパーティションを設定していただいた上で、 Athena による SQL でのテーブル結合を検討してみると良いと思います。

1 もしくは 2 を検討していただいた場合、Redshift の管理下にあるストレージにデータを保存するといったことで、容量を圧迫することなく、期待されていることが実現できると思います。

1 と 3 のいずれの場合も、ファイルスキャンによる課金が発生しますので、S3 上のファイル管理を最適化する必要があります。列指向型ファイルフォーマットに変換する、パーティション設定をするというのが該当します。

2 Likes

ご回答ありがとうございます。

どちらにしても結合をして利用するのが望ましいということですね。
情報が不足していました。
データセットAはS3イベントでLambdaが動きRedshiftで10分おきに更新されています。
データセットBはGlueのカタログをQuickSightのカスタムSQLをAthenaで叩き5つのカタログを結合しています。

結合が必須であれば、Redshiftへの負荷はかけたくないため、データセットAをSpectrumにし、データセットBを結合するSQLにデータセットAを追加することでSQLの結合はできそうです。
しかし、データセットAをSpectrumにする際、上書きが必要のため、一度ファイル削除してコピーすることを考えるとデータセットAのデータがユーザーから見えなくなる(データなし)の状態に陥る可能性と、上記状態を作るのに開発の費用が発生してしまい、費用をかけずに行いたいので実装は検討が必要になりそうです。

@optarc.yamaji

しかし、データセットAをSpectrumにする際、上書きが必要のため、一度ファイル削除してコピーすることを考えるとデータセットAのデータがユーザーから見えなくなる(データなし)の状態に陥る可能性と、上記状態を作るのに開発の費用が発生してしまい、費用をかけずに行いたいので実装は検討が必要になりそうです。

このケースでは、データを更新するバケットと可視化や分析に使うデータのバケットを分割してしまえば解決できると思います。
開発という観点では、可視化や分析につかうバケット側の更新はどのように実行するのか検討する必要はあると思います。
つまり、データを更新するバケットが差分更新ではなく、洗替の場合、可視化や分析に使うバケットを差分更新することが可能なのかどうなのかの検討をすることになると思います。
洗替されているが、差分が追加されているだけのファイルの削除・コピーなのであれば、実装はそれほど難しくないかもしれません。
しかしながら、既存データの更新が含まれているファイルの削除・コピーなのであれば、実装は少し面倒になると思います。いわゆるCDC(Change Data Capture)の実装がともなうからです。
このブログ に似たような解決方法が書いてありますので参考にしてみてください。

2 Likes