
Tableau 8つのハードルを越える⑲「クエリパイプライン その8 表計算フィルター」

こんにちは。
今回は、クエリパイプラインの最終回、「表計算フィルター」の解説となります。
なお、前号は下記になります。
表計算フィルター(英語ではTable Calculation Filter)は、下記、クエリパイプラインの赤丸部分にあります。

この表計算フィルターの話をする前に、そもそも表計算(英語ではTable Calculation)って何?
という話をさせて下さい。
「表計算」は、作成したVizに対し、何かもうひと手間加え、値の見方を変えるような計算です。正確にいうと、データをディメンション毎に区切り集計した結果について、その結果をもう一段階変化させる、と言えます。
例えば、下図、2024年の月毎の売上を表示するVizを作りました。

これに、ひと手間加え、1月から月毎の売上を累計していったVizに変えたいとします。
その場合は、

このように、行の売上を右クリックし、「簡易表計算」→「累計」
と設定してあげます。
そうすると、

このように、売上合計を1月から徐々に累積させていったVizになりました。
もう一つ、例を紹介します。
下図は、地域毎の売上を横棒グラフにし、大きい順に上から並べたものです。
テキストラベルでも売上合計を表示しています。

このVizで、売上合計のテキストラベルを「第〇位」という順位(ランク)に変えてみたいと思います。
そのためには、マークにテキストとして置かれている合計(売上)を右クリック→「簡易表計算」→「ランク」を選びます。

そうすると、

上図赤丸のように、表示されていた売上合計のテキストが、地域の売上合計ランクに変化しました。
このように表計算は、表示されていた値にひと手間加え、違う見方をした値を表示させる。そんなイメージです。
表計算を試してみるうえで、表計算の「表」という言葉をあまり深く考えないでも大丈夫です。
この、表計算、利用場面は多岐に渡ります。表計算の説明をし始めると、かなり奥が深くなります。表計算に関しては、また別途解説を予定しています。
では、この「ランク」という表計算を利用しながら、表計算フィルターについて考えてみたいと思います。
さて、表計算フィルターは、簡単に表現すると表計算の結果を利用したフィルターです。
前々号で説明した、メジャーフィルターは、メジャーの集計結果を利用したフィルターでした。
表計算フィルターは、そのメジャーの集計結果から、ひと手間加えた表計算の結果を利用したフィルターという事になります。
もう一度、クエリパイプラインの図を見てみましょう。

メジャーフィルターと、表計算フィルターの間には
予測線の計算(Forecasts)、表計算、クラスター、総計の計算(totals)、というものが含まれています。これらの中から、表計算に注目していきます。
もう一度、こちら
地域毎の売上を横棒グラフにし、大きい順に上から並べテキストでランクを表示したVizを見てみましょう。

ここで、売上ランクの4位~8位のみを表示したいと思ったとします。
ランクの4位から8位のみを表示すれば良いので、
マーク、テキストの「合計(売上)Δ」を、CTRLを押しながらフィルターに持っていきましょう。(下図)
なお、Δの記号は、これが表計算を利用しているよ、という意味です。
また、CTRL押しながらドラッグ&ドロップした場合は、そのものを元の場所にも残したまま新しい位置にも追加するという操作になります。

フィルター設定画面が出るので、4~8に設定します。

すると

このように、なりました。
当然、4位から8位のみが表示されました。
特に、不思議な事はないと思います。ランクのテキストには4から8の数字がふられています。
通常は深く考える必要はないのですが、この表計算とフィルターの流れを整理してみましょう。
上記の例では
地域毎に売り上げを合計した
↓
売上の合計を、順位(ランク)に変えた。
↓
そのランクを用いて、4位から8位のみを保持するようフィルターした。
という流れになっています。あくまで、ランクを計算する時点では全部の地域が使われていますので、4位から8位という数字になっています。
もし、このVizを作りたい時にランクをフィルターに利用せず、

上図のように九州、中国地方、東北地方、四国、北海度を選択し保持とした場合はどうでしょう。

このようになりました。(上図)
フィルターには、地域が入りました。このフィルターはディメンション「地域」を利用したディメンションフィルターです。選んだ4つの地域が保持されています。
表計算のランクをフィルターに使用した場合と同じ結果にも見えますが、よく見るとテキストで表示されているランク、今回は1位から5位になっています。
なぜこうなったか考えてみます。

しつこいですが、もう一度このクエリパイプラインを見てみると、ディメンションフィルターはランクを計算する表計算よりずっと前に働いています。
つまり、地域を選んでフィルターした例では、5つの地域に絞ったあとそれぞれの地域の売り上げを集計し、その中でランク付けをしています。
なので、当然、残った5つの地域の中でのトップ、九州がランク1位となったわけです。
一方、ランクをフィルターに用いた

こちらの例では、全部の地域毎で売上を集計し全地域の中でランク付け。
その後に、ランクの値でフィルターしているので、4位から8位という数字が残っているわけです。
以上が表計算フィルターの概要ですが、もう一つ「実は表計算フィルターが使われている。」という例を紹介いたします。
今、下図のように年四半期毎の売上をVizにしました。

