【Tableau】クエリパイプライン(計算順序・フィルター適用順序)の基礎を理解しよう!

こんにちわ@Yoshimiです。

Tableauはドラッグ&ドロップでお手軽にデータの可視化が可能です。
データを絞り込む際、自分の思っていた絞り込み結果にならないことが往々にあると思います。それは、Tableauの計算順序が自分の想定と異なっているために起きている事象です。

Tableauには「クエリパイプライン」と呼ばれる、計算順序が存在します。
そのクエリパイプラインを理解することで、ダッシュボードの値も正しく表示されます。

一緒に見ていきましょう。

Contents

クエリパイプラインとは

Tableauには、下記の図の流れで、操作順序が決められております。

引用:Tableau の操作の順序(公式サイト)

英語で書かれていますが、なんとなく理解できるはず。でも、よりわかりやすくするために和訳しました。

抽出フィルターとデータソースフィルターはTableauがデータを読み込む際に、動くフィルターです。
DBの操作やつなぎこみでTableauで可視化するための必要な情報はここでフィルタリングがかかります。

ダッシュボードを作成する上で、主に使うのはコンテキスト以下のフィルター、操作と思っていても良いです。

実際にクエリパイプラインを経験しよう

「上位Nフィルター」と「ディメンションフィルター」

列シェルフに「売上」、行シェルフに「製品名」を配置し、降順にソートします。

「製品名」をフィルターに配置し、「上位」を選択します。
フィールド指定の「売上」、「10」を選択します。

売上上位10位の製品名に絞られました。

ここで、フィルターに「地域」を配置し、「九州」してみてください。

期待している結果としては、九州地域で、売上上位10位の製品名だと思うのですが、結果、上位7件しか表示されません。

これは、Tableauのパイプラインの計算順序によって得られた結果になります。

クエリパイプラインを確認しましょう。
パイプラインでは、「上位N」でフィルターがかかってから(絞り込まれてから)、「ディメンション」フィルターで絞り込まれます。

つまり、「上位N」フィルターの時点で、今回のデータソースは10件に絞り込まれてしまい、その絞り込まれた10件から「地域」で九州に絞り込まれた製品名が抽出された形になります。

期待する絞り込み結果としては、九州地域で、売上上位10位の製品名を出すにはどうしたらよいでしょうか。クエリパイプラインを確認すると計算順序の上位に「コンテキスト」フィルターがあります。「コンテキスト」で操作してみます。

フィルターに配置した「地域」を右クリックし、パネルから「コンテキストに追加」を選択します。
九州地域で、売上上位10位の製品名が表示されました。フィルターの表示単一リストで確認すると、各エリアで売上上位10位の製品名が表示されることがわかります。

「FIXED LOD表現」と「ディメンションフィルター」

TableauといえばLOD表現!というくらいLOD表現を使いこなせると多種多様なVizが作成できます。LOD表現の中でも「FIXED」は格別に使われていますので、FIXED LOD表現とディメンションフィルターの関係を確認してみます。
kんテキスト
まず、下記のようにピルを配置してください。
「売上」をマークの「ラベル」に配置し、行シェルフに「カテゴリ」「サブカテゴリ」を配置します。表形式のVizになります。
計算フィールドを以下の計算式で作成してください。名前な好きにしていただいて結構です。

{FIXED :SUM([売上])}

作成した計算フィールド(私は、計算1ですので、以下「計算1」)を表に追加します。計算1をダブルクリック、ドラッグ&ドロップで追加可能です。
(LODに関しては【Tableau】LOD計算・表現(FIXED, INCLUDE,EXCLUDE)を使ってみようで確認できます。)

「計算1」では、全体の売上合計が集計されて「227,176,841」と表示されています。
では、フィルターをかけて、「家具」だけを表示したいと思います。「家具」でフィルターをかけるので、「計算1」も「家具」だけの売上合計で集計され表示されるはずです。
行シェルの「カテゴリー」を右クリックし、フィルターを表示。その後、「家具」だけを選択してみましょう。

「計算1」は「227,176,841」のままです。期待した結果にはなっておりません。

クエリパイプラインを確認すると計算順序の上位に「コンテキスト」フィルターがあります。「コンテキスト」で操作してみます。
フィルターの「カテゴリ:家具」を右クリックし、「コンテキストに追加」を選択してください。

Viz内の「計算1」に変化はありましたか?
「計算1」は家具のみの売上合計に変わったはずです。

なぜクエリパイプラインがあるのか?を理解すると腹落ちする

クエリパイプラインという計算順序が公式からアナウンスされているのかを理解すると、良質なVizが作成できると思います。

Tableauに限らず、BIツールに限らずですが、何事も物量が多ければ処理完了まで時間がかかります。

ビジネスにおいて、データはどんどん多くなっていく一方ですので、DWHなるものも多くの企業では取り入れられてきており、必要な情報を必要なときだけ、お手軽に取り出そうという文化になってきております。クエリパイプラインでいう、抽出フィルター、データソースフィルターあたりの概念が当てはまると思っています。

とはいえ、それでも数千万件、数億件というデータを取り扱う場合もあります。ですので、このクエリパイプインという計算順序を明確にすることで、必要なデータだけでVizを作成し、高速に分析できる環境を提供しようねというのが伺えます。

例をあげるとすれば、全てのデータ(Lowデータ)を取得すると100億件のデータがあったとします。Tableauで読み込んで、Vizを作成する際、必ずディメンションフィルターでフィルターする項目があったとしたら、全てを読み込んでから絞り込むという時間が無駄ですよね。それを事前に絞り込んでしまいましょとう考えからきていると思います。

DWHを設計する際にもデータの流れは大切な設計ですので、クエリパイプラインの概念は納得いくものがあります。

ですので、Tableauとしては、この方が高速に処理できるという機能と理解し、活用していくのが良いともいます。(慣れるしかないですね・・・)

最後に

ドラッグ&ドロップで簡単に基本的な分析用のVizは作成できるものの、少し踏み込んだ分析を行いたい、抽出結果を出したいとなると、やはり、ツール特有の機能は理解する必要があると感じました。Tableauに限ってではないですが、もっともっと壁にぶち当たり、壁を乗り越えていくことで、レベルアップできると思っているので、とにかく触っていこうと思います。

それにしても、Tableauは本当によくできた製品です。

中小企業向けの代理店、販売パートナーとか目指そうかな。

Python勉強したいのであればこれ一択


AIの技術、データ分析を身につけるにはPythonが取り組みやすいです。専門コースもあるので、まずは、気軽に問い合わせしてみてください!
技術者も多くなってきていますが、世界と戦うにはまだまだ人材不足です。高い年収を狙うなら今がチャンス!


フリーランスエンジニアが登録して欲しいエージェント


長くお世話になっているengineer-route。
単価、稼働日数、稼働時間相談も親身にのってくれます。しっかりしたサポート・コミュニケーションを交わすことで「はいってみた違った」というエンジニアあるあるを極力回避できると思います。私は当たりしかないです。