💡

Tableauのメジャーネームをディメンション化する

2024/06/20に公開

概要

Tableauのメジャーネーム、メジャーバリューは便利な使い方もできる反面、何かと不便である。
一体なぜ計算式で使えないのか・・・。

この制約がある事により、Tableauでの表現力が大幅に落ちてしまっている。将来的なバージョンアップでこの制約が取り払われる可能性も0ではないが、実現されるとしても当分先だろう。それよりも今できる代替案を模索する方が建設的だ。

簡単な例を挙げて解説する。

受注,粗利,売上
640,1024,2765

このような横持ちのデータを行で並べて棒グラフを作りたい場合どうするか。

普通にやるならメジャーネーム、メジャーバリューを使ってこんな感じで実装するだろう。

これで済む要件ならいいが、少しでも複雑な事をやろうとすると途端に詰む。例えばパラメーターを使って押した行の色を変えたいとか。あるいはそれぞれのメジャーが率を表すものだったとしたら、そのメジャーバリューの値(率)だけでなくそれぞれの分子&分母もツールヒントで表示させたいとか。これらの要件はいずれも計算フィールドの中でメジャーネーム or メジャーバリューが使えない為実現できない。

あるいはデータソースが簡単にいじれる要件であれば、下記のようにデータ自体を縦持ちにしてしまうのは有力な選択肢になる。

KPI,実績
受注,640
粗利,1024
売上,2765

そうすれば後はディメンション項目(上記の例では「KPI」)を行シェルフに突っ込めばいい。

計算式を使って様々な制御ができるので、この画像のように選択した行だけ棒グラフの色を変えるような事も簡単に実現できる。

しかし実際に使うデータはもっと膨大な行数と列数を持っているはずであり、そう簡単にピボット出来るような条件や環境が揃ってない可能性も十分にあり得る。そうした環境でも、疑似的に縦持ちを実現できる面白い代替案があるので今回はそれを紹介しようと思う。

縦持ちデータを無理やり作る

メモ帳でこのように書く。

これをテキストファイル化してデータ接続してもいいが、より簡単な方法を紹介する。
①Ctrl+A⇒Ctrl+Cで全体をコピー

②Tableau Desktop(またはTableau Public)をクリックしてウィンドウをアクティブな状態にしてから、Ctrl+Vを押す

そうするとこのようにクリップボードの内容を瞬時にデータソース化できる。

そこまでできたら、一つ計算フィールドを作る。
名前は「メジャーバリュー改」としてみたが、好きな名前を付けてよい。

こんな感じでIF文を作ったら、大元のデータソース(今回の例ではSheet1 (Sample))をクリックし、「受注」、「粗利」、「売上」の計算フィールドを各IF文の内側にドラッグ&ドロップする。

インデントを整えてこのような感じで仕上げる。

言い忘れたがクリップボードからデータソースを作った場合、データソース名がClipboard~と長い名前が自動で付加されるので、これは右クリックで好きな名前に変えてよい。

ここでは取り敢えず「KPIヘッダー」とでもしておく。

そうしたら後は列シェルフに先ほど作った「メジャーバリュー改」を突っ込むだけ!

と言いたい所だが・・何やら警告が出た。
リレーションシップが必要だという事である。まあ、本来のブレンドの使い方をするなら当然必要なのは分かるが、この場合は別に・・という感じだし、なんか無視してもいけそうな感はあるがこの警告は毎回出て鬱陶しいので対処しよう。
「今後このメッセージを表示しない」にチェックを入れて警告を抑制するのは何か怖いので、一つ計算フィールドを作る事にする。
それぞれのデータソースに対し、「Blend」という計算フィールドを作ってみよう。
中身は単に'Blend'と書いておく。
※これはあくまで一例なので値は定数であれば何でもよい。

そうしたら、大元のデータソースを選択してクリップアイコンをクリックする。

これで何をしても先程のような警告は出なくなった。

以上で完成である!
後は要件に応じていい感じに仕上げてもらえればよい。
例えば前述した選択行の色だけ変えたい場合はパラメーターを駆使してこんな感じで実装できる。

参考↓(Tableau Public)
https://public.tableau.com/app/profile/takashi.katsumoto/viz/Tableau_17166150581390/KPI_1
↑このTableau Publicに上げている実装は下記の記事とも関連しているので気になった方は合わせてチェックしてみて下さい。
https://zenn.dev/t_katsumoto/articles/8b938de4345af3
まあしかし、これも万能という訳ではない。ブレンドしている関係でブレンドの制約はまともに受けるので(メジャーが強制的に集約関数化されるとか)、ケースバイケースで使い分ける形にはなる。本当に強引にやるなら、棒グラフが3本なら3シートつくって1シートで1棒グラフ実装してダッシュボードシートで垂直コンテナでくっつけるという手法もあり得る。そうすればブレンドも必要ない。まあ、実装とメンテは大変だが笑

取り敢えず色々な選択肢を持つ事が大きな武器になると思うので、状況により最適な策を見つけてもらえればよいのかなと思う。

今回は以上です。

Discussion