前回の記事( https://qiita.com/cyberfuture/items/3f1cbc00c3b292c5caf1 )で、下記問題に対して対照するSQLを説明いたしました。
1、「売上合計の上位10の製品のカテゴリごとの2021年売上合計を表示します。」
本記事では、下記の問題に対して対照して見ます。
2、「2021年のデータをもとに、売上合計の上位10の製品のカテゴリごとの売上合計を表示します。」
前回記事では、フィルタ「年(オーダー日):2021」と「製品名」はそれぞれ独立していますが、今回では、フィルタ「年(オーダー日):2021」はメジャー「合計(売上)のフィルタ条件(Viz LOD)として有効する上、フィルタ「製品名」のフィルタ条件(Filter LOD)としても有効するはずです。
この問題に対して、SQLの方は理解しやすいなので、まずはSQLを作りましょう。
select カテゴリ, sum(売上) as 売上合計, sum(利益) as 利益合計 from dbo_Azure.注文
where year(オーダー日) = '2021'
and 製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文 where year(オーダー日) = '2021' group by 製品名 order by 売上合計 desc) A )
group by カテゴリ order by 売上合計 desc
そのうち、
製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文 where year(オーダー日) = '2021' group by 製品名 order by 売上合計 desc) A )
はフィルタ「年(オーダー日):2021」がフィルタ「製品名」のフィルタ条件(Filter LOD)としても有効するようになります。
Tableauのフィルタの間ではそれぞれ独立なので、片方のフィルタを他のフィルタを影響するには、「コンテキストに追加」したらOKです。
フィルタ「年(オーダー日):2021」を右クリックして、「コンテキストに追加」を選択します。そうすると、Tableau画面が下記のように変更する。
但し、フィルタが多数がり、一部のフィルタが「年(オーダー日):2021」に影響されて、それ以外のフィルタが「年(オーダー日):2021」に影響されない場合、コンテキストは適切でないようになります。
その場合、上位10製品の計算フィールドを作成するか、上位10製品のセットを作成するかのような手段があります。