关于 lookml-fields
为 LookML 建模提供字段类型与 SQL 生成规则的参考技能,面向编写和维护 Looker 数据模型的人员。内容区分维度、度量、筛选器、参数和维度组的用途及相互引用规则。
主要功能
- 01说明五类 LookML 字段用途
- 02解释各字段的 SQL 生成方式
- 03提供字段间引用限制
- 04包含时间维度组示例
适用场景
- 01判断新字段应使用哪种类型
- 02检查度量表达式的引用方式
- 03为日期字段设置时间粒度
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ looker-open-source/ looker-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 子句(通过模板化筛选器)。 |
| 参数 | 捕获用户输入,用于动态逻辑。 | 无直接作用(将值注入其他字段)。 |
| 维度组 | 生成基于时间的维度(type: time),或计算日期差值/持续时间(type: duration)。 | 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 %})访问。 - 输入:用户从界面列表中选择或输入一个值。
- 示例:
parameter: timeframe_selector { type: unquoted allowed_value: { value: "month" } allowed_value: { value: "year" } } dimension: dynamic_date { sql: DATE_TRUNC({% parameter timeframe_selector %}, ${created_raw}) ;; }
维度组:“时间生成器与日期差计算器”
- 作用:对于
type: time,根据源时间戳生成多个时间范围。对于type: duration,计算经过的时间/日期差(例如month_since_signup、datediff),用于两个时间戳之间的计算。 - 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