メジャーの横持ちと縦持ちの違い(クロス集計表)

【Tableau Tips】メジャーの横持ちと縦持ちの違い(クロス集計表)

Tableau関連の記事で、度々 クロス集計表(テキスト表)について掲載しておりますが、今回はその中でメジャーの取り扱いについてご紹介したいと思います。

メジャーは、横持ちのデータでは、メジャー同士での計算が容易(例:利益率=SUM(利益)/SUM(売上) )ですが、横(列)のメジャーの合計などは集計処理に少し工夫が必要になります。

また、メジャーが縦持ちのデータでは、メジャー同士での計算は少し工夫が必要になりますが、縦(行)のメジャーの合計など集計処理は容易になります。

データの持ち方によって、データの処理方法に特徴がありますが、それぞれ扱えるようになっておくと、多くのデータに対して対応できるようになります。

 

こちら、よく見かける、列に売上や数量などのカラムが並んでいる表のサンプルです。

今回は、売上データに対して、目標を3段階設定した例としています。

次に、列カラムをピボット処理で行に変換した縦持ちの表のサンプルです。

これらの目標に対して、どこまで達成できているか(目標達成の判定)をTableauで表現していきたいと思います。

 

※いずれも、Tableau標準のサンプルスーパーストアに少し加工を加えたデータとなります。

横持ちデータのサンプル:test_horizontal

縦持ちデータのサンプル:test_vertical

 

それぞれ、Tableauで表現してみましょう。

1.各データをTableauで表現してみる

1)横持ちデータの例1

1つ目の例は、行にフィールドを並べて、表現する例となります。(横持ちデータのサンプルを利用します)

地域、マネージャー毎に、目標と売上、数量、利益を並べ、目標がどこまでクリアしているかを表現しています。

各メジャーのフィールドは、「不連続」タイプに設定することで以下のように表現できます。

目標判定の計算フィールドを以下のように作り、どの目標までクリアしているか表現しています。

※プログラミング経験のある方はご存知と思いますが、IF文で処理する場合、このケースでは「目標の高いもの」から順に処理していく必要があります。目標3クリア をまず判断し、次に目標2、最後に目標1という順で処理しています。もしこれを逆にしてしまうと、目標1をクリアしたものはすべて目標1として処理されてしまいます。(IF文の正しい処理)

 

メジャーの取り扱いに関する注意事項

行や列にメジャーを「連続」タイプで追加すると、以下のようになります。

<行にメジャーを「連続」タイプで入れた場合>

<列にメジャーを「連続」タイプで入れた場合>

いずれも、表ではなくグラフになってしまいますので、ご注意ください。

 

2)横持ちデータの例2

2つ目の例は、メジャーネーム・メジャーバリューで、まとめて表現する例となります。(表現する内容は例1と同じ)(横持ちデータのサンプルを利用します)

・ディメンション(地域、マネージャー)を行に入れます。

・「メジャーネーム」 を、フィルタに入れ、並べたいメジャーを選択し、列にもメジャーネームを入れます。(列名として表示)

・「メジャーバリュー」を、マークのテキストに入れます。

・メジャーネームを必要に応じて並び替えします。これで、図のように表として作成が可能です。

 

<メジャーネームのフィルタ例>

<作成例>

目標判定は、例1と同じものが利用可能です。

ただし、例1のように、どの列にでも「目標判定」を入れることはできず、ディメンションやメジャー(不連続)が並ぶ範囲の中で表現することになります。

(メジャーバリューは数値を扱うため、基本的に文字は入れられません)

今回の目標判定はディメンションのため、下図のように、左側の列にしか入れられない点注意が必要です。

3)縦持ちデータの例

3つ目の例は、行にフィールドを並べて、表現する例となります。(表現する内容は例1、2と同じ)(縦持ちデータのサンプルを利用します)

縦持ちの場合は、名称と値 といった形となり扱うのはシンプルになります。

列に名称を入れると、下図のように列が表現され、マークのテキストに値を入れると、このように簡単に表現することができます。

(1,2の例と同様に、行には地域、地域マネージャーを入れておきます)

表の作成自体はかなりシンプルに済みましたが、この表にある「目標判定」については、少し工夫が必要となります。

まず、今までの流れからそのまま計算した例から紹介します。

 

 

縦持ちのデータはその名のとおり、縦にデータが並んでおり、単純に横方向に計算ができないのです。

(下図のように、名称1の値と、名称2の値をつかって計算したくても、「名称カラムの名称1、値カラムの値1 」×「 名称カラムの名称2、値カラムの値2」をと簡単に計算できません。

横持ちのデータの場合、列カラム1つ1つが名称1の値、名称2の値 となっているので、計算が容易です。)

今回のケースでは、

・IF 名称のカラム=’名称1’ THEN 値のカラム END  ・・・① (例:利益)

・IF 名称のカラム=’名称2’ THEN 値のカラム END  ・・・②(例:売上)

を作り、①利益 ÷ ②売上 =利益率 のような計算をしないといけません。。。

