
LOD計算とは?
DATA Saber挑戦中のホーリーです。
同部屋のApprenticeの方がTableau Community Forumsで毎日のように回答されています(これ、本当に凄い✨!)これまでCommunity Forumsを活用することは無いかなと思っていましたが、その方が、検討できそうな問題を紹介してくださり、部屋の中でもCommunity Forumsの存在が徐々に広がっています。私もチャレンジしています。
その中で、「LOD計算」でクリアできるのでは、、と思った問題がありましたが、説明するには今一つ、私自身がLOD計算をきちんと理解していないと分かり、まとめてみることにしました。
LODとは?
LODは、「Level of Detail」の略です。データの「粒度」のことで、「どのくらいの詳細な粒度(レベル)でメジャーが集計されているか」を示すものです。通常は、ビュー上の「列」「行」「マークカード」等にディメンションを入れることで、自動的に詳細レベルは決定されます。
例えば、
こちらのビュー → 粒度はなし

カテゴリごとの注文数 → 粒度は「カテゴリ」

地域、カテゴリごとの注文数 →粒度は「地域とカテゴリ」

このようにTableauでは粒度を自在に変えて、見たいデータを可視化することができます。通常は、自動的にLODが決定されて、その粒度で集計されることができますが、これとは違うように集計したいものがあって、その結果をビューに表示したい場合、LOD計算を使用します。
LOD計算とは?
LOD計算は3種類あります。
FIXED、INCLUDE、EXCLUDE です。計算式は以下のようになります。

具体的に見てみます。
1.FIXED関数
指定したディメンションをビューのLODとは無関係に固定します。他のディメンションに影響されず、指定したディメンションでメジャーを集計します。
このビューでは、粒度「サブカテゴリ」の合計売上となります。

こちらに、粒度「カテゴリ」ごとの合計売上を追加したい場合、FIXED関数を利用した計算フィールドを作成します。
{ FIXED([カテゴリ]) : SUM([売上]) }
列に追加すると、異なる粒度「カテゴリ」で集計された売り上げが表示されます。

2.INCLUDE関数
INCLUDEは、 ビューのLODに、LOD計算の中で指定したディメンションを加えて、ビューのLODよりも詳細な粒度で計算するものです。
粒度「サブカテゴリ」全体平均を粒度「地域」の平均にしたい場合、INCLUDE関数を利用した計算フィールドを作成します。ビューに地域を追加せずに計算することができます。
{INCLUDE[地域]:SUM([売上])}
※行に追加した計算フィールドは平均に。

今回、まとめるにあたり、実は、INCLUDE関数だけでなく、FIXED関数でも実現できることがわかりました。
この場合、{ FIXED ([カテゴリ]),([サブカテゴリ]),([地域]) : SUM([売上]) }
で実現できるのですが、この使い分けは、「ビュー上のディメンションを活かすか(残したいか)どうか」でしょうか。
3.EXCLUDE関数
EXCLUDEはINCLUDEの逆であり、 ビューのLODからLOD計算の中で指定したディメンションを除外し、より粗い粒度で計算するものです。
このビューでは「サブカテゴリ」の合計売上を表示しています。

ここから、「サブカテゴリ」を除いた「カテゴリ」単位で売上を集計したい場合には、EXCLUDE関数を使います。
{EXCLUDE[サブカテゴリ]:SUM([売上])}

こちらもFIXED関数でも同じことができます。
{ FIXED ([カテゴリ]) : SUM([売上]) }
INCLUDE、EXCLUDEはFIXEDで書き換える事が可能のようです。では、何でもFIXED関数を使えばいい?となりそうですが、
INCLUDE、EXCLUDEはそのビューの粒度に合わせて柔軟に対応してくれるという利点を持っています。結果は同じでも、FIXEDの場合は、粒度を追加しなくてはいけません。
{INCLUDE[地域]:SUM([売上])}
{FIXED ([カテゴリ]),([サブカテゴリ]),([地域]) : SUM([売上]) }
もっとLOD計算と仲良くなれれば、使い道は広がりそうです。
今回、Community Forumsでは、EXCLUDE関数を使ってみてはどうでしょうか?と提案してみました。
Community Forumsが復習の良い機会となっています。