新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

TableauのLOD(Level of Detail)の使い方メモ

Tableauは直感的に、マウスのドラッグアンドドロップでグラフが作れるのが魅力ですね。

しかし、エクセルのグラフをTableauに移植しようとした時に、マウス操作だけではうまくグラフが作れない時があります。

そういったグラフは、TableauのLOD(Level of Detail)機能を使えば解決することが多いのですが、LODは概念的でかつ、手で式を打ち込む必要があるので、ちょっと使っていないとすぐに使い方を忘れてしまいます。

そこで、ここでは自分用に、TableauのLODの使い方をメモしておこうと思います。

Tableauでグラフが表示されるまで

まずLODを理解するには、Tableauにおいて、グラフに表示されるデータは何なのかを知っておくと楽です。

Tableauのデータは、最初のデータソースから始まって

  1. コンテキスト
  2. フィルター
  3. ディメンション

の順にデータが絞り込まれていき、最終的には行・列で区切られた範囲内のデータを使ってグラフが表示されます。

TableauのLOD(Level of Detail)の使い方メモ

行・列で区切られた粒度が最小単位で、通常、この粒度より小さい粒度や、逆に、この粒度より大きい粒度の計算を、この区切り内で行うことはできません。

Tableauのマウス操作だけで作れないエクセルのグラフを見てみると、この粒度が異なる計算が混ざっているグラフが多いです。

粒度の異なる計算とは?

例えば、地域とカテゴリーで分けた、平均売上グラフがあったとします。

TableauのLOD(Level of Detail)の使い方メモ

小さい粒度

顧客単価のグラフにしたい場合などです。

そのためには、顧客単位で合計を計算して、その平均値をグラフにするのですが、グラフのディメンションは「地域・カテゴリー」までなので、それより小さい粒度「顧客」で計算する必要があります。

大きい粒度

地域平均との差分グラフを出したい場合などです。

そのためには、地域内での平均を計算して、その平均値を、元の地域・カテゴリー平均から引いた値をグラフにするのですが、グラフのディメンションは地域・カテゴリーで区切られているので、 地域内での平均は「カテゴリー」の垣根を超えた、より大きい粒度で計算する必要があります。

これらの、行・列で区切られた粒度以外の粒度の計算は、マウス操作だけではできず、LODを使う必要があります。

では、LODを使って上記のグラフを作るやり方を見てみます。

INCLUDE

行・列で区切られた粒度より、更に細かい粒度で計算したい時に使用します。

前述の顧客単位での売上は下記の式で求められます。

顧客別売上

{INCLUDE [顧客名] : SUM([売上])}

TableauのLOD(Level of Detail)の使い方メモ

これをグラフにドロップして平均を取れば、前述の「顧客単価」グラフになります。

TableauのLOD(Level of Detail)の使い方メモ

行・列で絞り込まれたデータを使って、INCLUDEで指定したディメンションで、更に細かく分けて計算が行われます。

ディメンションはカンマ区切りで複数指定することもできます。

TableauのLOD(Level of Detail)の使い方メモ

前述の通り、INCLUDEはコンテキスト・フィルター・ディメンションで絞り込まれた後のデータに対して適用されます。

EXCLUDE

行・列で区切られた粒度だけど、指定したディメンションは無視して(垣根を超えて)計算したい時に使用します。

前述の、カテゴリー平均と地域平均との差分は下記の式で求められます。

カテゴリー平均(全体平均差)

{INCLUDE [カテゴリ]:AVG([売上])} - {EXCLUDE [カテゴリ]:AVG([売上])}

TableauのLOD(Level of Detail)の使い方メモ

これをグラフにドロップすれば、「カテゴリー平均(全体差分)」グラフになります。

TableauのLOD(Level of Detail)の使い方メモ

INCLUDE同様、ディメンションはカンマ区切りで複数指定することもできます。

EXCLUDEは、フィルターでデータが絞り込まれた後に適用されます。

これはどういうことかと言うと、EXCLUDEで超えられる垣根は、行・列で区切られたディメンションだけで、コンテキスト・フィルターの垣根を超えての計算はできません

FIXED

指定したディメンションだけで計算したい時に使用します。

フィルター、行・列のディメンションが設定されていても、それらは存在しなかったかのように、全く無視します

例えば、カテゴリー売上は下記の式で求められます。

カテゴリー売上(FIXED)

{FIXED [カテゴリ] : SUM([売上])}

TableauのLOD(Level of Detail)の使い方メモ

これをグラフにドロップすれば「カテゴリー売上」グラフになります。

TableauのLOD(Level of Detail)の使い方メモ

地域が異なっても値が同じで、地域ディメンションが無視されているのが分かります。

INCLUDEEXCLUDE同様、ディメンションはカンマ区切りで複数指定することもできます。

FIXEDはコンテキストで絞り込まれた後のデータに対して適用されます。

フィルターは無視するので、上記の「カテゴリー売上」グラフは、「年度」フィルターが適用されているのですが、フィルターに関係なく、全年度のカテゴリー売上になっています。

日時のディメンション

日時データは「年・月・日」などと、マウス操作で粒度を任意に指定することができます。

TableauのLOD(Level of Detail)の使い方メモ

しかし、LODでディメンションを指定する際は、日時のディメンションをそのまま入れてもうまくいきません。

TableauのLOD(Level of Detail)の使い方メモ

LODで任意の粒度の日時ディメンションを指定する際は、一旦日時ディメンションから、分けたい粒度のディメンションを作成して、そのディメンションでLODを指定します。

例えば、年粒度でLODするには、日時ディメンションから、年ディメンションを作成します。

TableauのLOD(Level of Detail)の使い方メモ

そして、その年ディメンションをLODで使用します。

TableauのLOD(Level of Detail)の使い方メモ

感想など

INCLUDEEXCLUDEは、ノーマルのグラフを起点に、ディメンションを追加・削除していくようなイメージでお互い似ているのですが、FIXEDは「フィルターを無視する」「指定したディメンションだけしか見ていない」など、ちょっと毛色が違います。

特にフィルターを使ったグラフでFIXEDを使った際、FIXEDがフィルターを無視するのを忘れて、思った以上に広範囲のデータを集計していたということがあるので注意が必要です。

フィルターを使ったグラフで、FIXEDで特定のフィルターを適用したい場合は、FIXEDで適用したいフィルターのディメンションを追加するとできます。

例えば前述のFIXEDを使った「カテゴリー売上」グラフにおいて、年度のフィルターを有効にするには、FIXEDに「年」ディメンションを加えるとうまくいきます。

TableauのLOD(Level of Detail)の使い方メモ