extendsの挙動を確認してみた #looker

2023.11.16

Looker勉強中のikumiです。今回は、LookerのExtends機能を試してみたので、その内容を記載してきます。

Extendsとは

Extendsとは、ViewやExploreなどに記載できるパラメーターで、ExtendsすることでLookMLコードを再利用できる機能です。例えば、複数のViewで共通する指標があるケースなどでは、共通項目をまとめた一つのViewを再利用することで、管理やメンテナンスの面で役に立ちます。

覚えておくと便利な機能なので、今回はViewファイルをExtendsした時の挙動を中心に確認してみました。

ViewファイルのExtends

今回は、productsというViewファイルをExtendsしてみます。元のViewは以下の通り。

##元のView
view: products {
sql_table_name: schema.table_name ;;

  dimension: … {
  }

  measure: … {
  }

Extendsする方法は簡単で、includeパラメーターで拡張元のファイルを指定し、extendsパラメーターでView名を指定するだけです。

include: "/View/products.view.lkml"
view: extends_products {
  extends: [products]
}

そうすると、extends_productsにはほかに何も記載していないにも関わらず、productsの内容が反映されていることがわかります。

Extends先でフィールドの定義を変更したときの挙動

試しに元あるディメンションの定義を変更してみました。この場合、ディメンションの定義がExtends元と、Extends先で競合していることになります。

##Extends元
view: products {
dimension: category {
    label: "カテゴリ"
    sql: TRIM(${TABLE}.category) ;;
    drill_fields: [item_name]
  }
}

##Extends先
##カテゴリ名の変更と、語尾に★を付けてみる
view: extends_products {
dimension: category {
    label: "カテゴリ名"
    sql: TRIM(${TABLE}.category || "★") ;;
    drill_fields: [item_name]
  }
}

実際にExplore画面で確認してみると、Extends先で定義した内容がオーバーライドされる形で反映されていることがわかりました。このように、競合される場合は内容がExtends先で上書きされていることがわかります。

公式Doc:extends でのコードの再利用

変更した定義がオーバーライドされないケースの注意点

多くの場合、同じパラメーターを使用して定義を変更するとオーバーライドされる形で反映されますが、一部のパラメーターではオーバーライドされず、条件が追加される形で反映されます。

公式Doc:Extends for View (考慮する事項)

今回は、フィルタードメジャーのフィルター条件の定義を変更してみます。Extends元では、Categoryでフィルターしていたのに対して、Extends先ではdepartmentでフィルターしています。

##Extends元
view: products {
measure: brand_count_filterd {
    label: "ブランド数_filterd"
    type: count_distinct
    filters: [category: "Accessories"]
    sql: ${brand} ;;
  }
}

##Extends先
view: extends_products {
measure: brand_count_filterd {
    label: "ブランド数_filterd"
    type: count_distinct
    filters: [department: "Women"]
    sql: ${brand} ;;
  }
}

Extends先で発行されたSQLを確認すると、Categoryのフィルターは消えず、departmentのフィルタがAND条件で追加されています。

このように、一部のパラメーターではオーバーライドではなく条件が追加される形でデータが抽出されるため、注意が必要です。

ExploreのExtends

ExploreをExtendsする場合も、Extendsパラメーターを記載するのみで完了します。

explore: products_moto {
    group_label: "(99)_Extendsテスト"
    label: "Extendsテスト"
    from:  products
    view_label: "プロダクト_元"
  }

explore: extends_products {
  extends: [products_moto]
}

ExploreをExtendsする場合にも、特にjoinを使用している際などで特に注意が必要になります。詳しくは以下の記事でも紹介されているので、こちらも参考にしてみてください。

さいごに

いかがでしたでしょうか。Lookerを使い始めのころはあまり利用イメージが沸かないかもしれませんが、シンプルなLookMLの開発には重要な機能になりますので、是非試してみてください。