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 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の開発には重要な機能になりますので、是非試してみてください。