mcpField
L
lookml-fields

lookml-fields

github.com/looker-open-source数据与数据库43149 次安装2 周前更新
代码仓库

关于 lookml-fields

为 LookML 建模提供字段类型与 SQL 生成规则的参考技能,面向编写和维护 Looker 数据模型的人员。内容区分维度、度量、筛选器、参数和维度组的用途及相互引用规则。

主要功能

  1. 01说明五类 LookML 字段用途
  2. 02解释各字段的 SQL 生成方式
  3. 03提供字段间引用限制
  4. 04包含时间维度组示例

适用场景

  1. 01判断新字段应使用哪种类型
  2. 02检查度量表达式的引用方式
  3. 03为日期字段设置时间粒度

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/looker-open-source/looker-skills --skill lookml-fields

安装后在 Claude Code 中输入/lookml-fields确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
dimension_group.md
dimension.md
filter_parameter.md
measure.md
value_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