[Tableau]分析の粒度を変える際はLOD表現でFIXするカラムも見直せ!
例えばとあるゲームのナンバリングが1~3まで出ていたとして、どれだけのユーザーが最新のナンバリングをプレイしているのかを見たいとする。
この場合、どのナンバリングのプレイヤー数がどのくらいいるのかを色分けして月別で可視化することを考えた。
でも同時期に複数のナンバリングをプレイしている人がいて、単純には可視化しづらい。
各プレイヤーがプレイした最大のナンバリングをもとに色分けしたい。
そんな時につまづいたポイントの話。
全プレイヤーのプレイ履歴が下記のような形で表に記録されていたとする。
左のカラムから順に、ユーザーID、プレイ日付、ゲームのナンバリングを示す。
ID | Date | Numbering |
1111 | 2023-11-01 | 3 |
1111 | 2023-11-01 | 1 |
1111 | 2023-11-02 | 2 |
1111 | 2023-12-01 | 2 |
2222 | 2023-11-01 | 1 |
3333 | 2023-12-01 | 3 |
プレイヤー1111は11月中に複数のナンバリングをプレイしており、分析する際は1111の最大ナンバリングは3であるとして集計する必要がある。
こんな時、TableauではLOD表現を使う。
正しい可視化方法
結論から書くと、下記のように可視化される。
列に月(Date)、行にID(メジャーをカウント(個別)に設定したもの)を設定。
それをMax_Numberingと名付けた計算フィールド(ディメンション、不連続に設定したもの)で色分けしている。
1 | {FIXED [ID],DATETRUNC('month', [Date]): MAX([Numbering])} |
この時の内部的な表は下記の通り。
ID | Date | Numbering | Max_Numbering |
1111 | 2023-11-01 | 3 | 3 |
1111 | 2023-11-01 | 1 | 3 |
1111 | 2023-11-02 | 2 | 3 |
1111 | 2023-12-01 | 2 | 2 |
2222 | 2023-11-01 | 1 | 1 |
3333 | 2023-12-01 | 3 | 3 |
表からもわかる通り、11月、12月の総プレイヤー数はそれぞれ2である。
11月はプレイヤー1111が1~3を、プレイヤー2222が1をプレイしている。
12月はプレイヤー1111が2を、プレイヤー3333が3をプレイしている。
ということで、正しく可視化されていることがわかる。
ここで大事なのは、列で設定するカラムの粒度に合わせてLODで固定するカラムを修正すること。
下記を読んでもらえば分かるが、「じゃあ日毎だとどうなるんだろ?」と思って「月」列をドリルダウンして「日」列にしただけでは適切なグラフにならないですよ、都度計算フィールドを見直さないといけないですよ、ということを強調したい。
つまづきポイント1: 固定するカラムが足りない
最初自分はMax_NumberingをIDのみで固定してしまっていた。
1 | {FIXED [ID]: MAX([Numbering])} |
すると、グラフは上記の通りになる。
この時の内部的な表は下記の通り。
ID | Date | Numbering | Max_Numbering |
1111 | 2023-11-01 | 3 | 3 |
1111 | 2023-11-01 | 1 | 3 |
1111 | 2023-11-02 | 2 | 3 |
1111 | 2023-12-01 | 2 | 3 |
2222 | 2023-11-01 | 1 | 1 |
3333 | 2023-12-01 | 3 | 3 |
プレイヤー1111のMax_Numberingが12月も3になってしまっている。
Dateを固定しなかったことで、全期間におけるプレイヤー1の最大ナンバリング数(=3)がMax_Numberingとなってしまっているためだ。
つまづきポイント2: 月別で可視化するのにmonthlyでDATETRUNCしていない
Dateも固定する形に修正したのはよかったが、まだ足りなかった。
1 | {FIXED [ID],[Date]: MAX([Numbering])} |
グラフは上記の通りになる。
この時の内部的な表は下記の通り。
ID | Date | Numbering | Max_Numbering |
1111 | 2023-11-01 | 3 | 3 |
1111 | 2023-11-01 | 1 | 3 |
1111 | 2023-11-02 | 2 | 2 |
1111 | 2023-12-01 | 2 | 2 |
2222 | 2023-11-01 | 1 | 1 |
3333 | 2023-12-01 | 3 | 3 |
今度は日毎に固定されてしまったので、2023-11-02のプレイヤー1111のMax_Numberingが2になってしまい、誤ったグラフが生じてしまった。
これが日毎の可視化だったら問題なかったが、今回は月別に可視化していたので誤りとして表面化してしまった。
ちなみに日毎のグラフだと下記のような感じ。
可視化の粒度を変える際はLOD表現でFIXするカラムも見直す必要があると学んだ。
この記事へのコメントはこちら