LookML 字段定义可能会随时间而变化。例如,数据库列名称可能会发生变化,或者您可能出于其他原因需要更改 LookML 字段的定义。
如果您使用语法 {TABLE}.field_name
直接在多个位置引用数据库列,则必须手动更新每个引用。如果您忘记更新引用该维度的所有字段,这些字段都可能会损坏,并且 Looker 会显示错误:
为了提高 LookML 项目的效率并简化维护工作,您可以在一个位置定义字段,然后使用替换运算符 ($
) 在其他任何位置引用这些字段。
本页面提供了使用替换运算符(采用语法 ${field_name}
)在多个 LookML 字段的定义中引用单个维度的示例。
原料
- 替换运算符
- LookML
dimension
参数 - LookML
sql
参数 - LookML
sql_table_name
参数
前提条件
示例:仅对一个维度引用一次底层数据库列
在 LookML 项目中,使用维度的 sql
参数中的语法 ${TABLE}.field_name
一次性定义数据库表列。然后,在项目的其他位置使用 ${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
引用一次。然后,这项更改将自动传播到 profit
、item_gross_margin
和 total_sale_price
字段,以及引用 sale_price
维度的所有其他字段。