利用 DRY LookML 最大限度地提高代码的可重用性:只需定义一次字段,即可随时随地使用替换运算符

LookML 字段定义可能会随时间而变化。例如,数据库列名称可能会更改,或者由于其他原因,您可能需要更改 LookML 字段的定义。

如果使用语法 {TABLE}.field_name 直接在多个位置引用数据库列,则必须手动更新每个引用。如果您忘记更新引用该维度的字段,则它们可能会损坏,并且 Looker 会显示错误消息:

Looker 在字段列表中显示错误“Unknowncolumn order_items.sale_price”。

为了让 LookML 项目更高效且更易于维护,您可以在一个位置定义字段,并使用替换运算符 ($) 在其他任何位置引用这些字段。

本页面提供了一个使用替换运算符(通过语法 ${field_name})引用多个 LookML 字段定义中的单个维度的示例。

所需要素

前提条件

示例:针对一个维度仅引用一次底层数据库列

使用维度的 sql 参数中的 ${TABLE}.field_name 语法,在 LookML 项目中定义数据库表列一次。然后,在项目中的其他位置使用 ${field_name}${view_name.field_name} 语法引用该维度。这样一来,您就可以在一个位置(原始的 ${TABLE}.field_name 维度)维护数据库列的 LookML 定义;如果您需要在项目中的多个位置引用该维度,这会非常有用。

例如,您可以使用语法 ${TABLE}.sale_price 在名为 order_items 的视图中定义一个名为 sale_price 的基本维度:


  dimension: sale_price {
    type: number
    value_format_name: usd
    sql: ${TABLE}.sale_price ;;
    description: "The price at which an item is set to sell."
  }

定义引用 sale_price 维度的其他字段时,可以使用 order_items 视图中的 ${sale_price} 语法(或使用语法 ${order_items.sale_price} 引用其他视图中的 sale_price 维度)。


dimension: profit {
  type: number
  value_format_name: usd
  sql: ${sale_price} - ${inventory_items.cost} ;;
  description: "The difference between an item's sale price and an item's cost."
}

dimension: item_gross_margin {
  type: number
  value_format_name: percent_2
  sql: 1.0 * ${profit}/NULLIF(${sale_price},0) ;;
}

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

在此示例中,如果维度 sale_price 的列名称发生更改,您只需在基本 sale_price 维度的定义中对 ${TABLE}.sale_price 引用更新一次即可。然后,此更改将自动传播到 profititem_gross_margintotal_sale_price 字段,以及引用 sale_price 维度的所有其他字段。