術式・Tableau（術）！ 領域展開・LOD関数！！

#ご挨拶
ハイサイ:sunglasses::raised_hands_tone1:
入社１ヶ月半の@nakachi_keigoです。
現在は研修も終盤を迎え業務に移行しつつあります。

そこで、今回は自分が研修時に最も苦戦したLOD関数を
先輩の@oshiro_azusaさんと一緒に勉強したことをまとめてみました！

まだまだ勉強不足なところもありますので、温かい目で見ていただけると幸いです:relaxed::tea:



#LOD関数とは
LOD関数は（Level of Detail）の略で、直訳すると「詳細レベル」という意味になり、
この関数の特徴で粒度を自由に変えれる関数になっています。

LOD関数には

・FIXED　　  （個別レベルで計算）
・INCLUDE　（指定したデイメンションを含めて計算）
・EXCLUDE　（指定したデイメンションを除外して計算）

の3つがあり、それぞれ異なる特徴があります。
それぞれ例題とともに説明していきます！！！
#よく出てくるTableauの用語を簡単に解説

- ディメンション
 - 集計することのない、日付、番号、区分、名前などが含まれます。（例：顧客名やカテゴリなど）

- メジャー
 - 集計（合計、平均など）できる、数値のフィールドが含まれます。（例：売上や利益など）
- ビュー
 - データを可視化し、図表を作成するスペースです（図参照）
![ビューの説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/cb6faad6-1f16-a3c0-a2ad-7e167c8963b7.png)


#FIXED
まずはFIXED関数からです！
Tableauの公式の説明を参照します:baby_tone1:

