Ledge Tech Blog

We're the data scientists and AI engineers behind Ledge.

「TableauでExcelっぽい棒グラフを作成してくれないか」と上司に言われたときの2つの対処法

こんにちは。レッジインターン生の大熊です。今回はExcelっぽい幅の狭い棒グラフをTableauで作成する方法をご紹介します。 「ExcelっぽいグラフをTableauで作成してくれないか」という声を稀に聞きます。しかしTableauのデフォルトの機能で棒グラフを作成すると、幅が均等な状態で作成されるので、塊に応じてスペースをちょっと開けたい場合にはひと工夫必要です。

そして、工夫の仕方は大きく分けて以下の2種類あります。

  • データに階層構造がない場合(e.g.売上と利益の比較)
  • データに階層構造がある場合(e.g.同月における各年の比較)

本記事ではこの2種類のExcelっぽい棒グラフの作り方を紹介します。

1.データが階層構造にない場合(e.g.売上と利益の比較)

データが階層構造にないとは、下の左図のデータから、右図のように作成したい場合のことを指しています。この場合は簡単に作成できます。

今回は上図を目標にします。つまり各月における売上と利益を棒グラフで表現し、月ごとに隙間を少し空けるやり方を紹介します。

1-1.通常の棒グラフを作成する

今回は売上と利益はそれぞれ別の列に格納されているので、メジャーバリューを使用して棒グラフを作成します。

1-2.メジャーバリューに0を2つ追加する

メジャーバリューの枠の中をダブルクリックすると計算式が打てるようになるので、そこに「0」と入力したものを2つ作成します。 そして2つの0上端と下端に置き直します。

すると、ビューには値が0の棒グラフが作成され、スペースが生まれます。

1-3.レイアウトの調整

スペースが作れたので、ほぼ完成です。後は好みに合わせてレイアウトを調整するだけです。 今回は以下のように、月のラベルを下に持ってきてみました。

Tabelauの標準の機能ではラベルを直接下部に持ってこれないので、以下の調整を行いました。

  • 列の各ヘッダー、フィールドラベルを非表示にする
  • 行シェルフに「-WINDOW_MAX(SUM(売上))*0.05」を入力し、二重軸&軸の同期を行う。(この時表計算は「表(横)」)
  • メジャーバリューのマークは棒グラフ、WINDOW_MAXのマークは円にし色の不透明度を0%にする
  • WINDOW_MAXのマークラベルに「月(オーダー日)」を追加し、ラベルの水平方向の配置を左にする
  • メジャーネームの並び変えで、WINDOW_MAXの項目を利益の横に持ってくる
  • 行のゼロラインと0の棒グラフの色を統一する

2.データが階層構造にある場合(e.g.同月における各年の比較)

階層構造とは年>月>日のように階層があり、その階層でグルーピングしたいときです。別の表現をすると、ディメンションを2つ使って棒グラフを作るときです。 本稿では以下の図を目標にして作成します。

なお本稿では年×月の粒度で行いますが、エッセンスを理解すれば別の種類のディメンションの組み合わせでも、同様の棒グラフを作成できます。 また、このグラフはWorkout Wednesdayの2020W23のチャレンジと同様ですので、データやワークブックはこちらからダウンロードできます。

作成のイメージ

作成のイメージとしては、各棒グラフを置く箇所を日付に置き換えて表示するイメージです。例えば2018年1月のデータは2020年1月3日、2019年1月のデータは2020年1月8日とラベリングし、横軸を日単位にして、棒グラフを描画します。1月のデータは1月付近に、2月のデータは2月の付近にラベリングすることで、月ごとにまとまった棒グラフを作成できます。

2-1.スペースの大きさを決めるパラメータを作成する

浮動小数点数で許容値が「すべて」のパラメータを作成します。 これが各棒をプロットする間隔を調整します。

2-2.計算フィールドを作成する

今回作成する計算フィールドは1つのみです。以下の計算フィールドを作成します。

//Calculation1
DATEADD("day"
        , 2 + INT([Bar Width] + 1) * (YEAR([Order Date]) - ({MAX(YEAR([Order Date]))}-1))
        , MAKEDATE(2020, DATEPART("month", [Order Date]), 1)
)

これによって、1月のデータは2020年1月付近に、2020年2月のデータは2月の付近にラベリングされます。具体的にいうと、2016年から2019年までデータがあり、パラメータが4のとき以下のように割り振られます。

  • 2016-04-13 → 2020-03-24
  • 2016-11-03 → 2020-10-24
  • 2017-04-13 → 2020-03-29
  • 2017-11-03 → 2020-10-29
  • 2018-04-13 → 2020-04-03
  • 2018-11-03 → 2020-11-03
  • 2019-04-13 → 2020-04-08
  • 2019-11-03 → 2020-11-08

({MAX(YEAR([Order Date]))}-1)が2019-1=2018となるので2018年を基点にしてみると式が理解しやすいです。イメージとしては、各日付が2020年の同月の初日に割り振られ、年に応じて日付が足し引きされています。そして同月内の年で比較すると、間がパラメータで指定した4日分空いていることがわかります。

2-3.配置する

列シェルフにCalculation1を、行シェルフに売上を置き、年(オーダー日)を色に配置します。 そして列シェルフにあるCalculation1を右クリックし「正確な日付」に変更します。 最後にビュー内の横軸を右クリックし、書式設定→軸と選択。次にスケール内の日付で「カスタム」を選択し、「MMM」と入力すれば完成です。 下にGIFとして一連の動作をまとめたので参考にしてみてください。

まとめ

今回はTableauでExcelっぽい棒グラフを作る方法について2つご紹介しました。

グラフを作成する時は「何を明らかにしたいか」という点を明確にしておくことが重要です。今回の2番目のグラフ場合、「同月における各年の比較」を見るのには向いているかもしれませんが、推移を追うことは難しそうです。

また、「同月における各年の比較」を見るためのベストプラクティスがExcelっぽい棒グラフかと言われたら、議論の余地がありそうです。その場の状況に応じて最適なグラフを選択することは常に念頭に置いておきたいです。