Tableau ダンベルチャート（差を強調するグラフ）の作り方

# はじめに
ダンベルチャートの作り方は多くの方が投稿していますが、
私自身いざ作ろうと思ったときに中々検索でヒットしなくて（その時はダンベルチャートという名称も知らなかった…）、結構手間取ったのでそういう方が一人でも減ることを願い、手順をまとめていきたいと思います。

### ダンベルチャートとは
２種類のメジャーの値を棒で繋ぐことによってダンベルのような見た目にしたチャートです。
下図の通り、２つの値の差を表現することに適していることが特徴です。
<img width=500 alt="ダンベルチャート" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/6d5d4e88-8df3-6059-9ec4-a31b60516011.png">


ちなみに、似たようなチャートにロリポップチャートがあります。
こちらは１種類のメジャーに対して棒を繋いだ見た目のチャートです。
※ロリポップ=いわゆる棒がついたキャンディ
<img width=500 alt="ロリポップ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/6d53e5d4-2a14-d488-052e-d21c121eca3e.png">

どちらも見た目にかわいいチャートで人を惹きつける効果があり、
使用している形状マークは任意の画像を取り込んで使用することができるため、より魅力的な表現も可能です。

**Ben Neville様**が作成されている記事およびチャートが非常に参考になります。
- [Viz Whiz: ロリポップチャートの使うべき時と作り方](https://www.tableau.com/ja-jp/blog/viz-whiz-when-use-lollipop-chart-and-how-build-one-64267)
- [(Tableau Public)Ben Nevilleが作成したLollipop Charts](https://public.tableau.com/app/profile/ben.neville/viz/LollipopCharts_2/LollipopChartExamples2)

# 作り方
今回はTableauに付属している「サンプル - スーパーストア」を使用して、
**2020年と2021年の売上の差**を月別に可視化したダンベルチャートを作成していきます。

<img width=200 alt="サンプル - スーパーストア" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/3715a1c8-c404-1fef-529d-4eb76ddfa283.png">

「2020年の売上」と「2021年の売上」を別々のメジャーとして扱うために、それぞれ計算フィールドを使用して作成します。
**2020年の売上**
`IIF(DATEPART('year',[オーダー日])=2020, [売上], 0)`
**2021年の売上**
`IIF(DATEPART('year',[オーダー日])=2021, [売上], 0)`

　
そして、下図のように設定します。
<img width=500 alt="設定1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/8ce54f64-5305-ba3c-2263-a467b5517543.png">

これだと形状マークをプロットしただけなのでよく分かりません。
そこで「2020年の売上」と「2021年の売上」を棒で繋ぐ必要があります。
ここがポイントで、この棒は「**ガントチャート**」のマークを使用します。

#### [補足]ガントチャート
ガントチャートはタスク管理によく使用されますが、
機能としてはメジャーの開始地点とそのサイズを指定して、それを棒で表現するチャートです。
<img width=700 alt="ガントチャート_説明付" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/efc99189-502c-a0ac-2986-58d160b40a29.png">

 
この機能を利用して、「2020年の売上」と「2021年の売上」の間を棒で繋ぎます。

開始地点は、「2020年の売上」と「2021年の売上」の**小さい方**です。
つまり、大小を比較して小さいを取得する計算フィールドを作ります。
`IIF(SUM([2021年_売上])>SUM([2020年_売上]), SUM([2020年_売上]), SUM([2021年_売上]))`
※SUMで集計したもので比較すること

サイズは、「2020年の売上」と「2021年の売上」の差になります。
ただし月によって、「2020年の売上」と「2021年の売上」の大小が前後するので**絶対値**を取ってやります。
`ABS(SUM([2021年_売上])-SUM([2020年_売上]))`

これらをシェルフやサイズに設定します。
<img width=700 alt="ガントチャート_設定" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/69188277-ed1a-26d4-697b-6e0f4c09488e.png">

左側の形状マークと１つにまとめるため「二重軸」にして、かつ「軸を同期」します。
・二重軸：ガントチャートの開始地点に設定したメジャーを右クリック→「二重軸」
<img width=500 alt="二重軸" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/66efaa22-d45b-1463-b14b-95cc859935f7.png">

・軸の同期：上下どちらかの軸を右クリック→「軸の同期」
<img width=500 alt="軸の動機" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/380a3e84-9935-b41f-0c8e-c4e2685cf6ee.png">

ガントチャートの棒が形状マークの前面にきてしまうため、シェルフにあるメジャーの順番入れ替えます。
下の例では、ガントチャートの開始地点に設定したメジャーをマウスで左側に移動
<img width=500 alt="シェルフの入替" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/6d972059-6fee-5b4f-6929-0332c0f01947.png">

あとはメジャーバリューやガントチャートのサイズを変更してダンベルっぽくすれば完成です。
※細かい書式設定や軸の設定は省略します。

<img width=700 alt="ダンベルチャート" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/6d5d4e88-8df3-6059-9ec4-a31b60516011.png">

# おわりに
以上、ダンベルチャートの作成方法をまとめさせていただきました。

ガントチャート用のメジャー（開始地点用、棒のサイズ用）は、
必ず一方が小さくなるようなデータの場合、計算フィールドが不要になったり差を取るだけになったりします。

例えば、月収と手取りは「月収＞手取り」になるため、開始地点は「手取り」をシェルフに設定し、
サイズは単純に「月収」と「手取り」の差を取ればよいので絶対値は不要です。
※形状マークとガントチャートの凡例を分けるために「手取り」は複製して使用した方がよいかもです。

用いるデータによって適宜対応してみてください。

### おまけ
今回作成したチャートを下記に公開します。
ワークブックをダウンロードできると思いますので参考にしてみてください。
- [(Tableau Public)ダンベルチャート](https://public.tableau.com/views/_16708673362760/Dumbbell?:language=ja-JP&publish=yes&:display_count=n&:origin=viz_share_link)