关于 lookml-fields
lookml-fields 是一项参考技能,说明 LookML 字段类型及其 sql 参数如何影响生成的 SQL,面向编写数据模型的人员。它区分维度、度量、筛选器、参数和维度组的用途与规则。
主要功能
- 01说明五种 LookML 字段类型
- 02介绍各类型的 sql 行为
- 03解释聚合与度量引用规则
- 04展示模板筛选器用法
- 05说明参数与 Liquid 变量
- 06介绍维度组中的时间粒度
适用场景
- 01为模型定义选择字段类型
- 02检查 LookML 字段生成的 SQL
- 03使用参数构建动态逻辑
- 04定义基于时间的维度
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lkrdev/ lookml_skills --skill lookml-fields安装后在 Claude Code 中输入/lookml-fields确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/dimension_group.mddimension.mdfilter_parameter.mdmeasure.mdvalue_format.md详细介绍
说明
1. 字段类型概览
LookML 字段是数据模型的构建模块。每种类型都有特定用途,用于生成 SQL。
| 字段类型 | 用途 | SQL 生成阶段 |
|---|---|---|
| 维度 | 描述数据(属性)。对结果进行分组。 | SELECT 和 GROUP BY 子句。 |
| 度量 | 汇总数据(指标)。计算结果。 | SELECT 子句(带聚合)。 |
| 筛选器 | 根据条件限制数据。 | WHERE 或 HAVING 子句(通过模板化筛选器)。 |
| 参数 | 捕获用户输入,用于动态逻辑。 | 无直接作用(将值注入其他字段)。 |
| 维度组 | 生成一组基于时间的维度。 | SELECT 和 GROUP BY 子句(多个列)。 |
2. sql 参数的作用
sql 参数的行为严格取决于字段类型。
维度:“是什么”
- 作用:定义列在聚合前的原始转换。
- SQL 上下文:表达式会直接放入
GROUP BY子句。 - 输入:可以引用表列(
${TABLE}.col)、其他维度(${dim})或原始 SQL 函数。 - 示例:
dimension: full_name { sql: CONCAT(${first_name}, ' ', ${last_name}) ;; } -- 生成:CONCAT(table.first_name, ' ', table.last_name)
度量:“数量是多少”
- 作用:定义要聚合的值,或涉及其他聚合的计算。
- SQL 上下文:将表达式放在聚合函数内(例如
SUM(sql)),或作为type: number的独立计算。 - 输入:
- 对于
type: sum/avg/min/max:引用维度或列。 - 对于
type: number:引用其他度量。 - 对于
type: count:sql会被忽略(始终为COUNT(*)或COUNT(primary_key))。
- 对于
- 示例:
measure: total_profit { type: sum sql: ${sale_price} - ${cost} ;; } -- 生成:SUM(sale_price - cost)
筛选器:“哪些”
- 作用:定义条件逻辑,通常用于派生表或
sql_always_where中的模板化筛选器。 - SQL 上下文:在现代 LookML 中,
filter字段里的sql参数很少直接使用。筛选器的输入会改为放在{% condition %}标签中使用。 - 最佳实践:判断你需要的是
filter字段,还是只需要parameter+dimension。 - 示例(模板化筛选器):
filter: date_filter { type: date } -- 在派生表 SQL 中使用: -- WHERE {% condition date_filter %} created_at {% endcondition %}
参数:“用户输入”
- 作用:本身不会生成 SQL。它保存用户选择的值,以注入其他字段。
- SQL 上下文:通过维度、度量或派生表中的 Liquid 变量(
{% parameter name %})访问。 - 输入:用户从 UI 列表中选择,或输入一个值。
- 示例:
parameter: timeframe_selector { type: unquoted allowed_value: { value: "month" } allowed_value: { value: "year" } } dimension: dynamic_date { sql: DATE_TRUNC({% parameter timeframe_selector %}, ${created_raw}) ;; }
维度组:“时间生成器”
- 作用:定义源时间戳或日期列。Looker 随后会根据
timeframes列表生成多个维度字段。 - SQL 上下文:针对每种时间粒度,对源列进行类型转换和截断。
- 输入:必须是标准化的时间戳或日期表达式。
- 示例:
dimension_group: created { type: time timeframes: [date, month] sql: ${TABLE}.created_at ;; } -- 生成: -- created_date -> CAST(table.created_at AS DATE) -- created_month -> DATE_TRUNC(table.created_at, MONTH)
3. 差异总结
| 类型 | sql 引用…… | 可以引用度量吗? | 是否已聚合? |
|---|---|---|---|
| 维度 | 列、其他维度 | 否 | 否 |
| 度量(聚合) | 列、维度 | 否 | 是 |
| 度量(数值) | 其他度量 | 是 | 是(已聚合) |
| 筛选器 | (很少使用) | 否 | 不适用 |
| 参数 | (无) | 否 | 不适用 |
| 值格式 | (无) | 否 | 不适用 |
参考指南
有关特定字段类型的详细规范,请参阅:
评论
支持 Markdown