[Tableau] LOD（Level Of Detail）って結局なんのことなんだ

# はじめに

tableauを勉強してると、LODがどうのという記載をよく見かけます。

LOD、えるおーでぃー、Level Of Detailの略ね。ふーん。

詳細のレベルって、なんだろうそれ。

…とは思いつつスルーしながら生きてきましたが、今回はちょっと調べてみることにしました。

# いくつか違う意味で使われるLODという言葉

なんとなく掴みどころのない単語だなと思っていたこのLODという言葉。

実は、シチュエーションによって3つの意味を指していることがあるように思います。

1. 概念としてのLOD
1. Viz上でのLOD（Viz LOD）
1. 機能としてのLOD（LOD表現）

単にLODといった場合は1の「概念としてのLOD」を指すのが正しいと思うのですが、省略して2や3のこともLODと言ってしまっていることがある気がします。

だからややこしい感じがするんですね

## 1. 概念としてのLOD

LODはLevel Of Detailの略ですが、直訳すれば「詳細レベル」。
つまり、「どれくらいの詳細さか」ということです。

一番わかりやすいのは日付だと思いますが、日付には`年 > 月 > 日` という階層がありますよね。
年が一番大きな括りで、日が一番細かい（つまり詳細）な括りです。

この、詳細さの度合いという概念をLODと呼んでいるわけです。

なので、もっともLODが低い状態は、1個1個のデータ。
そして、逆にLODが高い状態は、全体の総合計とかになってくるわけです。

ちなみにこのLODが高いとか低いって表現、個人的にしっくりきませんでした。
なんか、より詳細な日付の方が、ざっくりしてる年より詳細レベルが高いんじゃないの？と思ったわけです。

これはおそらくですが、

年
↓
月
↓
日

という階層構造になっているイメージなんでしょう。
これなら年が高くて日が低いのはわかる気がします。

## 2. Viz上でのLOD（Viz LOD）

一般にLODというとこのことを指すのが多いのかなと思うのが、Viz LOD

そのグラフが、どのくらいのレベルの詳細さで表現されているか、です。

一番LODが高い、つまり詳細じゃない状態は、例えば↓こんな、全売り上げの合計、とかですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/8d7c7253-c1bc-bb24-096f-16d3b81c515c.png)

ここに1つディメンションを足して、年ごとにすると、1段階 LODが低くなります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/ba7bf9f8-2a99-b13e-1eda-b2244f310d88.png)

さらに月、日と足していけば、どんどんLODが低くなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/da0516d1-3aab-5f8f-daf4-1b5a7b680998.png)

つまり、すっごく雑に言ってしまえば、

**「どれくらいディメンションを重ねてるか」**

ってことですよね。

## 3. 機能としてのLOD（LOD表現）

そして最後がLOD表現、という機能名としての言葉。

おそらく、LODうんぬんという話が出るときは、こいつを使うかどうか、みたいな文脈なことが多いんじゃないでしょうか。

これはずばり、**以下の関数を使うことを「LOD表現」を使う言います。** たぶん。

* EXCLUDE
* INCLUDE
* FIXED

（日本語としては、「LOD表現をするための関数がこの3つ」というのが正しい気がしますが）

この3つの関数が何かというと、`毎月の合計売上を、年ごとに平均して出したい！`というような時に使います。

僕は最初、このお題の何がポイントかよくわからなかったのですが、つまるところ、「年ごと」と「月ごと」のLODが混在している、と言うことなのですね。

毎月の売り上げ、と言うと↓のような月ごとのLODですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/dd2825ca-ca8a-d286-2497-4b38b884b3f5.png)

それを平均して年ごとに出すと言うことは、最終的なViz LODは↓のような年ごとなわけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/06b73cfb-2089-f53b-b5a7-0536cb014db5.png)

かといって、ディメンションを年にして、売り上げの平均を出すと…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/834d6f6a-886c-2a13-9613-99c89c52b1cd.png)
当然、1件1件の取引額の平均になってしまいます。

これは困りますね。普通にやろうとすると、この食い違ったLOD（=ディメンションの深さ）をどうやって実現したらいいのかわからない…

### LOD関数の使い方

LODの食い違いによって生じる困った状態を解決するのが、EXCLUDE、INCLUDE、FIXEDの3つの関数です。

この3関数がなにができるのかというと、**Vizのディメンションとは異なるLODでの集計**ができるのが特徴です。

先ほどの例だと、Viz LODは「年ごと」にしたいけど、そのために月ごとの1段低いLODで集計する必要がある、というケースですが、こういう**Vizより低いLODでの集計**にはINCLUDE関数を使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/064321e9-5232-9037-920e-89e3ff3a213c.png)

こんな感じに式を書くと、Vizに指定しているディメンションとは関係なく、「月ごとの合計」を出してくれます。

で、これを年ごとのViz LODにしたところに平均として突っ込んでやることで、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/8f52ee8b-ed5f-2d46-f7fc-b7e51efd2026.png)
やりたかった「月ごとLODでの合計売上」を「年ごとのLODでの平均」にすることができました。

一応、アナリティクスの合計を使って平均値の確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/18f7a828-2dba-f389-deed-55f277e21049.png)
うん、良さそう（↑これは月単位のLODですね）

VizのLODとは違うLODで集計する、というイメージが伝わりましたでしょうか？

詳細は省きますが、他の関数も合わせてざっくり説明すると、

* EXCLUDE → Viz LODより高いLODでの集計
* INCLUDE → Viz LODより低いLODでの集計
* FIXED → Viz LODより高いのも低いのも混在したLODでの集計

という使いわけです。

# おわりに

Tableauは、綺麗なGUIでスイスイできちゃう！という一方で、理解していないといけないちょっと難解な**概念**がけっこう存在します。

これはTableauがどうの、というよりは、データを可視化する際に出てくる課題があって、それをTableau上で解決するために出てくるものなのでしょう。

なので、LODわからん！Tableu難しい！ というわけではなく、LODという概念はデータ可視化において必ず存在する課題で、むしろそれを解決できるTableauはさすがだな、というところなのかと思います。

まぁ、アルファベット3文字の略称をみると目が焼かれる系の自分としては、もう少し優しく表現してくれないかなぁーとは思いますがね…！！

# 参考

https://www.tableau.com/ja-jp/learn/whitepapers/understanding-lod-expressions