ねこ吸いたい

勉強と読書記録など

【Tableau Tips】日付レベルを動的に変更する

グラフ上で見せる日付単位の細かさを年・月・日と変えたい、ということはありませんか?長期のトレンドが見たい場合もあれば、短期間での変化を見たいときもあります。そんなときに、日付レベルを動的に変えるテクニックが便利です。

 

基本:ドリルダウン/アップを利用する

Tableauの基本機能として、グラフの+−ボタンを押すと、見せる日付を細かくしたり粗くしたりすることができます。

この機能自体はシートを編集することなく使えるため、作成者側では非常に便利です。ただ、閲覧者がTableauに慣れておらずこの機能を知らない、使い方を伝える機会がない場合があります。その場合に、以下の応用編が役立ちます。

 

応用:パラメータで日付単位を切り替える

最初にイメージをお伝えすると、表示する日付単位をパラメータで選択し、選択した値に応じてグラフの粒度が変わるような計算フィールドを作ります。基本的には以下のKnowledge Baseの流れで作成します。

参照:日付レベルの動的な変更

 

パラメータを作成する

まずは閲覧者が見たい日付単位を選ぶためのパラメータを作成します。作成は計算フィールドと同じ以下の▼からできます。

作成画面から、ユーザが選択するためのリストを作ります。今回はわかりやすいように文字列のリストで年・月・日が選べるようにしておきます。

作成完了すると、パラメータは画面左下に表示されます。右クリック > パラメータの表示 でシート上に表示してみましょう。フィルタなどと同じく、画面右上に出てきます。この時点では、パラメータの値を動かしても特にグラフに変化はありません。

 

年月日の項目を作る

実際に表示する年月日の値を作成します。一番簡単な方法は、左の画像の通り元になる日付項目から「カスタムの日付」を生成することです。年、月、日を繰り返し作成しますが、このとき右画像のように「日付値」を選択します。

    

パラメータと連動する計算フィールドを作る

ここまでできたら、パラメータの値と連動して年月日を表示する項目を作ります。CASE という条件分岐の関数を使い、どの値を選んだら何を表示するかを記載します。ここでは、パラメータで年・月・日を選んだら先程作った項目を表示するようにしています。最後をENDで締めていなかったり、表示する項目たちのデータ型が異なるとエラーになりますのでご注意ください。

 

CASE [表示単位の選択]
WHEN "年" THEN [オーダー日 (年)]
WHEN "月" THEN [オーダー日 (月)]
WHEN "日" THEN [オーダー日 (日)]
END

 

パラメータを動かす

計算フィールドができたらあとはシートに入れて、項目を右クリックで出てくる「不連続」「正確な日付」にチェックが入った状態にします。パラメータを動かしてみましょう。項目によって、グラフの粒度が変化するはずです。

粒度は変化するのですが、どの項目を選んでもyyyy/mm/ddの形式になるので、月や日単位のシートだと軸が読めません。これは書式設定の日付型が「日付単位」の中で同一のためです。

 

簡単に見やすさを優先するならば、上に「年」を表示して、下の軸は 右クリック > ヘッダーの表示 のチェックを外して非表示でもいいかもしれません。

 
番外編:表示項目を自分で作る

正直なところ、年月日に対応して書式も2022年、2022年2月、2022年2月6日と適切な粒度になってほしいです。そんな場合は自分で式を作ってしまうのも一案です。

以下は年月日の必要な要素を文字列として取得し、無理やりくっつけた例です。DATENAMEで月を持ってくると英語表記(February)になってしまうので、月だけDATEPARTで数値取得後、文字列に変えています。*更なる改善案を考え中です。

 

CASE [表示単位の選択]
WHEN "年" THEN DATENAME('year', [オーダー日]) + "年"
WHEN "月" THEN DATENAME('year', [オーダー日]) + "年" + STR(DATEPART('month',[オーダー日])) + "月"
WHEN "日" THEN DATENAME('year', [オーダー日]) + "年" + STR(DATEPART('month',[オーダー日])) + "月" + DATENAME('day',[オーダー日])+ "日"
END

 

式はともかく、軸の可読性は上がりました。

 

まとめ

見せる日付の単位を変化させるには、ドリルダウン以外にもパラメータを使った制御ができるという例でした。2022.3からの動的ゾーン表示という、シートの表示非表示を切り替える機能も使えなくはないのですが、まずは基本機能でどう実現するかをまとめてみました。