2025年8月21日

LookML refinementsを使ったLookML開発の手引 (view編)


Content
こんにちは、tenです。
皆さん、LookML refinementsという機能、ご存知でしょうか?

公式ドキュメントの日本語ページでは、2025年8月現在、「LookMLの絞り込み」として掲載されているものです。
https://cloud.google.com/looker/docs/lookml-refinements?hl=ja 今回は、非常に便利なこちらの機能について、ご紹介いたします。
なお、「絞り込み」という日本語が実態にそぐわないため、本記事ではLookML refinements で統一します。

LookML refinementsとは?

LookerのLookML開発において、「既存のviewを修正したいけど、元のファイルを直接編集したくない」という場面に遭遇したことはありませんか?
あまり無いですか?かくいう私も、LookML refinementsを知るまでは、何も考えずにテーブルから作成したviewファイルを直接編集していました。
Lookerを使い始めた当初は直接編集でもあまり困ることはありません。
一方で、活用が進むにつれ、viewファイルが肥大化・多様化してくると以下のような課題が表面化してきます。

  • データソースの変更がviewファイルに反映されていない
  • 共同開発によるコンフリクト
  • すべての情報が単一のviewファイルに集まり、見通しが悪い

 

このような悩みを解決できるのがLookML refinementsです。
LookML refinementsを利用すると、既存のviewやexploreを直接編集することなく、変更を加えることができます。
さまざまなメリットがあるため、プロジェクトの最初の段階から、LookML refinementsを活用していくことをおすすめします。

LookML refinementsのメリット

それではviewにおけるLookML refinementsのメリットを、ユースケースと合わせて見ていきましょう。

1. データソースの変更を反映しやすい

Lookerには「テーブルからビューを作成」という機能があります。
これはデータソースにあるテーブルからviewファイルを作成する機能ですが、データソースのスキーマ情報(列名、型、説明など)が自動的に反映されます。

非常に便利な機能ですが、データソースの変更を取り込む場合は「データソースの変更内容をviewファイルに、自分で記述する」もしくは「viewファイルを削除して、再度テーブルからビューを作成」という手段が必要になります。
ここで、前者は変更内容が多いと大変ですし、後者の方法ではviewファイルにmeasureなどを定義済みだと、追加した定義が失われてしまいます。

これを解決するのが、LookML refinementsの1つ目のメリットです。
LookML refinementsを利用することで、追加のmeasureやdimensionなどを別のファイルに定義することができるため、
変更内容を失うことなく「viewファイルを削除して、再度テーブルからビューを作成」することができます。

テーブルからビューを作成して、手動でmeasureを追加した場合

view: orders {
sql_table_name: dataset.orders ;;

dimension: order_id {
type: string
}

dimension: status {
type: string
}

dimension: revenue {
type: number
}

measure: count {
type: count
}

#### ↑ ここまでが自動的に追加される ↑
#### ↓ ここからは手動で追加したものなので、削除して再作成すると変更が失われる ↓

measure: total_revenue {
type: sum
sql: ${revenue} ;;
filters: [status: "completed, shipped"]
}

}

 

テーブルからビューを作成して、LookML refinementsでmeasureを作成する場合

#### デフォルトのまま変更されていないので、削除して再作成が容易
view: orders {
sql_table_name: dataset.orders ;;

dimension: order_id {
type: string
}

dimension: status {
type: string
}

dimension: revenue {
type: number
}

measure: count {
type: count
}
}
#### 別のLookMLファイルとして定義できるので、変更が失われない

include: "/views/orders.view.lkml"

view: +orders {

measure: total_revenue {
type: sum
sql: ${revenue} ;;
filters: [status: "completed, shipped"]
}

}

 

2. 共同開発がしやすい

Lookerでは、変更の記録とファイルのバージョン管理のために、Gitを使用します。
Gitにつきものな悩みとして、共同開発において同じファイルを編集することによるコンフリクトの存在があります。

LookML refinementsは複数定義することができるため、変更内容をモジュール化することでコンフリクトのリスクを最小限に抑えることができます。

#### measureを定義するviewファイル

include: "/views/orders.view.lkml"

view: +orders {

measure: total_revenue {
type: sum
sql: ${revenue} ;;
filters: [status: "completed, shipped"]
}

}
#### dimensionを定義するviewファイル

include: "/views/orders.view.lkml"

view: +orders {

dimension: order_id { ## 定義済みのdimensionの内容をオーバーライドすることもできる
primary_key: yes
}

}

 

3. LookMLプロジェクトの見通しが良くなる

先ほどご紹介したように、LookML refinementsは複数定義することができるため、変更内容のモジュール化が可能です。
これにより、ある変更がどのファイルに定義されているか、を見つけやすくなります。

弊社ではLookMLプロジェクトの規模や複雑さに応じて、以下のような分け方をしています。

  • dimensionとmeasureを分ける
  • ビジネスイベントごとにmeasure用ファイルを分ける
  • labelやhiddenパラメータなど見た目に関する定義を集める
  • drill_fieldsで利用するsetの定義を集める

まとめ

viewにおけるLookML refinementsは、LookMLプロジェクトの保守性を高めながら柔軟かつ拡張性の高いカスタマイズが可能です。
特に以下のような場面で役立ちます。

  • Looker Blocks (事前構築済みデータモデル)を利用している
  • データソースから自動生成されたviewファイルを使用している
  • チームでの共同開発

 

皆様のLookML開発体験を大きく向上させる、非常に便利な機能です。
ぜひ、LookML refinementsを使ってみてください!
参考URL:
https://cloud.google.com/looker/docs/lookml-refinements?hl=ja

システムサポートでは、Google CloudやLookerの導入や活用を支援しております。
Lookerを導入したい・導入したけど使いこなせていない…という方は、お気軽にご相談ください!

Google Cloud導入・活用支援に関するご相談はこちら

2025年8月21日 LookML refinementsを使ったLookML開発の手引 (view編)

Category Google Cloud

ご意見・ご相談・料金のお見積もりなど、
お気軽にお問い合わせください。

お問い合わせはこちら