コネヒト開発者ブログ

コネヒト開発者ブログ

Tableauでデータソースの更新に合わせて初期値も更新される日付フィルターの作り方

こんにちは!コネヒトのエンジニアあぼです。この記事はコネヒト Advent Calendar 2021の2日目です。

今回はコネヒトでもデータ分析に活用中のTableauから、Tableauにおいて使う頻度の高い日付フィルターのtipsを紹介します。

f:id:aboy_perry:20211130140426p:plain
日付フィルターの例

データソースが更新されたらフィルターも更新したい

Tableauではデータソースの更新をスケジュール、つまり自動化することができます。データが更新されると新しいデータが増え(例えば月1更新ならば前月分のデータが増えるなど)、ユーザーは鮮度の高いデータをもとに分析ができます。

各種フィルターの値についても同様で、とくに期間を絞り込むものについてはユーザー体験や運用コストの観点からも自動化する効果は高いはずです。Tableauのビューに作用するパラメーターやフィルターなどは、設定によってはデータの更新に自動で追従してくれますが、工夫が必要な場合もあります。今回取り上げるのは、開始日と終了日を両方自由に選択できる形式の日付フィルターです。このフィルターの初期値を、データソース上の直近3ヶ月にしたい、とします。

Tableau 2020.1で動的パラメーターが追加され、ワークブックをひらいたときの値(初期値)を動的な値に設定することが可能です。この動的パラメーターとLOD式を用いて日付フィルターを作成していきます。

作成手順

検証に使ったTableauのバージョンは Tableau Desktop 2020.4 です。

1. フィルターに用いる日付型パラメーターを2つ作成する

f:id:aboy_perry:20211130142221p:plainf:id:aboy_perry:20211130142414p:plain

2. 1で作成した2つの日付型パラメーターをフィルターとして適用させるためのブール型計算フィールドを作成する

f:id:aboy_perry:20211130142748p:plain 絞り込みたい日付のデータは今回は投稿日という名前のパラメーターと仮定します。

3. 2で作成した計算フィールドをフィルター欄にドラッグ&ドロップして、値を真に設定しフィルターを適用させる

f:id:aboy_perry:20211130143006p:plain f:id:aboy_perry:20211130143100p:plain このとき期間内に1つもデータが無ければ真を選べないので注意してください。

4. 1で作成した2つのパラメーターの初期値に使う日付型計算フィールドを2つ作成する

f:id:aboy_perry:20211130143412p:plainf:id:aboy_perry:20211130143445p:plain

この計算フィールドがキモで、データソース上存在する日付の最大値からそれぞれのパラメーターの初期値を算出したいので、LOD式を使います。

それぞれの計算フィールドは以下のようになっています。{}で囲んでいるのがLOD式です。

  • 期間(ここから)の初期値 = {FIXED :DATE(DATETRUNC('month', DATEADD('month', -2, MAX([投稿日]))))}
  • 期間(ここまで)の初期値 = {FIXED :MAX([投稿日])}

期間(ここまで)用の計算フィールドは、データソース上存在する日付の最大値となる日付を返します。期間(ここから)用の計算フィールドは、その最大値から丸3ヶ月前になるような日付を返します。MAX([投稿日])が2021/10/31であれば、期間(ここから)用の計算フィールドは2021/08/01を返します。

ちなみにスコーピングキーワードとしてFIXEDを指定していますが、ディメンションを指定していないので省略が可能です。例えば期間(ここまで)の方は{MAX([投稿日])}と等価です。

なおデータソースによらず単純に今日の日付などから算出したい場合は、TODAY関数などを使うことで動的に設定することが可能です。その場合LOD式は不要です。

5. 4で作成した計算フィールドをそれぞれ、1で作成したパラメータの「ワークブックを開いたときの値」に設定する

f:id:aboy_perry:20211130151055p:plainf:id:aboy_perry:20211130151153p:plain

これで完成です。データソースが更新されるとフィルターの初期値も更新されます。Tableau DesktopだけでなくTableau Serverや、Tableau Serverを使った埋め込み分析でもきちんと動作します。

注意点としては、パラメーターの許容値を「全て」にしているため、データが存在しない日付もカレンダーで選べてしまいます。データ上存在しない日付は選べないようにしたい場合は、許容値を範囲指定する必要がありますが、範囲の最小値/最大値に別々の値を入れたくても固定の値しか設定できないため、自動化できなくなります。この辺は良い解決策があれば知りたいところです。

f:id:aboy_perry:20211130225025p:plain
データ上は10/31までしか扱ってないが今日の日付などが選択できてしまう

おわりに

動的パラメーターとLOD式を用いた、データソースの更新に合わせて初期値も更新される日付フィルターの作り方を紹介しました。Tableauの機能を使い倒すことで、より使いやすい分析ツールにできたり、より運用コストを低くできそうですね。