[Tableau] 同じデータの別ディメンション同士で比較したい（横持ちデータを比較したい）

…なに言ってんだ？　と思われるでしょうが、いいタイトルが思い浮かびませんでした。

# どういう問題か？

想定してるデータはこんな感じです。

| 生徒名 | 旧基準 | 新基準 |
| --- | --- | --- |
| 田中  | 不合格 | 合格  |
| 佐藤  | 不合格 | 合格  |
| 鈴木  | 合格  | 合格  |
| 斎藤  | 合格  | 合格  |
| 山田  | 不合格 | 不合格 |

なにかの試験があって、その採点基準が変わった。
基準変化の前後で合格者数がどう変化したのかをみたい。

的なシチュエーションだと思ってください。

で、データには各生徒ごとに、旧基準で合格だったか、新基準で合格だったかが記録されています。

なので、やりたいことは`同じ生徒について、旧基準ディメンションで切った時と、新基準ディメンションで切った時とを比較したい` ということになります。
これで少しタイトルの意味が通じるでしょうか…？

# なにが問題か？

普通に比較すりゃいいじゃん、と自分も最初は思いましたが、いざやってみようと思うと、はて？となりました。

| 理想 | 現実 |
| --- | --- | --- |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/4ba8cfe4-d481-ccea-bb13-027d160defce.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/2c3a90c3-2eb8-695f-a136-ccd9c306e853.png)  |

あれ？ 横に並べて比較できない…？
なんで？ 僕のTableauレベルが足りない？

とかうんうん悩んでもやっぱりできません。

要するにこれ、Tableauの不得意な**横持ち**データなのです。

Tableauのデータは基本的に**縦持ち**であることが想定されています。
1レコードにいろんな情報が入ってるのが横持ちで、小さい単位で複数レコードに分けてあるのが縦持ちです。

↑のサンプルを見ると、新基準・旧基準の2種類の情報が1人の生徒に紐づいているので、横持ちなわけです。

自分だけかもしれませんが、このデータ横持ちじゃん!　と気づくのはだいたい可視化でつまづいてから…。

# 解決策1 ピボットする

まず一番シンプルな解決策は、縦持ちにデータを変換してしまうことです。

データソースを開いて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/18bed112-c961-3ec5-eb6c-6ae55247bd65.png)

横持ちになってるところ（今回は旧基準と新基準）を選択して、「ピボット」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/13a15940-9499-e9fd-d907-8230a7da152a.png)

すると、ジャーン！ 縦持ちデータに！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/321c3749-5642-539b-1fd1-ec2f5d19ca5c.png)

1生徒につき、新旧の2レコードが紐づく形式になってますね。
あとはピボットでできたカラムには適当に名前をつけましょう。

データが縦持ちになったら、もうこっちのもんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/9a00d395-418c-74b7-c819-5c46a4030018.png)

# でも、ピボットできない時もある

データをピボットできちゃうならそれが一番いいんですが、現実にはピボットできないケースも多々あります。

一番多いのは、計算フィールドを使って自分でディメンションを切っている場合ではないでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/36638d8b-fa41-30ef-9f2f-15a7dfe943bc.png)

例えば先ほどの例で、元データにあるのは生徒の点数で、それに対して計算フィールドで合格・不合格を判定しているとします。
旧基準の場合は70点以上で合格で、新基準だと60点以上が合格ライン、とかですね。

この場合、ピボットができません。ボタンが出てこないのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/dd5099d5-df30-70b1-21d9-b5b54ddc111a.png)

計算フィールドでできたデータは動的なものですから、それをベースにピボットできてしまうと、値が変わったときにどうなるんだ、とかいろいろ問題があるのでしょう。

# 解決策2 無理やり並べる

ピボットができなければ、あとはもう力技です。

まず、新基準と旧基準、それぞれ単体のシートを作ります。

| 新基準 | 旧基準 |
| --- | --- | --- |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/96f76c61-3fab-0fb9-c7b0-b3a1f88281ef.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/407815f6-4e0e-6a0c-5200-88c8be3b1d2d.png)
  |

で、これをダッシュボードで、並べます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/20790b7c-4f23-ee01-6d72-ffbfdb503195.png)

**ほら、並べられましたね！ 簡単でしょう！**

…と言うと流石にちょっと雑なので、細かく調整します。

まずは旧基準の方の縦軸を非表示に。並べるときに右の軸は邪魔ですからね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/5290ee63-ef2a-07e1-b25f-7858315df9c6.png)

次に、新旧それぞれに、'新基準'のような文字列のディメンションをつけます。これがディメンションっぽく見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/a0bc5e05-306a-53ea-8af3-7e8f2188013c.png)

列フィールドラベルは消しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/a602e1f2-da54-f921-e40f-98a301f30a0f.png)

ダッシュボードに戻ると、ほら割といい感じになってきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/3c322f22-4cf0-3615-c86e-992efec29318.png)

あとは、それぞれシートタイトルを消して、ダッシュボードタイトルを設定して、判例をいじって、グラフの横幅を調整したら…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/8c083c32-92bb-1c1b-b7e5-39f2448dbad4.png)

**完成！！**

まぁ、そこそこ見れるものになりましたね！

# まとめ

Tableauは、用意された機能を使う分にはとても操作性良くスマートですが、そこから外れたことをやろうと思うと途端に泥臭いことをしなければならなくなります。
今回も、「ハック」と言ってしまって差し支えないレベルじゃないかと思います。

楽しくはありますが、ふと、「ここまでやるならPythonとかでグラフ作ったほうがいいんじゃ？」と思うこともなくはない…。