用法
constant: constant_name { value: "string" export: none | override_required | override_optional }
|
层次结构
constant |
默认值
无
接受
|
定义
constant 形参用于定义 LookML 常量,以便您指定可在整个 项目中重复使用的值。常量可在模型中接受字符串的任何位置引用,也可在 LookML 信息中心元素的 model 和 explore 形参中引用,从而帮助减少 LookML 代码中的重复。
常量必须在项目清单文件中定义。然后,可以使用 @{constant_name} 语法在整个项目中使用常量。
您可以使用 constantexport 子形参来指定在将引用常量的文件 导入到另一个项目 时,开发者是否应替换常量的值。
export
您可以使用 export 的 constant 子参数来确定在将引用常量的文件 导入到其他项目 时,如何使用常量。
默认情况下,引用常量的导入文件会在导入项目中,使用导入项目的清单文件中指定的值。export 形参用于指定开发者是否应通过为常量提供新值来替换常量的值,以便在导入项目中使用。export 形参具有以下可能的值:
none:export的默认值。无法在导入项目中替换常量的值。导入项目使用导入项目的清单文件中指定的常量值。override_optional:您可以选择在导入项目中替换常量的值。如果导入项目的清单文件中未提供值,则使用导入项目中的原始值。override_required:导入项目必须替换导入项目的清单文件中最初指定的常量值。如果导入项目中未提供新的常量值,Looker 将显示错误。
常量仅适用于最初定义常量的项目中的文件。因此,在您已导入其文件的项目中定义的常量只能由导入的文件使用,而不能由导入项目中定义的文件使用。
如果您想在导入项目的文件中使用常量,则应在导入项目的清单文件中定义新常量。以这种方式定义的常量仅适用于导入项目中定义的文件。
当您将引用常量的文件导入到另一个项目时,可以在导入项目的清单文件中使用 override_constant 子参数(local_dependency 或 remote_dependency)为 export 设置为 override_optional 或 override_required 的常量提供新值。
如需了解详情以及在导入项目中替换常量的示例,请参阅从其他项目导入文件文档页面。
示例
以下是一些示例,说明如何使用 constant 形参定义可在整个项目中使用的值。
使用 constant 形参为探索添加标签
假设您想在界面中创建两个探索,并分别标记为旧金山用户 和旧金山订单 。为此,您可以在项目的 manifest.lkml 文件 中定义一个常量 city,其值为 "San Francisco":
constant: city {
value: "San Francisco"
}
然后,可以使用语法 @{city} 在项目中接受字符串的任何部分引用此常量。在此示例中,您可以定义 users 和 orders 探索,并指定 "@{city} Users" 和 "@{city} Orders" 作为 label 形参的值,如以下示例所示:
explore: users {
label: "@{city} Users"
}
explore: orders {
label: "@{city} Orders"
}
在此示例中,Looker 会在“探索”菜单和探索的标题中显示旧金山用户 和旧金山订单 ,而不是默认的用户 和订单 标签。

将 sql_table_name 形参与常量搭配使用
假设您想基于架构 02349_sfo 中的表创建多个视图。为避免多次指定值 02349_sfo,您可以在项目的 manifest.lkml 文件中创建一个名为 schema 的常量,如下所示:
constant: schema {
value: "02349_sfo"
}
然后,您可以通过指定 @{schema}.view_name 作为 sql_table_name 形参的值,基于 02349_sfo 架构创建视图:
view: users {
sql_table_name: @{schema}.users ;;
}
这会创建一个名为 Users 的视图,该视图基于架构 02349_sfo 中的 users 表。
将 Liquid 变量和 HTML 与常量搭配使用
假设您希望负数据值显示在圆括号内,并采用红色字体。通过将此格式设置为 LookML 常量的值,您可以使用 Liquid 变量 和 HTML 指定一次格式。然后,您可以随时引用常量,以便将该格式应用于字段。
例如,您可以创建一个常量 negative_format,以便将此格式应用于字段:
constant: negative_format {
value: "{% if value < 0 %}<p style='color:red;'>({{rendered_value}})</p>{% else %} {{rendered_value}} {% endif %}"
}
这会创建一个常量 negative_format,用于指定负数据值应采用红色字体并用圆括号括起来。然后,您可以使用 html 形参将此格式应用于数据集中的维度和测量。
例如,您可以创建 总金额 测量 type: sum,并指定 @{negative_format} 作为 html 形参的值:
measure: total_amount {
type: sum
value_format_name: usd
sql: ${amount} ;;
html: @{negative_format} ;;
}
在表格中,总金额 测量的负值将按照 negative_format 常量定义中指定的格式设置,采用红色字体并用圆括号括起来。

在 LookML 信息中心内使用常量
为 LookML 信息中心定义 信息中心元素 时,您可以使用 LookML 常量来定义元素所基于的模型和探索。
例如,假设您已在项目的 manifest.lkml 文件中定义了常量 model_name 和 explore_name:
constant: model_name {
value: "thelook"
}
constant: explore_name {
value: "orders"
}
在您的 信息中心文件中,您可以将 model 的值设置为 "@{model_name}",并将 explore 的值设置为 "@{explore_name}",以便将任何信息中心元素基于模型 thelook 和探索 orders。
例如,假设您要修改柱形图元素的 LookML。在信息中心文件中,您可以按如下方式指定 model 和 explore 形参的值:
- dashboard: dashboard_name
title: "dashboard title"
layout: newspaper
elements:
- title: Element Title
name: element_name
model: "@{model_name}"
explore: "@{explore_name}"
type: looker_column
在信息中心智能体指令中使用常量 [预览版]
您还可以在 instructions 形参的 LookML 信息中心智能体 中使用 LookML 常量,以便在多个信息中心智能体之间共享标准业务规则或准则。
例如,在 manifest.lkml 文件中定义一个常量:
constant: FISCAL_YEAR_RULE {
value: "Always filter all requests by the current fiscal year unless specified otherwise."
}
然后,您可以在 instructions 形参中引用该常量:agent
agent: sales_dashboard_agent {
instructions: "Focus on revenue metrics. @{FISCAL_YEAR_RULE}"
is_dashboard_agent: yes
}
注意事项
在常量定义中引用常量
定义常量时,您可以引用项目中清单文件中定义的其他常量。假设您已声明常量 city:
constant: city {
value: "San Francisco"
}
然后,您可以声明引用 city 常量的常量 state:
constant: city_state {
value: "@{city}, California"
}
常量 state 将解析为字符串“San Francisco, California”。
转义常量语法
如果您想编写类似于常量语法的字符串,但不希望将该字符串评估为常量,则可以在 @ 字符后使用反斜杠转义字符 \ 转义常量语法。例如:
dimension: id { type: string label: "@{id}" sql: ${TABLE}.id }
In this example, the [`label` parameter](/looker/docs/2614/reference/param-explore-label) displays the string **@{id}** as the label for the `id` dimension, rather than evaluating the `id` constant and outputting its value.
Constant references won't be evaluated if the brackets are not closed, in which case it is not necessary to escape constant syntax. Thus, `@{id` in the following example wouldn't be evaluated as a constant.
```none
dimension: id {
type: string
label: "@{id"
sql: ${TABLE}.id
}