>詳細レベルの式は、
ビュー内のディメンションに関係なく、
指定されたディメンションを使用して値を計算します。
[Tableau公式サイト](https://help.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod.htm#FIXEDFIXED) 


(~~ちょっと何言ってるか分からないので~~)まずは実際に使用してみましょう:point_up_tone1:
データはみんな大好き:relaxed:スーパーストアを使用します。

まず、下記のようなグラフがあったとします。

![FIXED①枠なし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/4825633b-ffa7-cd13-2614-c5264c1d31ce.png)


各地域の平均売り上げを棒グラフで表しています。
ここでFIXED関数を使用してもっと細かく分析してみます:point_up_tone1:

例えば、地域別だけでなく全国平均と比較してみて
どれくらいの地域が全国平均を上回っているのかきになりませんか？:thinking:
地域別データと全国平均を比較してみましょう:raised_hands_tone2:

しかし、このままでは**<font color="#f00">行に地域が入ってるので全国平均が出せません</font>**:imp:

公式の説明にもありましたが、
FIXEDは**<font color="#f00">行とか列の入ってるものはガン無視して指定した値を計算</font>**してくれます！
なので、次のように計算式を作成します。


**{ <font color="#00f">FIXED</font> : <font color="#00f">AVG</font> (<font color="#fa0">[売上]</font>) }**

これで全国を平均売上を計算してくれます！
上記の計算式を作成し、先程の売上（AVG）の横におきます
左がさっきのグラフで、その隣に全国平均を出してみました！（赤い矢印）

![FIXED②矢印.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/e1f9206b-3314-a3e0-9cd3-4b3c61bc7ac7.png)


地域と全国という異なる粒度を同じグラフ内で確認する事ができます！
地域だけで比較するより広い視野で分析ができますね:thumbsup_tone1:


**FIXED関数は既に指定した<font color="#f00">ディメンション（項目）に影響される事なく個別に計算</font>する事ができます。**

お次はINCLUDEの説明をなかっちが担当します！ 











#INCLUDE
バトンを受け取りました！なかっちがINCLUDEについてご解説させていただきます！
Tableau公式HPによると
<font color="#00f">『INCLUDE 詳細レベルの式は、ビューに含まれるディメンションに加えて、指定されたディメンションを使用して値を計算します。』</font>
[Tableau公式サイト](https://help.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod_include.htm)
とのこと…
この記事を読んだ時の僕の心境としましては
「は？全然分からん…」という感じでしたw

なので、文章からではなく実際にTableauを動かしながら学んでいきましょう！

1.INCLUDEの計算式
　まず、今回使用するデータはTableauでお馴染みのスーパー・ストアを使用していきます。

<font size="5">**｛INCLUDE<font color="#00f">【指定したいデイメンション】</font>：<font color="#0dd0">＜集計式＞</font>｝**</font>

上記のような式を使っていきます。
では、早速Tableauで動かしてみましょう！

まず初めは地方別の平均売上をINCLUDEとAVG関数を利用して比較していきます。

下記の計算式を使います。
AVG売上：<font color="#00f">AVG</font>(<font color="#fa0">[売上]</font>)
INCLUDEの平均売上：{ <font color="#00f">INCLUDE </font><font color="#fa0">[カテゴリ]</font>:<font color="#00f">AVG</font>(<font color="#fa0">[売上]</font>)}
![INCLUDE.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/f764e395-d2ef-e25e-df0f-bc20cecfcf57.png)



上記のグラフを見比べてみると両方とも同じ値になっています。

「だったら、AVG関数使った方が簡単じゃん！」って思いますよね！
そこで、次はどのような場面で利用できるか見ていきましょう。

2.INCLUDEの活用方
 1.で行ったグラフでは違いが分かりませんでした。
その理由としては列行にカテゴリーがあったためです。AVG関数は平均を出す関数そして列にカテゴリーが設定されINCLUDEの計算式と同じ意味になったからです。

そこで次は都道府県別の顧客平均売上を出して行きます。

まず、INCLUDEから出していきます。
下記の計算式を使います。
**INCLUDE：<font color="#00f">AVG</font>({ <font color="#00f">INCLUDE</font><font color="#fa0"> [顧客 Id]</font>:<font color="#00f">SUM</font>(<font color="#fa0">[売上]</font>)})**
![スクリーンショット 2020-12-16 153102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/c5bd3192-75e1-555c-9c70-16f26278bb98.png)

上記のグラフを見てみると<font color="#00f">顧客ID</font>を行や列、テーマに設定していなくても都道府県別で顧客１人あたりの平均売上を出すことができています。

同じことをAVG関数を使ってやってみましょう！
![スクリーンショット 2020-12-16 153231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/c0b855cf-ff3b-3599-e92c-fe2e3ddeeb81.png)



上記のグラフを見てみると先ほどのグラフとの値の違いが分かります。



3.まとめ
2.で作った２つグラフは同じ手順を踏んでいますがグラフの表す意味が異なります。では、なぜ？違う数値になったのかを説明していきます。

　スケールを小さくして説明すると
　　AスーパーにI,Q,Lさんの三人が買い物に来たとします。
![de-ta.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/5d689292-2628-8c1b-eca7-331c413295ed.png)


上記の購入データからAスーパーの平均売上を出すとすると下記の計算式になります
 　　　　　　<font color="#f00">（売上の合計金額)　÷　購入回数</font>
　　　　　　　　　　　　7560÷8＝945
よってAスーパーの平均売上は945円ということになります。
これは、2.で作ったAVG関数のグラフとなります。

しかし、上記の購入データには誰が何円分購入したのかが分かります。
なので顧客別の平均売上を出していきます。下記が計算式になります。
　　　　　　　<font color="#f00">（売上の合計金額）÷　客数</font>
　　　　　　　　　　　　7560÷3=2520
よってAスーパーの顧客1人あたりの平均売上は2520円問ことになります。
これが、2.で作ったINCLUDEのグラフとなります。

AVG関数だけだと何に対する数値なのかがデイメンションによって左右され不明確です。しかし、INCLUDEのように計算式でデイメンションを指定し明確にしたことで、Iさんが5回、Qさんが１１回、Lさんが１００回購入したとしても購入者は３人ということが固定されます。

**このように、<font color="#f00">INCLUDEでは何に対する（デイメンション）数値なのかを明確に指定する</font>ことができるのです。**

では、いよいよ最後のLOD関数のEXCLUDEのご説明を大城さんお願いします！
#EXCLUDE
こちらもまずは公式の説明を一部抜粋し記載します。

>EXCLUDE 詳細レベルの式は、宣言されたディメンションをビューから省略します。
EXCLUDE 詳細レベルの式は、行レベルの式 (省略するディメンションがない式) では使用できませんが、
ビュー レベルの計算またはそれらの中間の計算 (つまり、EXCLUDE 計算を使用して他の詳細レベルの式からディメンションを削除できます) のいずれかを変更するのに使用できます。
[Tableau公式サイト](https://help.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod_exclude.htm)

やっぱり難しいので、実際に試してみます:writing_hand_tone1:


下記のようなグラフがあったとします.

![image_2020_12_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/501d9d9a-1ca8-9d40-d3b4-7b832f46d59a.png)

オーダー月ごとの売上を、カテゴリ別に表示しています。
ここにどの月が売上が高いかを色で判断したい時にEXCLUDEを使います:mouse:

すでに、行にオーダー日は入っていますが、
列にカテゴリーが入っている事で、カテゴリーごとに集計されてしまいます:ghost:
カテゴリーはいらなので、EXCLUDEで除外します！

計算式は下記になります！

***{ EXCLUDE [カテゴリ] : SUM([売上]) }***

これを色にもっていくと
![image_2020_12_17 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529514/c674dd4f-c020-da7e-2c52-70df67561985.png)

売上が高い月は棒グラフの色が濃くなり、低い月は淡い色になります:mouse:
カテゴリ別の売上だけではなく、どの月の売上が高いのかも一目でわかります:ok_woman_tone2:

**EXCLUDEはビュー内にある<font color="#f00">除外したい項目を指定して計算する</font>ことができます。**

#最後に
この記事を書くにあたり、
苦手意識のあったLOD関数を勉強するいい機会となりました:relieved:
今後は勉強した事を業務でも実践していけるように頑張ります:raising_hand:

この記事が、私達のようにLOD関数に苦戦した方の
参考に少しでもなったら幸いです:shamrock:

また、今回ご紹介させていただいた例題はほんの一部なので
もっと多種多様使な使い方ができるので是非試してみてください:star:

では素敵なイブイブをお過ごし下さい:santa_tone2::snowflake:

#参考リンク
[・高度な集計(LOD)](http://www.dmod-blg.com/category/dataanalysis/tableau-desktop/lod/)