今回はLookerの仕様上、ダッシュボードに日付型のフィルターを設定すると初期設定が昇順になってしまう問題を解決していきたいと思います。
データ数が多い時に昇順だと現在の月まで下にスクロールするのが大変だと思います。
そこで昇順にすることで現在の月が一番上に表示され一番下までスクロールする必要がなくなり少し楽になります。
もし同じお困りの方がいれば参考にしてみてください。
今回の内容はそれほど難しい内容ではなく、知っていれば誰でも簡単にできるけど意外と知られていない方法を使用します。
前提条件として、対象の日付データを秒~年に切り分けたものを使用します。
💡 rawまで切り分ける理由は、後々出てくる計算で正確さを求めたいからです。
dimension_group: this_year_date {
type: time
description: "年月日"
timeframes: [
raw,
date,
week,
month,
quarter,
year
]
convert_tz: no
datatype: date
sql: ${TABLE}.this_year_date ;;
}
次にフィルターでは、年と月を表示したいので、CASE文で日本時間に合わせて切り分けていきます。
💡 現在の年月を取得しつつ、文字列型の日付に’-’,’/’を使用し見やすく加工しています。
dimension: this_yearmonth {
type: string
description: "年月"
sql:
CASE
WHEN ${this_year_date_raw} <= DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH)
THEN REPLACE(${this_year_date_month}, '-', '/')
ELSE NULL
END ;;
}
このように加工した、2019-2024年の年月が設定されたディメンションを使用します。
それでは本題に入ります。
早速結論です!日付型のフィルターを降順にする方法は、ソートしたい年月日とあらかじめ自分で決めた基準となる過去の年月日で月差を計算し、その月差をマイナスにしたディメンションでソートすることです。こうすることでマイナスの月差で昇順ソートされる=最新日付順でソートされることになり、日付型のフィルターを降順にできます。
それでは実際にやっていきます。
💡 新しくソート用のdimensionを作成します。今回はかなり余裕を持たせ、1900年からの月差を計算します。この計算された月差に対して-1を掛けることで、結果を負の値に変換し、ソート時に日付が降順に並び替わるといった方法です。
dimension:inverted_date {
type: number
sql:DATE_DIFF( DATE(${this_year_date_raw}), '1900-01-01', MONTH) * -1 ;;
}
この新しく作成したdimensionを使い、フィルターに設定しているdimensionにソートをかけることで降順にすることができます。
💡 実際に変更を加えたコードがこちらです。order_by_fieldというパラメータを使用しソートをかけてあげます。
dimension: this_yearmonth {
type: string
description: "年月"
sql:
CASE
WHEN ${this_year_date_raw} <= DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH)
THEN REPLACE(${this_year_date_month}, '-', '/')
ELSE NULL
END ;;
order_by_field: inverted_date
}
これにより最新の日付が先に表示されるように降順でソートされるようになります。
今回のように通常、ソートは昇順に行われますが、このロジックを使うことで、最新の日付が先に表示されるように降順にソートができるようになります。
年月日が新しいほど、計算されたinverted_date
の値は小さく(負の値が大きく)なり、ソート時に上に表示させることができます。
ここまでお読みいただきありがとうございます。
何かと使う機会は多いと思いますので、是非活用してください!