LookerのテンプレートフィルターとLiquidパラメーターについて

こんにちは。コグラフデータアナリティクス事業部です。

今回はLookerのテンプレートフィルターとLiquidパラメーターについて、その違いと実装例をご紹介します。


テンプレートフィルターについて

テンプレートフィルタは、SQLクエリのWHERE句で使用することができます。

例えば以下のような、とある商店の売り上げデータを扱うviewがあるとします。

view: sales_data {
  derived_table: {
    sql:
      SELECT
        store_id,
        user_id,
        item_name,
        category,
        sale_amount,
      FROM
        sales
      WHERE
        region = 'Tokyo'
    ;;
  }
}

このコードでは、regionがSQLクエリの中でハードコーディングされているため、ユーザーはこの条件をexploreやdashboardから変更することができません。

そこで以下のようにテンプレートフィルターを使います。

view: sales_data {
  derived_table: {
    sql:
      SELECT
        store_id,
        user_id,
        item_name,
        category,
        sale_amount,
      FROM
        sales
      WHERE
        {% condition region_filter %} region {% endcondition %}
    ;;
  }

  filter: region_filter {
    type: string
  }
}

この設定により、ユーザーはregion_filterを使用してregionを動的に変更できるようになります。

通常のフィルタは、SQLの最も外側のWHERE句にクエリが生成されますが、上記のような記述をすることで、サブクエリの中でWHERE句を生成するといったことも可能になります。

このとき例えば、ユーザーがフィルターに「Tokyo」と入力すると、SQLクエリはWHERE region = 'Tokyo'に変換されます(テンプレートフィルタは論理式を返しますが、もしもフィルターが何も指定されなかった場合は、where 1 = 1(true)となり、すべてのデータが抽出されます)。

Liquidパラメーターについて

Liquidパラメーターは、Lookerで動的なデータ抽出をしたいときに使用します。

measure: category_sales {
  type: sum
  sql:
    CASE
      WHEN ${category} = {% parameter selected_category %}
      THEN ${sale_amount}
      ELSE 0
    END
  ;;
}

parameter: selected_category {
  type: string
  allowed_value: {
    label: "Electronics"
    value: "electronics"
  }
  allowed_value: {
    label: "Clothing"
    value: "clothing"
  }
}

上記例では、ユーザーはselected_categoryパラメーターを使用して、category_salesで集計する商品カテゴリを指定することが可能です。

例えばユーザーが「Electronics」を選択すると、SQLクエリはSUM(CASE WHEN category = 'electronics' THEN sale_amount ELSE 0)となります。

また、以下のようにSELECT文を動的に変えて集約結果を変えたり、テーブルの結合条件を変更させたりといった、柔軟なクエリの変更も可能です。

view: sales_data {
  derived_table: {
    sql:
      SELECT
        {% if segment_param._parameter_value == "x" %}
          "seg_X" as segment,
        {% elsif segment_param._parameter_value == "y" %}
          "seg_Y" as segment,
        {% else %}
          "seg_Z" as segment,
        {% endif %}
          SUM(sale_amount) AS total_sales,
      FROM
        sales
        {% if join_param._parameter_value == "join_A" %}
          INNER JOIN A
            ON sales.user_id = A.user_id
        {% elsif join_param._parameter_value == "join_B" %}
          LEFT JOIN B
            ON sales.purchase_id = B.purchase_id
        {% else %}
          -- 結合しない
        {% endif %}
      GROUP BY 1
    ;;
  }

  parameter: segment_param {
    allowed_value: { label: "X" value: "x" }
    allowed_value: { label: "Y" value: "y"  }
  }

  parameter: join_param {
    allowed_value: { label: "A" value: "join_A" }
    allowed_value: { label: "B" value: "join_B" }
    allowed_value: { label: "C" value: "join_C" }
  }
}

最後に

lookerにはテンプレートフィルタやliquidパラメータといった機能があり、柔軟にデータ分析をすることができます。

日付や数値の範囲指定などは、lookerがテンプレートで用意してあるものを使えるのでfilter機能を使い、filterでは対応できないような、より複雑な条件でクエリをカスタムしたい場合はliquidパラメーターを使うのがよさそうです。

データ分析に興味のある方募集中!

コグラフ株式会社データアナリティクス事業部ではPythonやSQLの研修を行った後、実務に着手します。興味がある方は、下記リンクよりお問い合わせください!

X(Twitter)もやってます!

コグラフではX(Twitter)でも情報を発信しています。

データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!

この記事が気に入ったらサポートをしてみませんか?