lookml-fields について
lookml-fieldsは、LookMLのフィールド型とsqlパラメーターが生成SQLに与える影響を解説するリファレンススキルです。データモデルを記述する人向けに、ディメンション、メジャー、フィルター、パラメーター、ディメンショングループを区別します。
主な機能
- 015種類のLookMLフィールド型を解説
- 02型ごとのsqlの動作を説明
- 03集計とメジャー参照の規則
- 04テンプレートフィルターの使い方
- 05パラメーターとLiquid変数の説明
- 06ディメンショングループの時間粒度
活用シーン
- 01モデル定義に使うフィールド型の選択
- 02LookMLフィールドから生成されるSQLの確認
- 03パラメーターによる動的ロジックの構築
- 04時間ベースのディメンションの定義
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lkrdev/ lookml_skills --skill lookml-fieldsインストール後、Claude Code で/lookml-fieldsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/dimension_group.mddimension.mdfilter_parameter.mdmeasure.mdvalue_format.md詳細
手順
1. フィールドタイプの概要
LookML のフィールドは、データモデルを構成する基本要素です。各タイプは、SQL の生成においてそれぞれ特定の役割を果たします。
| フィールドタイプ | 目的 | SQL 生成フェーズ |
|---|---|---|
| ディメンション | データ(属性)を表します。結果をグループ化します。 | SELECT 句と GROUP BY 句。 |
| メジャー | データ(指標)を集計します。結果を計算します。 | SELECT 句(集計を伴います)。 |
| フィルター | 条件に基づいてデータを絞り込みます。 | WHERE 句または HAVING 句(テンプレートフィルター経由)。 |
| パラメーター | 動的なロジックのためのユーザー入力を受け取ります。 | 直接はなし(他のフィールドに値を挿入します)。 |
| ディメンショングループ | 時間に基づくディメンションのセットを生成します。 | SELECT 句と GROUP BY 句(複数の列)。 |
2. sql パラメーターの役割
sql パラメーターの動作は、フィールドタイプによって厳密に異なります。
ディメンション:「何を」
- 役割:集計の前に、列に適用する未集計の変換を定義します。
- SQL コンテキスト:式は
GROUP BY句に直接配置されます。 - 入力:テーブル列(
${TABLE}.col)、他のディメンション(${dim})、または生の SQL 関数を参照できます。 - 例:
dimension: full_name { sql: CONCAT(${first_name}, ' ', ${last_name}) ;; } -- 生成される SQL:CONCAT(table.first_name, ' ', table.last_name)
メジャー:「どれだけ」
- 役割:集計対象の値、または他の集計を伴う計算を定義します。
- SQL コンテキスト:式は集計関数の内側(例:
SUM(sql))に配置されるか、type: numberの場合は単独の計算式になります。 - 入力:
type: sum/avg/min/maxの場合:ディメンションまたは列を参照します。type: numberの場合:他のメジャーを参照します。type: countの場合:sqlは無視されます(常にCOUNT(*)またはCOUNT(primary_key)になります)。
- 例:
measure: total_profit { type: sum sql: ${sale_price} - ${cost} ;; } -- 生成される SQL:SUM(sale_price - cost)
フィルター:「どれを」
- 役割:通常、派生テーブルまたは
sql_always_whereで使用するテンプレートフィルターの条件ロジックを定義します。 - SQL コンテキスト:現代的な LookML では、
filterフィールドのsqlパラメーターが直接使用されることはほとんどありません。代わりに、フィルターへの入力値を{% condition %}タグ内で使用します。 - ベストプラクティス:
filterフィールドが必要なのか、それともparameterとdimensionの組み合わせだけでよいのかを判断します。 - 例(テンプレートフィルター):
filter: date_filter { type: date } -- 派生テーブルの SQL での使用例: -- WHERE {% condition date_filter %} created_at {% endcondition %}
パラメーター:「ユーザー入力」
- 役割:SQL 自体は生成しません。他のフィールドに挿入するユーザー選択値を保持します。
- SQL コンテキスト:ディメンション、メジャー、または派生テーブル内で Liquid 変数(
{% parameter name %})を使ってアクセスします。 - 入力:ユーザーが UI のリストから値を選択するか、値を入力します。
- 例:
parameter: timeframe_selector { type: unquoted allowed_value: { value: "month" } allowed_value: { value: "year" } } dimension: dynamic_date { sql: DATE_TRUNC({% parameter timeframe_selector %}, ${created_raw}) ;; }
ディメンショングループ:「時間の生成」
- 役割:ソースとなるタイムスタンプ列または日付列を定義します。その後 Looker が、
timeframesリストに基づいて複数のディメンションフィールドを生成します。 - SQL コンテキスト:各期間の形式に合わせて、ソース列をキャストおよび切り捨てます。
- 入力:標準化されたタイムスタンプまたは日付の式である必要があります。
- 例:
dimension_group: created { type: time timeframes: [date, month] sql: ${TABLE}.created_at ;; } -- 生成される項目: -- created_date -> CAST(table.created_at AS DATE) -- created_month -> DATE_TRUNC(table.created_at, MONTH)
3. 違いの概要
| 種類 | sql が参照するもの | メジャーを参照可能か | 集計済みか |
|---|---|---|---|
| ディメンション | 列、その他のディメンション | いいえ | いいえ |
| メジャー(集計) | 列、ディメンション | いいえ | はい |
| メジャー(数値) | その他のメジャー | はい | はい(すでに集計済み) |
| フィルター | (ほとんど使用しません) | いいえ | 該当なし |
| パラメーター | (なし) | いいえ | 該当なし |
| 値の形式 | (なし) | いいえ | 該当なし |
参照スキル
各フィールドタイプの詳細な規則については、以下を参照してください。
- ディメンション:命名、ラベル、タイプ固有の規則。
- メジャー:集計タイプ、フィルター、形式。
- フィルターとパラメーター:テンプレート化されたフィルターとユーザー入力。
- ディメンショングループ:時間枠と間隔。
- 値の形式:名前付きおよびカスタムの通貨/数値形式。
コメント
Markdown 対応