【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計算の使い分け
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:複数顧客の合算金額
を算出しており、そのために差額が発生していることが分かります。
そう、今回の金額の不一致はオーダーIDが一意のIDでないことによるものでした。オーダーIDは普通、一意でしょ…そう思ってしまう気持ちはとてもよく分かります。
しかし、オーダーIDや顧客IDなど「一意のIDっぽいもの」に対しては「本当にそれが一意のIDか?」を確認した上で計算をした方が良さそうです(これはLOD計算に限った話ではないかもしれませんね)。
例えば商品IDなど「担当者の手違いでIDが重複している」可能性もありえます。運送業者の配送番号なども、期間を空けて再利用していたりします。
これは特殊な例ですが、「一意の値らしいが一意の値か確証がない」時にはFIXEDではなくINCLUDEを使った方が良い、といえるかもしれません。
具体例: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計算もよろしくお願いいたします。