对高级扩展用例的示例进行问题排查

本页介绍的是高级主题,假定读者对 LookML 有扎实的了解。

扩展 (Extends) 是一项有价值的 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 对象是一个相当简单的过程,如通过扩展重复使用代码文档页面中所述。但是,一些高级用例可能会导致 LookML 引用错误和不必要的对象重复。本页面举例说明了如何根据用于扩展另一个视图的视图来扩展“Explore”会导致 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 的“Explore”合并,而 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_extendedfrom 参数在生成的 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 字段。