Tableauは直感的に、マウスのドラッグアンドドロップでグラフが作れるのが魅力ですね。
しかし、エクセルのグラフをTableauに移植しようとした時に、マウス操作だけではうまくグラフが作れない時があります。
そういったグラフは、TableauのLOD(Level of Detail)機能を使えば解決することが多いのですが、LODは概念的でかつ、手で式を打ち込む必要があるので、ちょっと使っていないとすぐに使い方を忘れてしまいます。
そこで、ここでは自分用に、TableauのLODの使い方をメモしておこうと思います。
Tableauでグラフが表示されるまで
まずLODを理解するには、Tableauにおいて、グラフに表示されるデータは何なのかを知っておくと楽です。
Tableauのデータは、最初のデータソースから始まって
- コンテキスト
- フィルター
- ディメンション
の順にデータが絞り込まれていき、最終的には行・列で区切られた範囲内のデータを使ってグラフが表示されます。
行・列で区切られた粒度が最小単位で、通常、この粒度より小さい粒度や、逆に、この粒度より大きい粒度の計算を、この区切り内で行うことはできません。
Tableauのマウス操作だけで作れないエクセルのグラフを見てみると、この粒度が異なる計算が混ざっているグラフが多いです。
粒度の異なる計算とは?
例えば、地域とカテゴリーで分けた、平均売上グラフがあったとします。
小さい粒度
顧客単価のグラフにしたい場合などです。
そのためには、顧客単位で合計を計算して、その平均値をグラフにするのですが、グラフのディメンションは「地域・カテゴリー」までなので、それより小さい粒度「顧客」で計算する必要があります。
大きい粒度
地域平均との差分グラフを出したい場合などです。
そのためには、地域内での平均を計算して、その平均値を、元の地域・カテゴリー平均から引いた値をグラフにするのですが、グラフのディメンションは地域・カテゴリーで区切られているので、 地域内での平均は「カテゴリー」の垣根を超えた、より大きい粒度で計算する必要があります。
これらの、行・列で区切られた粒度以外の粒度の計算は、マウス操作だけではできず、LODを使う必要があります。
では、LODを使って上記のグラフを作るやり方を見てみます。
INCLUDE
行・列で区切られた粒度より、更に細かい粒度で計算したい時に使用します。
前述の顧客単位での売上は下記の式で求められます。
顧客別売上
{INCLUDE [顧客名] : SUM([売上])}
これをグラフにドロップして平均を取れば、前述の「顧客単価」グラフになります。
行・列で絞り込まれたデータを使って、INCLUDE
で指定したディメンションで、更に細かく分けて計算が行われます。
ディメンションはカンマ区切りで複数指定することもできます。
前述の通り、INCLUDE
はコンテキスト・フィルター・ディメンションで絞り込まれた後のデータに対して適用されます。
EXCLUDE
行・列で区切られた粒度だけど、指定したディメンションは無視して(垣根を超えて)計算したい時に使用します。
前述の、カテゴリー平均と地域平均との差分は下記の式で求められます。
カテゴリー平均(全体平均差)
{INCLUDE [カテゴリ]:AVG([売上])} - {EXCLUDE [カテゴリ]:AVG([売上])}
これをグラフにドロップすれば、「カテゴリー平均(全体差分)」グラフになります。
INCLUDE
同様、ディメンションはカンマ区切りで複数指定することもできます。
EXCLUDE
は、フィルターでデータが絞り込まれた後に適用されます。
これはどういうことかと言うと、EXCLUDE
で超えられる垣根は、行・列で区切られたディメンションだけで、コンテキスト・フィルターの垣根を超えての計算はできません。
FIXED
指定したディメンションだけで計算したい時に使用します。
フィルター、行・列のディメンションが設定されていても、それらは存在しなかったかのように、全く無視します。
例えば、カテゴリー売上は下記の式で求められます。
カテゴリー売上(FIXED)
{FIXED [カテゴリ] : SUM([売上])}
これをグラフにドロップすれば「カテゴリー売上」グラフになります。
地域が異なっても値が同じで、地域ディメンションが無視されているのが分かります。
INCLUDE
・EXCLUDE
同様、ディメンションはカンマ区切りで複数指定することもできます。
FIXED
はコンテキストで絞り込まれた後のデータに対して適用されます。
フィルターは無視するので、上記の「カテゴリー売上」グラフは、「年度」フィルターが適用されているのですが、フィルターに関係なく、全年度のカテゴリー売上になっています。
日時のディメンション
日時データは「年・月・日」などと、マウス操作で粒度を任意に指定することができます。
しかし、LODでディメンションを指定する際は、日時のディメンションをそのまま入れてもうまくいきません。
LODで任意の粒度の日時ディメンションを指定する際は、一旦日時ディメンションから、分けたい粒度のディメンションを作成して、そのディメンションでLODを指定します。
例えば、年粒度でLODするには、日時ディメンションから、年ディメンションを作成します。
そして、その年ディメンションをLODで使用します。
感想など
INCLUDE
・EXCLUDE
は、ノーマルのグラフを起点に、ディメンションを追加・削除していくようなイメージでお互い似ているのですが、FIXED
は「フィルターを無視する」「指定したディメンションだけしか見ていない」など、ちょっと毛色が違います。
特にフィルターを使ったグラフでFIXED
を使った際、FIXED
がフィルターを無視するのを忘れて、思った以上に広範囲のデータを集計していたということがあるので注意が必要です。
フィルターを使ったグラフで、FIXED
で特定のフィルターを適用したい場合は、FIXED
で適用したいフィルターのディメンションを追加するとできます。
例えば前述のFIXED
を使った「カテゴリー売上」グラフにおいて、年度のフィルターを有効にするには、FIXED
に「年」ディメンションを加えるとうまくいきます。