本页介绍的是高级主题,假定读者对 LookML 有扎实的了解。
扩展是一项实用的 LookML 功能,可让您维护 DRY(避免重复)LookML 代码。在 Looker 中,探索、视图和 LookML 信息中心都可以通过模型文件中的 extends 参数进行扩展,如以下示例所示:
explore: orders {
view_name: orders
join: users {
type: left_outer
sql_on: %{orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
explore: transactions {
extends: [orders]
}
在此示例中,extends 参数在 transactions“探索”的定义中用于扩展 orders“探索”。
本页将要扩展的对象称为基准对象,将执行扩展的对象称为扩展对象。
扩展 LookML 对象的过程非常简单,如使用“extends”重复使用代码文档页面中所详述。不过,某些高级用例可能会导致 LookML 引用错误和不必要的对象重复。本页提供了一个示例,说明如何根据扩展了其他视图的视图扩展“探索”,以及有助于消除此类问题的提示。
用例:基于可伸展视图扩展探索
假设您要扩展 events 探索,并且希望扩展的探索基于的视图使用扩展基本 events 视图的视图中的字段。在此示例中,events_extended“探索”扩展了 extends“探索”,如下例 LookML 所示:
explore: events {
view_name: events
join: users {
type: left_outer
sql_on: ${events.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
explore: events_extended {
extends: [events]
join: orders {
sql_on: ${events_extended.test_id} = ${orders.id} ;;
relationship: many_to_one
}
在此示例中,users 视图已联接到基本 events 探索,而 orders 视图已联接到扩展的探索 events_extended。不过,在基本 events 探索中定义的联接会引用 events.user_id,这是基本 events 视图中的字段。与此同时,在扩展的 events_extended 探索中定义的联接会引用字段 events_extended.test_id,其中 events_extended 是基于 events 视图的扩展视图的名称。events_extended“探索”定义中联接中引用的 test_id 字段在扩展的 events_extended 视图中定义如下:
include: "events.view.lkml"
view: events_extended {
extends: [events]
dimension: test_id {}
由于 events_extended“探索”中定义的联接引用了扩展视图 events_extended 的名称,因此 LookML 验证器会显示 inaccessible view 错误。
为解决此问题,您可以将 from 参数添加到展开式探索的 LookML 中,并将其值设置为展开式视图的名称 events_extended。from 参数将生成的 SQL 中的原始表名称别名为 FROM schema.name AS alias。
这是在“探索”一级应用 from 参数的唯一推荐用例。
如需从展开的视图 (events_extended) 中拉取数据,同时不破坏基本探索 (events) 中的联接引用,您可以添加一个映射到展开的视图的 from 参数:
explore: events_extended {
extends: [events]
from: events_extended
join: orders {
relationship: many_to_one
sql_on: ${events.test_id} = ${orders.id} ;;
}
}
在此示例中,将 LookML from: events_extended 应用于扩展的“探索”的 LookML 后,您可以在扩展的“探索”中继续引用基础视图 (events),同时将这些引用重定向为从该视图的扩展版本 (events_extended) 中提取。
使用 from 参数后,您可以在联接前缀中继续引用基准视图名称 events,但这些引用将从扩展视图 events_extended 中提取,其中包含 events 中的所有字段以及新的 test_id 字段。