Ledge Tech Blog

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

【Tableau】 Workout Wedesday 2021W1を解いてみた

こんにちは。レッジインターン生の大熊です。 今回から不定期ですが、Workout Wednesdayの解説を紹介していきます。 Workout WednesdayはTableauのコミュニティ活動の1つであり、お題にあるVizを再現することでTableauのスキルを磨くことを目的としています。

記念すべき第1回目はWorkout Wednesday2021 Week1について解説していきます。

2021W1のページ:http://www.workout-wednesday.com/wow2021w1tab/

2021W1の課題

今回のお題は「Can You Find the Variance Along the Line?」というもので、以下のようなダッシュボードを作成するのが目標です。課題の大筋としては、基準としたい年を選択し、その基準年の値と、「最も古い値」、「最も新しい値」、「基準の直近の値」の3つの比較指標との差分(%)を示せるか、というものです。

またその他条件は以下のようなものです。公式ページにあるものを引用しています。

  1. LOD計算は使用不可
  2. 数値形式をパーセントに変換するための計算フィールドは使用不可。
  3. 計算フィールドにハードコードされた年がない(値は動的に計算する)
  4. ビュー数は1に収める
  5. ツールチップ、色、書式設定を一致させる
    1. 選択された年マークの色は#F0007B
    2. 矢印のユニコードは▲ U+25B2, ▼ U+25BC
    3. ダッシュボードのサイズ:1000px x 800px)
  6. 米国の食糧不安率の年別推移を示す折れ線グラフを作成し、ユーザーが選択した年と比較年を反映した丸印を付ける。
  7. ユーザーがどの年に注目したいか、どのようなタイプの比較をしたいかを切り替えられる機能を構築する。
    1. データセットの中で最も新しい年(今回の場合は2019年)
    2. データセットの最初の年(今回の場合は1995年
    3. 前年(=選択年-1)

作成の方針としては、いかにして基準年の値を保持しながら「最も古い値」、「最も新しい値」、「基準の直近の値」の値を取得するかが重要そうなので、上手く表計算で取ってくる必要がありそうです。最も古いと最も新しいはFIRST()とLAST()で取得でき、直近の値は(基準年)-1かLOOKUP()で取得できそうです。今回のお題は比較的易しめかと思われます。

以下、具体的に手を動かしながら作成していきましょう。

さっそく作成してみる

1.データの読み込みと整形

ダウンロードしたデータをTableauに読み込んだら、作業しやすいようにいくつか設定をします。なお、元のExcelのカラムは階層的に作成されているので、そのままExcelファイルを読み込むと上手く読み込めません。データインタープリターを使用すると上手く読み込んでくれます。

  • 「Year」のデータ型を「日付」にする
  • 「Very low food security Percent of households」カラムを非表示にする。
  • 「Food insecurity (includes low and very low food security)」のカラム名を「value」に変更する

2.パラメータの作成

基準となる年を選択するパラメーターと、比較する指標を選択するためのパラメータを以下のように作成します。

なお「1.対象年」のリストは日付でも作成できますが、計算フィールドでいちいち年を抽出するのが手間かかるので、初めから整数で作成しています。まずデータ型を整数の状態にし、「範囲」で1995~2020としたのちに「リスト」に切り替えると一括して年のリストを作成できます。

3.「対象年の値」、「比較年の値」、「対象年と比較年の増減率」の作成

それぞれ以下の方針で作成できます。

  • 対象年の値:「Year」と「1.対象年」のパラメータを使用して、両者が一致するときにvalueを返すようにします。
  • 比較年の値:まず「2.比較年」に該当する年を特定するフラグを作成します。そしてそのフラグがTrueを返す年でvalueを返すようにします。
  • 増減率:(対象年の値-比較年の値)/比較年で算出できます。

順に計算フィールドを作成していきます。

3.対象年のvalue

IIF(MAX(YEAR([Year]))=[1.対象年], SUM([value]),NULL)

4.比較年フラグ

CASE [2.比較年]
WHEN 'First Year' THEN IIF(FIRST()=0,True,False)
WHEN 'Most Recent Year' THEN IIF(LAST()=0,True,False)
WHEN 'Previous Year' THEN ATTR(YEAR([Year]))=[1.対象年]-1
END

WOWのページにはヒントとしてLOOKUP()の使用を記述していますが、今回はFIRST()とLAST()だけを使用して、直近年の特定は、(パラメータの値)-1で特定しています。ただし今回の方法だと、年に抜けがあった場合に対応できません。このパターンに対応したい場合はLOOKUP()を使用します。

5.比較年のvalue

IIF([4.比較年フラグ],SUM([value]),NULL)

6.対象年と比較年の増減率

WINDOW_MAX([3.対象年のvalue])/WINDOW_MAX([5.比較年のvalue]) - 1

4.点を描画するための計算フィールドを作成

以下の計算フィールドを作成します。

7.点

IF ATTR(YEAR([Year]))=[1.対象年] or [4.比較年フラグ]
THEN SUM([value])
ELSE NULL
END

これによって対象年と比較年のvalueのみが保持されたフィールドができます。

5.ビューの作成

まずピルを以下のように配置します。なお配置したときに出るNULLの存在を教えてくれるインジケーターは非表示にしています。

次に以下の操作を行い、折れ線グラフを完成させます。

  • 行シェルフの「7.点」を右クリックして二重軸にする
  • 軸の同期をする。
  • 右側のヘッダーを非表示にする。
  • 「7.点」のマークで、IF [4.比較年フラグ] THEN 1 ELSE 0 ENDを作成し色に入れる。(カラーパレットをいじらなくても指定色#F0007Bへ変更できるようにするため)
  • 各種、色を変更する。

その後、軸の見た目を整えます。わかりにくいのは以下の2点でしょうか。

  • 横軸の表示を「1995年」→「1995」みたいにする:横軸の書式設定のスケールにおいてカスタムを選択し、「yyyy」と入力する
  • 縦軸の単位を%表記にする:「value」を右クリックして出てくる既定のプロパティ内の「数値形式」→「数値(カスタム)」で小数点を0桁、サフィックスに「%」を入力する

そのほかに関しても以下のGIFで操作を確認できます。

次に、ビューのタイトルを変更します。以下のようにタイトルに記入します。

この時、「6.対象年と比較年の増減率」はプラスなら▲、マイナスなら▼を先頭につける必要があります。「6.対象年と比較年の増減率」を右クリックして出てくる既定のプロパティ内の「数値形式」→「カスタム」において「▲ 0%; ▼ 0%; "N/C "」と入力することで表示できます。

最後に、ツールヒントの中身を整えます。ツールヒントを以下のように設定します。

これで必要なビューの作成は終えました。

6.ダッシュボードの作成

シートが1枚しかないのでそのまま載せればOKです。ポイントは2種類のパラメータを浮動にして、小さくした状態で配置します。パラメータを小さくするとボタンだけっぽくなります(キャプチャでは上手く表示されないですが、実際の画面ではボタンのように表示されます)。

以上で完成です。

まとめ

本記事ではWorkout Wedesday 2021W1を解くプロセスについて解説しました。今回の出題者のCandra McRaeさんのコメントや課題の条件から、LOD計算に頼らず表計算でシンプルに表すことの良さを伝える意図の課題であったのではないでしょうか。

TableauのLODや表計算は複雑ですが、使いこなすことで表現の幅が広がるので、基本は押さえておきたいところですね。