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)でも情報を発信しています。
データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!
この記事が気に入ったらサポートをしてみませんか?