Tableauでちょい苦労したのでメモがてら
課題
入会・退会のユーザデータがこんな感じであったとします。
私が知りたいのは、2023年1月、2月、3月の月末時点のユーザ数の推移です。
| ユーザID | 入会日 | 退会日 |
| 1 | 2023/1/1 | 2023/2/1 |
| 2 | 2023/1/1 | 2023/2/1 |
| 3 | 2023/2/1 | 2023/3/1 |
| 4 | 2023/2/1 | |
| 5 | 2023/2/1 | |
| 6 | 2023/3/1 | |
| 7 | 2023/3/1 | |
| 8 | 2023/3/1 | 2023/3/15 |
| 9 | 2023/3/1 | |
| 10 | 2023/3/1 |
答えとしては、
1月: 2
2月: 3 ( 3名入会、2名退会)
3月: 6 ( 5名入会、2名退会)
ですが、これをTableauでグラフにするとどうしたら良いんだろう?とちょっと考えてしまいました。
Tableauは行と列で全てを表現するので、横軸を入会日にするか退会日にするかというところで無理そうです
横に入会のデータと退会のデータを並べたのでは、現在のユーザ数がパッとはわかりません
解決策
こういう表にする必要があります
これさえ作ってしまえば、計算フィールド作ってIF文で足したり引いたりして、簡易表計算で累計とかやれば作れそうです。
| ユーザID | 入会or退会発生日 | 退会 or 入会 |
| 1 | 2023/1/1 | 入会 |
| 1 | 2023/2/1 | 退会 |
| 2 | 2023/1/1 | 入会 |
| 2 | 2023/2/1 | 退会 |
| 3 | 2023/2/1 | 入会 |
| 3 | 2023/3/1 | 退会 |
| 4 | 2023/2/1 | 入会 |
| 5 | 2023/2/1 | 入会 |
| 6 | 2023/3/1 | 入会 |
| 7 | 2023/3/1 | 入会 |
| 8 | 2023/3/1 | 入会 |
| 8 | 2023/3/15 | 退会 |
| 9 | 2023/3/1 | 入会 |
| 10 | 2023/3/1 | 入会 |
それにはPrepBuilderで同じ表を2つ作ってクリーニングしてユニオンするんだー!と思ってやってできたのだけど、実はカスタムSQLでピボットすれば一発でしたとさ
というか、Tableauのドキュメントにあるまんまな例でした
でも良い勉強になったのと、解決のアプローチは合っていたので満足ー
と思ったらExcelとかCSVはカスタムSQLは非対応とのことです。
NOTE: Beginning with Tableau 2020.2, legacy Excel and Text connections are no longer supported
まぁ、実際のデータはたいていDBを使うし、SpreadSheetだったらピボットなんてしないでいい感じで別のシート作れば?ってことですかね
実際それで問題なさそうだから、次に壁にぶつかるまでは解決してことにしておきます。
