見出し画像

【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つ、labeldescriptionは、テキストで表記するパラメータです。

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)でも情報を発信しています。データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!


いいなと思ったら応援しよう!