🔧

Grafanaでの期間フィルターの使い方

2024/07/26に公開

はじめに

業務でBIツールのSQLをRedashからGrafanaに移行したときにそれぞれの設定の違いでかなりつまづいたため、その時に調べた内容を備忘録として残そうと思います。

使い方

Grafanaでの期間フィルターの使い方
サンプルクエリ

select
  count(*) as count,
  max(created_at) as last_created_at
from
  count_data c
where
  $__timeFilter(timestamp(created_at))

$__timeFilterのみ(https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#timefilter-or-__timefilter)

$__timeFilter(timestamp(created_at))

${__from}${to} の組み合わせ(https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#__from-and-__to)

-- 文字列をタイムスタンプに変換して比較
timestamp(created_at) between '${__from:date}' and '${__to:date}'

-- 文字列を日付形式に変換して比較
cast(timestamp(created_at) as date) between '${__from:date:YYYY-MM-DD}' and '${__to:date:YYYY-MM-DD}'

-- 文字列を日時形式に変換して比較
cast(timestamp(created_at) as datetime) between '${__from:date:YYYY-MM-DD}' and '${__to:date:YYYY-MM-DD}'

今回のパターンはISO8601形式の日付文字列が値として入っていたため、timestamp関数で文字列からtimestampに変換をかけています。
where句の左辺で関数を使うのは処理上あまり良くないそうですので、サブクエリやdbtのStagingなどで日付文字列は予めtimestampやdateに変換しておいた方が良さそうです

さいごに

BIツールは他にもさまざまありますが、RedashやGrafanaはそれぞれの便利な機能や共通していない箇所が沢山ありますので、状況や目的に応じて使い分けすることが移行していて大切だととても感じました。

両方とも普段触る機会があまりないツールだとは思いますので、この記事がみなさんの調査時間の短縮に少しでも貢献できれば幸いです!

GitHubで編集を提案

Discussion