Tableauナレッジ - INSIGHT LAB

【Tableau】メジャーの一部カラムをピボットして縦持ちにする方法

作成者: okkun|2025年1月06日

はじめに

 こんにちは、okkunです。

 今回は表題にもある通り、メジャーの一部カラムを縦持ちにする方法について書いていきます。まずは以下のSampleデータの画像をご覧ください。

 このデータのうち黄色の15項目を「経費」としてまとめて集計してほしい、との要望がありました。ただ、後々ダッシュボードで経費項目それぞれの金額を可視化したい、とのこと。

 なるほど、単純に15項目を足してフィールドを作成すると、「通勤費」や「福利厚生費」といった経費の細分化ができなくなりますね…。

 かといって単純にピボットだけすると、Excel右側の「粗利」と「損益」が15倍になる、という現象が起きてしまいます…。

解決するには

 さて、というわけで上記の問題を解決していきます。が、ターゲットではない「粗利」「損益」についてはちょっと処理がややこしい。どういうことか。

 簡単なデータを用いて解説します。

 例えば、横持ちデータに「購入金額(青)」とは別に「各顧客の1年の合計購入数(橙)」のデータが存在するとします。これを縦持ちデータに変えると、赤枠線が示すように12か月分すべてに同じ値が配置されます。

ここで、この店舗で1年間に売れた商品数が知りたいです。求めるには…

  • 横持ちデータの場合:単純にsum
  • 縦持ちデータの場合:sumした後、縦持ちに変換した項目の数(今は12)で割る

 このデータの場合は、1月~12月までの12項目を横持ちデータ→縦持ちデータにした時に、12で除算する、という計算が必要になります。

 と、いうわけで。メジャーが複数項目存在する場合は、単純にピボットすれば良いわけではなく、縦持ちデータにする必要が無かった他のメジャーを「つじつま合わせ」する必要があります。

 この手順、Tableauでは以下2つのアプローチ法があるので、それぞれ分けて紹介します。

 ①Tableau Prepでつじつま合わせ(後続処理がある場合におすすめ)
 ②Tableau Desktopでつじつま合わせ(後続処理が無い場合におすすめ)
 
 

解決策① -Tableau Prep編-

 手順は以下になります。

 ⅰ. 一部カラムを縦持ちデータに変える
 ⅱ. Tableau Prepにて、経費以外のメジャーを経費項目数で割る
 ⅲ. 数値を確認する
 

ⅰ. 一部のカラムを縦持ちデータに変える(ピボットする)

①まずはデータをTableau Prepに取り込み、データ型を確認します。

 ②ピボットのステップを作成し、[設定]タブ から、経費15項目を「ピボットされたフィールド」へドラッグ&ドロップで移動します。

 ③ピボット1の名前→経費項目、ピボット1の値→経費 に変更します。(名前はダブルクリックで編集できるようになります。)

ⅱ. 経費以外のメジャーを経費項目数で割る

 ①クリーニングステップを作成し、 [計算フィールドの作成] から、以下の数式を記載して [保存]を押下します 。

   フィールド名:経費項目数   数式:{FIXED: COUNTD([経費項目])}

 

 ②再度 [計算フィールドの作成] から、「粗利」と「損益」を①の「経費項目数」で割る計算式を記載します。

 ③経費項目数のフィールドはこの先使用しないため削除します。

ⅲ. 数値を確認する

 ①まずはTableau Prep で「集計」フィールドを作成して、粗利、損益、経費を集計フィールドにドラッグしました。

 ②エクセルで損益、粗利、経費を集計してみました。その結果、Tableau Prepでの集計値とExcelでの集計値が一致していることがわかります。(比較しやすいように、Tableau PrepでROUND関数を用いて数値を四捨五入しました。)

解決策② -Tableau Desktop編-

 手順は以下になります。

 ⅰ. 一部カラムを縦持ちデータに変える
 ⅱ. Tableau Desktopにて、経費以外のメジャーを平均する
 ⅲ. 数値を確認する
 

ⅰ. 一部のカラムを縦持ちデータに変える(ピボットする)

 解決策① -Tableau Prep編- と同様です。手順③が終了したら、データを出力しましょう。

 

ⅱ. 経費以外のメジャーを平均する

 ①Tableau Desktopにデータを接続したら、計算フィールドで以下の数式を作成して終わりです。※「経費項目」以外のディメンションをFIXED内に挿入します。

   フィールド名:粗利_AVG   数式:SUM({FIXED [顧客コード],[顧客名],[担当部署]:AVG([粗利])})

   フィールド名:損益_AVG   数式:SUM({FIXED [顧客コード],[顧客名],[担当部署]:AVG([損益])})

 

ⅲ. 数値を確認する

 ①Prep編と同様、集計値を比較してみます。その結果、Tableau Desktopでの集計値とExcelでの集計値が一致していることがわかります。

 

おわりに

 今回は、Tableau Prepでメジャーの一部カラムを縦持ちにする方法を紹介しました。

 データをただ単純にピボットするだけでは解決しない!!という時に、本記事の内容をお役立ていただけると幸いです。