🌊

Lookerの動的ディメンションの利用

2023/03/27に公開

クラウドエースの穂戸田と申します。
本記事では、パラメータの値に対応する動的ディメンションを作成し、
利用方法として動的な集計範囲の変更を一例としてまとめてみました。
「Lookerを最近使い始めたよ〜」くらいの人にちょうどいい内容だと思います。

やりたいこと

選択された集計範囲に応じてグラフの軸が動的に変更されるようにしたい
今回は例として、12ヶ月/5週間のパラメータを設置し、
12ヶ月が選択された場合は1ヶ月単位12ヶ月分のデータを取得、
5週間が選択された場合は1週間単位で5週間分のデータを取得できるようにします。

集計範囲それぞれに対応したグラフの作成例は以下の通りです。

  • 12ヶ月指定(月の並び順は気にしないでください)
    0
  • 5週指定
    1

手順詳細

LookML上で必要なフィールドは以下の通りです。

  • 時間軸のディメンショングループ
  • 期間選択するパラメータ
  • パラメータに対応する動的ディメンション
  • 抽出期間を適用するためのsql_always_where

以下に各手順詳細を記載します。

1. 時間軸のdimension_groupの作成

dimension_groupによって、時間軸データに対して週/月/年などの
期間単位ごとのディメンションを一度に作成できます。

dimension_group: period {
  type: time
  datatype: datetime
  timeframes: [
    date,
    week,
    month
  ]
  sql: ${period} ;;
}

これで以下のディメンションが作成されました

  • period_date:日付単位
  • period_week:週単位
  • period_month:月単位

2. 期間選択するparameterを作成

この時点ではユーザが選択するための見た目を作っただけであり、切り替えロジックはありません。

# 抽出期間指定パラメータ
parameter: period_unit_filter {
  label: "抽出範囲/表示単位指定"
  type: unquoted
  allowed_value: { label: "12ヶ月" value: "months" }
  allowed_value: { label: "5週"    value: "weeks"  }
}

3. parameterに対応するdimensionの作成

parameterで選択された値を受け取るdimensionを作成。
手順2で選択された値に応じて、参照するdimensionを分けています。

dimension: dynamic_period_unit {
    type: string
    sql:
      {% if period_unit_filter._parameter_value == "months" %}
        ${period_month}
      {% elsif period_unit_filter._parameter_value == "weeks" %}
        ${period_week}
      {% endif %}
    ;;
  }

抽出期間を指定したいので、さらに抽出開始/終了時期をdimensionで設定する必要があります。
抽出終了時期にCURRENT_DATEを設定しています。
また、今回作成したパラメータが使用されない場合は全件データの取得をしたいので、
else処理を設定しています。

# 抽出開始時期
dimension: dynamic_period_start_date {
  type: date
  datatype: date
  sql: 
    {% if period_unit_filter._parameter_value == "months" %}
      --抽出開始時期を12ヶ月前に設定
      DATE_ADD(CURRENT_DATE("任意のタイムゾーン"), INTERVAL -11 MONTH)
    {% elsif period_unit_filter._parameter_value == "weeks" %}
      --抽出開始時期を5週間前に設定
      DATE_ADD(CURRENT_DATE("任意のタイムゾーン"), INTERVAL -4 WEEK)
    {% else %}
      DATE(1, 1, 1)
    {% endif %}
  ;;
}
-----------------------------------------------------------------------------
# 抽出終了時期
dimension: dynamic_period_end_date {
    hidden: yes
    type: date
    datatype: date
    sql:
      # クエリ実行時の日時までを集計対象にする
      {% if period_unit_filter._is_filtered %}
        CURRENT_DATE("Asia/Tokyo")
      {% else %}
        DATE(9999, 12, 31)
      {% endif %}
    ;;
  }

手順4

最後に、今回の抽出範囲を絞り込みたい対象のexplore句に以下のLookMLを追加します。

sql_always_where:
  ${ビューファイル名.period_date}
    BETWEEN
      ${ビューファイル名.dynamic_period_start_date}
      AND
      ${ビューファイル名.dynamic_period_end_date}
;;

上記により、手順3で作成した抽出開始時期から抽出終了時期までのデータに絞り込むことができます。

まとめ

動的ディメンションを利用する簡単な一例として、今回は集計単位の切り替えをやってみました。
次回(があれば)はLookerのfilterに関して一覧表的なのを作ってみようと思います。

Discussion