目標クリアの判定計算ですが、以下のように、名称が目標のときの値と、名称が売上のときの値をそれぞれ抽出してから比較判定をする必要があります。

(念のため、条件に合わないNULL値のものはZN関数で0として扱う式にしています)

これを表で使うと、以下のようになってしまいます。

これがどのようなことになっているか、少し補足させて頂きます。

売上と目標1~3のフィールドをそれぞれ作成し以下のように、表に追加したところ、以下のように別々の行として表がわかれました。これはデータが縦持ちのためによるものです。

これを解消するには、目標1~3や売上といった別々のレコードになっているものを、1つのレコードとして扱うための処理が必要になります。

今回のレコードが分かれて表示される要素は、「名称」となります。名称を無視することができれは、同じ要素のものを1つの行に集約することが可能です。

 

以下は、Tableauの独自関数である「LOD関数」のExclude()を使っています。目標の金額と売上を比較してクリアしていたら判定結果を表現する式に対し、名称を無視するという条件を加えています。

これで、別々のレコードとして集計されたものが1つのレコードに表現可能になります。

 

参考:Tableauのヘルプ(Exclude関数 @LOD関数)

※注:LOD関数は、Tableauの中では難易度が少し高い内容となります。ただ、特定の要素を表から除外する方法としては把握しておくと便利です。

 

<計算フィールドの例>

{exclude [除外対象のフィールド] : メジャーの集計 } となります。

<Excludeで名称を除外した例>

以外と、クロス集計の表を作っていくと、上記のような問題が発生することがありますので、回避策として利用できるようになっておくと便利かと思います。

 

今回の例では、メジャーを横持ちと縦持ちで利用したときの違いと、これらをクロス集計表で同じように扱うための事例を紹介させて頂きました。ダッシュボードなどを次々と作成していくと、中には行・列でメジャーを扱うケースも出てくることがあります。このような場合、事前のデータ処理でメジャーを縦持ちで処理することで、回避するようなケースも出てきますが、メジャーを縦持ちにすると少し扱いに注意が必要になりますが、色々と方法を駆使することで表現可能ですので、ぜひ色々の形で自由にデータが扱えるようにしておきましょう。

 

クロス集計表以外での横持ち・縦持ち

少し蛇足になりますが、今回のデータをクロス集計表以外で表現してみたいと思います。

3段階の目標に対して、どこまで到達しているか、視覚的に確認するグラフを作成する例となります。

1)横持ちデータの例1

メジャーネーム・メジャーバリューを使った場合、以下のような表現が可能です。

列や行にメジャーネームを使わず、メジャーバリューだけで表現すると、グラフを重ねて表示することが可能です。 ※メニューの分析➡スタックマーク:OFF の設定が必要。

メジャーネームは、色やサイズにセットし、順番を調整することで、目標1~3に対して、売上がどの程度いっているか重ねて表現したグラフとなっています。

2)横持ちデータの例2

メジャーネームやメジャーバリューを使わずに表現する場合は、リファレンスバンドを使うと、以下のように表現することが可能です。

(列にメジャーを複数入れて棒グラフを重ねて表示するBar In Barグラフの場合、2重軸で表現するため、今回のような3つ以上のメジャーの場合は不可となります)

 

売上0~目標1、目標1~目標2、目標3~目標3 、それぞれバンドの設定をすることで、色分けして表現ができます。

3)縦持ちデータの例

横持ちの1のメジャーネーム・メジャーバリューを使った場合と、同じように(名称と値)、表現が可能です。

列や行に名称を使わず、値だけで表現すると、グラフを重ねて表示することが可能です。 ※メニューの分析➡スタックマーク:OFF の設定が必要。

名称は、色やサイズにセットし、順番を調整することで、目標1~3に対して、売上がどの程度いっているか重ねて表現したグラフとなっています。

※縦持ちの場合、メジャー同士の計算などは少し工夫が必要になりますが、このようなグラフであれば横持ちと同じように扱えたりします。

4)横持ちデータの例1の応用

横持ち1の応用になりますが、メジャーバリューで目標1~3を表現して、売上だけ別に追加して2重軸にすると、以下のように、売上だけグラフの表現を変えたりできます。

横持ちと縦持ちでデータの構造は異なりますが、Tableauでは色々と工夫することで同じような表現をすることはできるようです。

実際、様々なダッシュボードを作っていくと、縦持ちだけ、横持ちだけ では表現が難しい状況も出てくると思います。

そのとき、両方扱えるようになっておくと、データソース自体を縦持ち+横持ちのような形で作成し、用途によって使い分けて表現していく、といったことも可能になります。

どちらにも慣れておくことで、より自由度の高いダッシュボードの作成ができるようになると思いますので、ぜひ、それぞれ使えるようになりましょう。

 

※Tableau 2022.3時点の情報となります

BI製品のサポートはぜひKCMEで!

AlteryxとBI製品を組み合わせた環境構築やサポートなど承ります。お気軽にご相談ください。

おすすめの記事