以下のようなデータがあるとします。
行に商品、列に店舗を配置し、販売数を集計し、日付でフィルターをすると
2024/12/1の場合は以下のようになり
2024/12/2の場合は以下のようになると認識しています。
実績がなくても商品がでるようにしたいです。
以下のような感じです。
データとしてBの店舗がぶどうを持てばよいのですが、現実的ではありません。
どうにか関数などを駆使して対応することはできないでしょうか?
以下のようなデータがあるとします。
行に商品、列に店舗を配置し、販売数を集計し、日付でフィルターをすると
2024/12/1の場合は以下のようになり
2024/12/2の場合は以下のようになると認識しています。
実績がなくても商品がでるようにしたいです。
以下のような感じです。
データとしてBの店舗がぶどうを持てばよいのですが、現実的ではありません。
どうにか関数などを駆使して対応することはできないでしょうか?
@optarc.yamaji さん、ご質問ありがとうございます。
おっしゃるようにBの店舗に対しぶどうのデータが存在していないので、QuickSightのなかに完結して実現するのは難しいのではないかと思います。
もしデータが外部のリレーショナルなデータセット(例. Redshift, Athena, RDSなど)のものであれば、カスタムSQLを使い、日付・店・商品の組み合わせに対し販売数が無い箇所は明示的にゼロでレコードを作るようにしておけば、一応ご要望は実現できるかと思います。ただし、データ量に応じてデータソース側でのクエリ負荷が増えていきますのでご注意ください。
ご参考までに、ご提示いただいたのと同じデータセットを、Athenaを使いカスタムSQLで処理した例です↓
WITH all_combinations AS (
SELECT DISTINCT sales_date, store, item
FROM (
SELECT DISTINCT sales_date FROM store_sales
) sales_dates
CROSS JOIN (
SELECT DISTINCT store FROM store_sales
) stores
CROSS JOIN (
SELECT DISTINCT item FROM store_sales
) items
)
SELECT
ac.sales_date, ac.store, ac.item, coalesce(ss."order", 0) as "order"
FROM
all_combinations ac
LEFT JOIN store_sales ss
ON ac.sales_date = ss.sales_date
AND ac.store = ss.store
AND ac.item = ss.item
GROUP BY
ac.sales_date, ac.store, ac.item, ss."order"
データ上にない場合は難しいとのこと承知いたしました。
データ量が多くクエリ負荷が懸念されますので、対応は難しそうです。
ご確認いただきありがとうございました。