ガースー日記

笑ってはいけないネタに惹かれて、昔は黒光り日記、というブログ名でやってました。(大学生のノリでした..)

Tableauでのカレンダーの作成方法を理解する

Vizを作るためにTwitterで面白そうで勉強になりそうなダッシュボードを作ってる方はいないかと探していたところ、以下のtweetが難易度的にも良さそう、と考えました。

 

publish.twitter.com

Tableau User Group - View Recordings from Past Events by Ethan Lang

 

課題感

  • Tableauにおけるカレンダーの作成方法がいまいち分かっていない
  • 前回に引き続き、表計算を理解したい

 

まずはカレンダーの作成方法を理解するために、先人の方が作ってくれたダッシュボードを眺めて、疑問点を調査していきます。

検証用に利用したダッシュボード

先人の方が作ってくれたもの(Janというシート)を残して、検証用にいろいろ作業を行っています。

 

  1. "”の意味が分からない

    f:id:drizzlyrain:20220416201819p:plain

    行と列に""というデータが存在している

    こういう場合は、手っ取り早く外してしまうと挙動を理解しやすいので、外してみます。

    f:id:drizzlyrain:20220416202135p:plain

    行と列の""を削除することで、日付の区切り線が失われる

     

  2. 日付は不連続値を利用するよう注意する

    元々はフィルターを利用して年月が一意になっていましたが、複数選択した際の挙動を検証しました。

    最初、""になっていたものをINDEX()で検証しているのは、不連続値を利用したときに、INDEX()が増えるのかを検証したかったためです。

    複数年・月選択するとインデックスが増えるシート


    この際、日付を連続値として利用すると、INDEXが増えてしまいます。
    ただ、この際の挙動がINDEXに慣れておらず理解できませんでした。

    f:id:drizzlyrain:20220417153447p:plain

    INDEXの割り振られ方検証

     

    列の曜日に対して、2021年1,2月はINDEXが途中から振られています
    2021年の1月の火曜日からINDEXが増えているのは、5~9日が、2020年1月の2週目に存在しているため。

    同様に行に着目すると、2020年1月1~4日が存在しているため、2021年1月1~2日は、日付が被っています。
    そのため、INDEXが増えた、という感じです。


    そもそも論の話だと、曜日や週が不連続のデータを利用していることと、表計算を使いたいので日付データも不連続にする、というのが自然ですね。

実際にカレンダーを作成していく

ある程度、カレンダーの作成ロジックを理解したところで、サンプルスーパーストアのデータを利用して自分でも作ってみます。

今回は、前日分との利益比較カレンダーを作成してみました。

 

単純にカレンダーを作るだけだと面白くないので、日別で利益を表示する。

かつ、それが前日と比較して上がったのか下がったのか?をコンディションとして眺められるものを作ってみました。

(Tableauで重要視されている、Preattentive Attributes、という点を考慮すると、カレンダーでやらない方が良いのですが、今回は勉強用なのでご承知おきください)

help.tableau.com

 

前回の記事に引き続きですが、売上データでカレンダーを作ろうとすると売上自体が存在しない日付があります。

それをZNを利用して0埋めすることはできません。

drizzlyrain.hatenablog.com

 

そこで最後の方に宿題にしていた、データブレンドによる0埋めを検証してみました。

f:id:drizzlyrain:20220417155435p:plain

カレンダーデータとブレンドすることで0埋めが可能

ちょっと色合いが微妙かもですが、日々の利益をカレンダーの内部に埋め込み、利益が無かった日付は0埋めできました。

 

カレンダーによくある機能だと、天気予報が挙げられると思います。

あまり使い慣れてないのもあったので、Tableauの形状を利用して前日との利益比較を行ってみました。

 

前日分との利益差分の集計

ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), -1)

計算式書くより、差の集計を利用した方が楽かもしれません。

 

前日分利益差分±判定

IF [前日利益差分] >= 0 THEN 1
ELSEIF [前日利益差分] < 0 THEN -1
ELSE 0 END

後者の計算フィールドは、どの形状が、どのデータに当て嵌めるのか?に利用するので、1とかでなくても大丈夫です。

f:id:drizzlyrain:20220417160558p:plain

 

初日のみ、前日分との利益比較ができませんが、こんな感じのアウトプットができました。

f:id:drizzlyrain:20220417160652p:plain

 

最後に

データブレンド利用すれば、0埋めが一応できる、ということが分かってよかったです。

 

Tableauのビジュアルを綺麗にするために、""であったり、INDEXなどを利用しているものをちょくちょく見かけますが、どういう挙動なのか?を理解するきっかけになったと思います。

オシャレなVizを作られてる方々に一歩でも近づくために、どなたかの参考になれば幸いです。

 

参考記事

web-kaizen.co.jp