lookml-fields について
LookMLのフィールド型とSQL生成ルールをまとめた、Lookerのデータモデルを作成・保守する人向けのリファレンススキルです。ディメンション、メジャー、フィルター、パラメーター、ディメンショングループの用途と参照ルールを説明します。
主な機能
- 015種類のLookMLフィールドを解説
- 02型ごとのSQL生成方法を説明
- 03フィールド間の参照制約を提示
- 04時間ディメンショングループの例
活用シーン
- 01新規フィールドの型を選ぶ
- 02メジャー式の参照方法を確認
- 03日付フィールドの時間粒度を設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ looker-open-source/ looker-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 句(テンプレート化されたフィルター経由)。 |
| パラメーター | 動的ロジックのためのユーザー入力を受け取ります。 | 直接のフェーズなし(値を他のフィールドに挿入します)。 |
| ディメンショングループ | 時間ベースのディメンション(type: time)を生成するか、日付の差分や期間(type: duration)を計算します。 | SELECT 句および GROUP BY 句(複数の列)。 |
2. sql パラメーターの役割
sql パラメーターの動作は、フィールドタイプによって厳密に異なります。
ディメンション:「何を」
- 役割:集計の前に、列に対して行う生の変換を定義します。
- SQL コンテキスト:式は
GROUP BY句に直接配置されます。 - 入力:テーブル列(
${TABLE}.col)、他のディメンション(${dim})、または生の SQL 関数を参照できます。 - 例:
dimension: full_name { sql: CONCAT(${first_name}, ' ', ${last_name}) ;; } -- 生成結果: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} ;; } -- 生成結果: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}) ;; }
ディメンショングループ:「時間生成と日付差分の計算」
- 役割:
type: timeの場合、基準となるタイムスタンプから複数の時間枠を生成します。type: durationの場合、2つのタイムスタンプ間の経過時間や日付の差分(例:month_since_signup、datediff)を計算します。 - SQL コンテキスト: 列に対してキャスト、切り捨て、または日付差分の計算を行います。
- 入力: 標準化されたタイムスタンプ/日付の式、または開始/終了タイムスタンプ列。
- 例:
dimension_group: created { type: time timeframes: [date, month] sql: ${TABLE}.created_at ;; } -- Generates: -- created_date -> CAST(table.created_at AS DATE) -- created_month -> DATE_TRUNC(table.created_at, MONTH)
3. 違いのまとめ
| 種類 | sql の参照先... | Measure を参照できますか? | 集計済みですか? |
|---|---|---|---|
| ディメンション | 列、その他のディメンション | いいえ | いいえ |
| Measure(集計) | 列、ディメンション | いいえ | はい |
| Measure(数値) | その他の Measure | はい | はい(すでに集計済み) |
| フィルター | (ほとんど使用しません) | いいえ | 該当なし |
| パラメーター | (なし) | いいえ | 該当なし |
リファレンススキル
フィールドの種類ごとの詳細な基準については、以下を参照してください。
- ディメンション:命名、ラベル、種類ごとのルール。
- Measures:集計の種類、フィルター、フォーマット。
- フィルターとパラメーター:テンプレート化されたフィルターとユーザー入力。
- ディメンショングループ:時間枠と間隔。
- 値のフォーマット:名前付きおよびカスタムの通貨/数値フォーマット。
コメント
Markdown 対応