Tableauで縦並びのツリーマップを作る

実務で、ツリーマップを縦並びにしたものを作っていて、そこでちょいと考えるところがあったので、
その方法を共有して残しておきたいと思います。

## まずは、普通のツリーマップ
一般的なシンプルなツリーマップを見ていきましょう。
今回もサンプルスーパーストアを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/aef483ac-15dc-38ed-2bfd-91cf0b13bf85.png)

はい、シンプルですね。
「カテゴリ」を色に入れて、カテゴリごとに色を分けてみました。

## 縦並びのツリーマップとは
今回作りたいのはこんな感じ。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/61e5eecd-3f98-c53b-8ae0-d66a0511b154.png)

「カテゴリ」ごとに縦にツリーマップを分けているのですが、横方向にはツリーマップがぎっちり敷き詰められています。
実務でこんな感じのを作っていたのですが、最初苦戦しました。
なぜ苦戦したかというと...

## 右端が余ってしまう

「ツリーマップをカテゴリごとに縦に並べるので、「カテゴリ」を行に入れれば解決やん！」
って思ってました。
するとこうなります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/a7195970-7c34-881e-6bec-199af91f1b03.png)

なんか事務用品の右側にめっちゃ空白ができています。
これは、売上の大きさをサイズにしているので、
3カテゴリ全部で売上の大きさが統一されているからです。
「事務用品」は「家具」や「家電」に比べて全体的な売上が小さいので、
ツリーマップの横幅も狭くなります。

## 解決策
この問題、割と簡単に解決できます。
「サイズ」に入っている「売上」を右クリックして「簡易表計算>合計に対する割合」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/cf3737fc-b56c-d5a5-f246-39086ede9459.png)

で、もう一度「売上」を右クリックして「次を使用して計算>サブカテゴリ」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/85356a96-8239-98e4-f919-446918eb6648.png)

すると、このように、ツリーマップが横に敷き詰められます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/fe18e0b6-0373-a7d9-aaba-d00db4a61ebd.png)

ここで、先ほど変更したサイズの売上の式を見てみると、

```
SUM([売上]) / TOTAL(SUM([売上]))
```

このようになっています。
この、「TOTAL(SUM([売上])」が表計算になるのですが、
この計算の方向を「サブカテゴリ」にしたため、
「サブカテゴリが同じ場合は売上を積み重ねるよ。カテゴリなど、他のディメンションが切り替わったら、売上がリセットされるよ」
という計算が走ります。
どういうことか整理するために、「クロス集計として複製」してちょっと整理してみたのがこちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/88be541c-d77b-a69c-361c-8f38c380cefe.png)

「TOTAL」の行は、先ほどの「合計に対する割合」の簡易表計算から
```
TOTAL(SUM([売上])
```
だけ取り出したものです。
これを見てみると、各サブカテゴリごとの合計が計算され、
「カテゴリ」が変わると合計をリセットしていることがわかります。
「SUM([売上])」によってつくられたただの売上の合計はサブカテゴリごとの売上を表しているので、
この売上をTOTALの式で割って「合計に対する割合」ができています。
このように、「TOTAL」式を「サブカテゴリに沿って」計算するからカテゴリごとの売上の割合が出るのですね。

で、先ほどの完成した縦並びのツリーマップを見てみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/88fbc3ef-202b-a0fe-3ac0-e034242ee2d5.png)
このように、横方向に100%となっているから、ツリーマップが横に敷き詰められていることがわかります。

縦並びツリーマップの解説は以上です。

## 補足
中級者以上のTableauユーザーなら
「TOTALじゃなくてWINDOW_SUM」を使ってもいいのでは？
と思ったかもしれません。
その通り、この場合だとWINDOWS_SUMでも同じ結果になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/0fe17e25-54a2-a730-8fdd-a14aa69d769e.png)

この場合簡易表計算ではできないので、計算フィールドを作ってください。

ただ、私が実務で使うとWINDOW_SUMでは違う結果になりました。
というのも、WINDOW_SUMだと正しい結果になりツリーマップが横に敷き詰められるものの、
TOTALだと各カテゴリで合計が100%を超えてしまうのですね。
なぜなら元の計算にSUMではなくCOUNTDを使っていたからです。
ここを説明しだすと長くなるので、機会があればその辺の詳細を別記事に書きたいと思います。
TOTALとWINDOW_SUMの違いについて気になった方は、こちらの記事をお読みください。

[Tableau 表計算 TOTAL関数と、合計表示機能について](https://note.com/ritz_tableau/n/n79a45606f637)

この記事に書いてあることがすべてですので、ぜひ熟読されることをお勧めします！

## おわりに
いかがでしたでしょうか？
ツリーマップってあんまり使われる機会無いと思いますが、
各カテゴリなどが「どれくらいの割合を占めているのか？」を示すには大変分かりやすいと思います。
円グラフは3つ以上値があるとすごくごちゃついてしまいますしね。
また、本記事を書いていて表計算に対して理解が浅いと思われた方は、
言わずと知れた「Tableau 8つのハードル」シリーズをぜひお読みください。

[Tableau 8つのハードルを越える](https://note.com/ritz_tableau/m/mfdf3fef70e46)

一回ですべてを理解するのは難しいですが、繰り返し読んでいるとだんだん理解できるようになります。

それでは、最後まで読んでいただきありがとうございました！

Rieko