見出し画像

【Tableau】LOD計算を雑に理解する。FIXED/INCLUDE/EXCLUDE擬人化ガイド

こんにちは、DATA Saber挑戦中のぞぴぴです。

みんな心折れがちOrdeal8のLOD計算。正確に理解するための記載は世の素晴らしいブログにお任せして、「細かいことは置いといてざっくり理解したい!」そんな私のような人のためのnoteを書いてみようと思います。

雑な理解のため、理解しやすさを優先して書いておりますが、もしご記載・理解不足と思われる点がございましたら、ぜひコメントで教えてください。


Tableauの集計の基本原則

LOD計算を理解する前に知っておくべき重要な前提があります。Tableauはシートに配置されたディメンション(Level of Detail、以下LOD)が集計の粒度を決定します。配置されていないディメンションは、通常の集計には考慮されません。

社会でもこういうのありますよね

LOD計算が必要な理由

通常の集計ではシートに配置されたディメンションしか考慮できません。しかし、LOD計算を使うと、シートにないディメンションも考慮して計算することができます。LOD計算を使うことで、シートの構成に依存しない柔軟な集計が可能になります。

教えてくれれば分かるよ!

LOD計算の種類

FIXED:いついかなる時でも指定の粒度で

FIXED は、ビューのフィルターやディメンションに関係なく、指定した粒度で集計します。指定した粒度で集計された、新しいメジャーを作るイメージです。新しいメジャーを作る=「1行ごとの値」を返すため、ビンを作成することが可能です。

性格:絶対主義者
「私は絶対にブレない!指示された粒度で計算する!」
「とにかく指定通りに計算しろ!」

INCLUDE:状況に応じて一部の粒度を追加して

INCLUDE は、シートの粒度に追加のディメンションを含めて集計を調整します。集計なので「1行ごとの値」は存在せず、ビンを作成できません。

性格:柔軟な戦略家
「今の状況を見て、もう少し細かく分析した方がいいかも?」
「状況次第で粒度を追加しよう!」

EXCLUDE:一部の粒度を無視して粗い粒度で

EXCLUDE は、ビューの粒度から特定のディメンションを除外して集計を調整します。集計なので「1行ごとの値」は存在せず、ビンを作成できません。

性格:合理的な分析家
「不要な情報は無視しよう」
「余計な粒度は除外して計算だ」

探偵事務所LOD計算

LOD計算の使い分け

FIXEDがよいケース

  • フィルターの影響を受けたくない場合

  • 特定のディメンションに基づく固定の値が必要な場合

INCLUDEがよいケース

  • シートのディメンションに応じて計算の粒度を変えたい場合

  • シートに柔軟に対応させたい場合

EXCLUDEがよいケース

  • ビューの特定の粒度を除外したい場合

  • 特に、集計粒度を粗くしたいときに便利。

具体例:FIXED/INCLUDE

ではお馴染みサンプルスーパーストアで具体例を見て見ましょう。以下のように「顧客ごとの購入回数ごと」「1回のオーダー金額」「の平均金額」を見てみるとします。

すると、FIXEDとINCLUDEで結果が違うことに気が付きます。

  • INCLUDE:{ INCLUDE [オーダー Id]:SUM([売上])}…最大値52,779

  • FIXED:{ FIXED [オーダー Id]:SUM([売上])}…最大値136,086

これは何故か?深堀して見てみましょう。

ちょっとどころか結構ちがう

ディメンションに「顧客ごとの購入回数」「オーダーId」を置いて、INCLUDEとFIXEDを二重軸で重ねてみます。すると、金額が一致しているものもあれば、一致していないものもあることに気が付きます。

なんでだよ!!

では先ほどのシートと、「購入回数」「顧客IDごと」の売上金額のシートをダッシュボードで並べ、「オーダーID」のみでフィルターされるようにしてみます。すると、複数の顧客IDが紐づいているオーダーIDが存在することが分かります。そして

  • INCLUDE:ディメンションに入っている購入回数と一致する顧客の金額

  • FIXED:複数顧客の合算金額

を算出しており、そのために差額が発生していることが分かります。

FIXEDさんは頑固者

そう、今回の金額の不一致はオーダーIDが一意のIDでないことによるものでした。オーダーIDは普通、一意でしょ…そう思ってしまう気持ちはとてもよく分かります。

しかし、オーダーIDや顧客IDなど「一意のIDっぽいもの」に対しては「本当にそれが一意のIDか?」を確認した上で計算をした方が良さそうです(これはLOD計算に限った話ではないかもしれませんね)。

例えば商品IDなど「担当者の手違いでIDが重複している」可能性もありえます。運送業者の配送番号なども、期間を空けて再利用していたりします。

これは特殊な例ですが、「一意の値らしいが一意の値か確証がない」時にはFIXEDではなくINCLUDEを使った方が良い、といえるかもしれません。

具体例:EXCLUDE

指定したものだけ冷静に切り捨てるEXCLUDEさん

EXCLUDE は、ビューの粒度から特定のディメンションを除外して集計を調整します。なので入っているディメンション「オーダーID」「購入回数」でそれぞれEXCLUDEをかけてみました。

  • オーダーIDのEXCLUDE:購入回数での合計金額になる

  • 購入回数のEXCLUDE:オーダーIDでの合計金額になる

FIXEDは「指定のディメンションで固定」になるのに対し、EXCLUDEは「指定のディメンションのみを外す」といった処理になります。

どちらでも良いケースもある

どちらも同じ結果を得られるのは、ビューの粒度とLOD計算の指定が重複し、計算結果に違いが生じない場合です。

同じ結果が得られる場合でも、フィルターの影響を無視したい、あるいは計算の粒度を完全に固定したいときはFIXEDを使うべきです。一方、フィルターに応じた動的な集計が必要ならINCLUDEやEXCLUDEを選びます。

基本的に、固定された値が必要な場面ではFIXED、そうでなければ他のLOD計算を優先するのが判断基準です。

まとめ

LOD計算ちんぷんかんぷん…とまではいかないものの、

  • ついFIXEDに頼りがち

  • FIXEDとINCLUDEで結果が異なる時に何が原因か分からない

  • そもそもEXCLUDEを使う機会があまりない

という所で、深堀をしてみました。

一旦は以下のように覚えておけば良さそうです。
FIXED:いついかなる時でも指定の粒度で
INCLUDE:状況に応じて一部の粒度を追加して
EXCLUDE:一部の粒度を無視して粗い粒度で

探偵事務所LOD計算もよろしくお願いいたします。

いいなと思ったら応援しよう!