このVizを前年比を表示するVizに変更するには、下図にように行にある
合計(売上)を右クリック、簡易表計算で「前年比成長率」を選択します。

すると、下図のVizになります。

各年、各四半期の値が、前年の同四半期から成長率に変わりました。
同時に、2021年の部分は空欄になりました。2021年の前年比成長率を計算するには2020年のデータが必要ですが、元データに2020年のデータはないので計算のしようがなくNULLとなり空白となっています。
その事が右下の赤丸部分にも「4個のNULL」として表示されています。2021年の第1~第4四半期まで4か所(4つのマーク)が計算できず、NULLになっていますよ。という意味です。
なるほど、2021年の前年比成長率が計算出来ないことは分かったので、2021年の部分は消したいと思います。
そのためには、右下「4個のNULL」という文字をクリックし、

現れたメニューから「データのフィルター」を選びます。
すると、

このように、2021年の部分がなくなりすっきりしました。「4個のNULL」の文字も消えています。
その代わり、一か所、何かが加わった場所があります。フィルターシェルフを見て下さい。

このように、「合計(売上)Δ」が置かれています。
これは、先ほどの右下の文字「4個のNULL」をクリックし「データのフィルター」を選んだ時に、自動的に加わったものです。
利用しているのは、簡易表計算で求めた売上の前年比成長率です。
具体的にどのようなフィルターになっているか、フィルターの編集で確認してみると

このように、「特別」→「NULL以外の値」という設定になっています。
つまり、表計算で前年比成長率を求めた後、計算できずNULLとなった部分は除き、それ以外の計算できた値のみ保持するというフィルターになっています。
これを流れで示すと
①売上を集計し、合計を求める。
↓
②表計算で前年比成長率を求める。
↓
③求めた前年比成長率のNULL以外の値のみ保持する。(表計算フィルター)
このようになっています。
あくまで①②の段階では、2021年のデータも利用され前年比成長率が計算されています。2022年の前年比成長率は2021年のデータも用いて計算されています。
その後③で、前年比成長率を計算出来なかった2021年部分が除かれています。
以上の流れで働くフィルターを、Tableauが自動的に設定していました。
さて、もし仮に

途中の上図のVizが出来た段階で、「2021年は空白だからいらない。」と考えオーダー日をフィルターに持っていき、2021年を外した場合はどうなるでしょうか?

つまり、上図のようなフィルターです。これはディメンションフィルターです。
すると

このようになりました。確かに2021年の部分はなくなりましたが、今度は2022年の部分が空白になってしまいました。
何が起きたか流れを確認すると
①オーダー日のフィルターで2021年を外し2022~2024年のみ保持(ディメンションフィルター)
↓
②売上を集計し、合計を求める。
↓
③表計算で前年比成長率を求める。
このようになっています。
①の段階ですでに2021年のデータがなくなっているので、②で2021年の売上集計も行われず、③で2022年の前年比成長率の計算のしようがなくなっています。結果、2022年部分が空白となってしまいます。
これが、あまり意識していないうちに表計算フィルターが利用され、最後に働く事が利用されていた例となります。本例、表計算の解説のために利用させて頂きましたが、もちろんTableauが自動設定する場面では、深く考え過ぎずViz作りを行って頂いて問題ありません。
以上、長くなりましたが表計算フィルターの解説をさせて頂きました。
表計算フィルターの利用場面は、多岐にわたります。
それらの挙動の理解のポイントは、「表計算結果を利用したフィルターは、他のフィルターのあと最後に働いている。」となります。
これで全8回「クエリパイプライン」解説は終了いたします。
大変、長い内容で詳しく解説いたしましたが、
みのるさんがクエリパイプラインの要点を一つの記事にまとめて下さっているので、参考資料として紹介させていただきます。
https://note.com/minoru_tech/n/n9bbd821563bf
ご精読ありがとうございました。
連載記事続きは下記になります。次のテーマは「ブレンディング」です。
*連載記事すべてへのリンクは、こちらのマガジンにまとめています。
By ritz_Tableau
2020-2023 Tableau Zen Master | 2019-2021,2023 Tableau Public Ambassador |2021 certified as Tableau Certified Professional | DATA Saber
X(Twitter) : @ritz_Tableau
Tableau Public : https://public.tableau.com/profile/satoshi.ganeko#!/
*記事の中に不正確な点などありましたら、是非、X(Twitter) Direct Messageでお知らせ下さい。よろしくお願いします。m(__)m

おことわり
当記事のコンテンツについて、商用利用でない場合は許可なく転載して頂いて構いません。(ハードル画像および他のサイトから引用している画像は除く)
転載の際は、当記事へのリンクを掲載し転載であることを明記してください。商用利用の場合は許可なく転載しないで下さい。
当記事のコンテンツについて、可能な限り正確な情報を掲載するよう努めていますが、誤情報が含まれたり、情報が古くなっている可能性があります。当記事に掲載された内容、および、当記事からリンクやバナーによって移動したサイトに掲載された内容によって生じた、損害等の一切の責任を負いかねますのでご了承ください。よろしくお願いします。