【Looker】LookMLを使用したviewファイルの構文について
こんにちは、コグラフデータアナリティクス(DAD)事業部のNです。
最近はLookerのダッシュボードを改修することが多く、その元となる多数のviewファイルを改修してきました。
今回はLookMLを使用したviewファイルの構文について、サンプルコードとともに紹介していきます。
LookMLとは
LookMLとは、Lookerで使用される独自のモデリング言語です。
LookMLを使用することで、SQL データベース内のデータの内容や、その関係性を記述することが可能です。
LookMLプロジェクトとは
LookMLによって作成されたファイルのコレクションは、LookMLプロジェクトと呼ばれます。
プロジェクトの各要素については、概念図を以下に示します。
図には様々な要素が示されていますが、
LookMLプロジェクトはこのうち少なくとも、1 つ以上のmodelファイルとviewファイルで構成することが出来ます。
それぞれの違いは以下の通りです。
modelファイル:LookMLプロジェクト全体に関わる設定を行う(モデルとモデルのExploreおよびjoinを定義)
viewファイル:データベースから抽出したデータを定義する(ビューのディメンションとメジャー、フィールドセットを定義)
このうち今回は、データを定義するviewファイルについて紹介します。
Viewファイルの概要
viewファイルのサンプルコードを以下に示します。(公式ドキュメント掲載コードを拝借)
こちらはe コマースストア向けのordersというviewファイルを想定しています。
LookMLは独自の階層構造を持っており、ブロック的に階層が示されます。
サンプルコードも、まとまりを持って記載されていますね。
view: orders {
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: customer_id { # field: orders.customer_id
sql: ${TABLE}.customer_id ;;
}
dimension: amount { # field: orders.amount
type: number
value_format: "0.00"
sql: ${TABLE}.amount ;;
}
dimension_group: created { # generates fields:
type: time # orders.created_time, orders.created_date
timeframes: [time, date, week, month] # orders.created_week, orders.created_month
sql: ${TABLE}.created_at ;;
}
measure: count { # field: orders.count
type: count # creates a sql COUNT(*)
drill_fields: [drill_set*] # list of fields to show when someone clicks 'ORDERS Count'
}
measure: total_amount {
type: sum
sql: ${amount} ;;
}
set: drill_set {
fields: [id, created_time, customers.name, amount]
}
}
フィールドの紹介
それでは、viewファイルの中身を見ていきましょう。
クエリの基本的な構成要素はフィールドと呼ばれ、これが1つのまとまりの単位になります。
ここで主要なフィールドを3つご紹介します。
dimension、dimension_group、measureです。それぞれの役割は以下の通りです。
1.dimension
テーブルのカラムに当たります。
dimension: customer_id { # field: orders.customer_id
sql: ${TABLE}.customer_id ;;
}
2.dimension_group
その名の通りdimensionのまとまりになります。
こちらは時間ベースのデータでのみ使用されることがポイントです。
dimension_group: created { # generates fields:
type: time # orders.created_time, orders.created_date
timeframes: [time, date, week, month] # orders.created_week, orders.created_month
sql: ${TABLE}.created_at ;;
}
3.measure
SQL の集計関数にあたります。
measure: total_amount {
type: sum
sql: ${amount} ;;
}
書き方としては、フィールドの後ろに:コロン、さらに続けてその名称、そして{}中括弧を配置します。この中括弧の中には、データの定義を記入します。
フィールドパラメータの紹介
先ほどのフィールドの中括弧の中身でデータを定義するにあたり、Looker側では色々な設定項目が用意されています。
これがフィールドパラメータと呼ばれるもので、フィールドで設定したい項目を列挙して記載します。
ここではよく使うフィールドパラメータとして、サンプルコードにも記載がある、primary_key、type、sqlの3つをご紹介します。それぞれの役割は以下の通りです。
1.primary_key
そのdimensionが主キーであるかどうかを示します。
下記のように記述すれば主キー設定が出来ます。
primary_key: yes
2.type
主にデータ型を指定できます。
dimensionで指定できるtypeについて、代表的なものは以下です。
- date:日付を含むフィールドに使用
- date_time:日時を含むフィールドに使用
- number:数値を含むフィールドに使用
- string:文字や特殊文字を含むフィールドに使用
下記ではnumberと記載することで数値型のdimensionを指定していますね。
dimension: id {
type: number
sql: ${TABLE}.id ;;
}
measure: total_amount {
type: sum
sql: ${amount} ;;
}
さらにmeasureに限ったtypeもあります。
例えば上記のsumは列内の値の合計しています。
このように集計の種類を表すtypeについては、measureの中で使用が可能です。
3.sql
dimensionの値を取得したり変換したりしてLooker上で扱えるようにするパラメータです。
sqlパラメータには下記のようにsql文を書くことも出来、ここでは置換演算子をよく使用します。
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
※置換演算子とは
置換演算子 $ を使用すると、LookML コードの再利用性とモジュール性が向上します。
これにより、他のビューや派生テーブル、SQL テーブル内の列、LookML のdimensionとmeasureを参照できます。
サンプルコードのように、${TABLE}と記載することで、わざわざ具体的なテーブル名を記載しなくても接続中のテーブルを使用することが出来ます。
dimension: customer_id { # field: orders.customer_id
sql: ${TABLE}.customer_id ;;
}
積極的に使おう!labelとdescription
先ほど紹介したフィールドパラメータの他にも、様々なパラメータが存在します。
下記の2つ、labelとdescriptionは、テキストで表記するパラメータです。
4.label
その名の通り、ラベルを書き入れます。
ダッシュボード上でも表示されるため、そのデータを一言で表すような簡潔なキーワードが良いでしょう。
5.description
その名の通り、説明を書き入れます。
ダッシュボードでは表立っては表示されないものの、フィールド名にカーソルを持っていくと、その内容を確認することが出来ます。
少し長くなっても良いので、分かりやすく説明を残しておくことをおすすめします。
dimension: customer_id { # field: orders.customer_id
label: "顧客ID"
description: "顧客に割り振られるID"
sql: ${TABLE}.customer_id ;;
}
書き方としては、labelやdescriptionのあとの:コロンに続けて、”” ダブルクォーテーションで記載したい内容を囲めば完了です。
(’’ シングルクォーテーションだと読み込まれないので注意…!)
現在私が参画している現場でも、出来るだけこのlabelやdescriptionを埋めておこう、という動きがあります。
こういったメタデータが充実することで、データの理解や利用が進むことにつながりますね。
最後に
LookMLはLooker独自の言語の為、最初は使用するハードルが高いかもしれません。
ですが、データの定義が明確になるので、慣れるとむしろ扱いやすいのではないかと感じています。
LookMLがスムーズに扱えると、他者にも分かりやすくデータを定義することが出来るでしょう。
この記事を読んでLookMLに興味を持った方は、こちらのLooker記事もおすすめです。良ければ読んでみて下さい。
LookerのテンプレートフィルターとLiquidパラメーターについて|コグラフ株式会社 データアナリティクス事業部
データ分析に興味のある方募集中!
コグラフ株式会社データアナリティクス事業部ではPythonやSQLの研修を行った後、実務に着手します。興味がある方は、下記リンクよりお問い合わせください!
X(Twitter)もやってます!
コグラフではX(Twitter)でも情報を発信しています。データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!