LookML 术语和概念

本页面定义了在 LookML 开发过程中可能会经常遇到的以下核心术语和概念:

本页面未介绍 Looks用户定义的信息中心,因为用户是在不使用任何 LookML 的情况下创建的。但是,其查询依赖于本页面介绍的底层 LookML 元素。

如需查看 Looker 中使用的术语和定义的完整列表,请参阅 Looker 术语表。如需全面了解可在 LookML 项目中使用的 LookML 参数,请参阅 LookML 快速参考页面。

LookML 项目

在 Looker 中,项目是文件集合,描述用于执行 SQL 查询的对象、数据库连接和界面元素。从最基本的层面来说,这些文件描述了数据库表之间的相互关系,以及 Looker 应如何解读这些表。这些文件还可能包含 LookML 参数,这些参数可定义或更改 Looker 界面中显示的选项。每个 LookML 项目都位于各自的 Git 代码库中,以用于版本控制

将 Looker 连接到数据库后,您可以指定要用于 Looker 项目的数据库连接

您可以通过 Looker 中的开发菜单访问项目(请参阅访问项目文件,了解详细信息和其他选项)。

如需了解如何创建新项目,请参阅创建新的 LookML 项目;如需了解如何访问和修改现有 LookML 项目,请参阅访问和修改项目信息

项目的组成部分

LookML 项目可以包含模型、视图和 LookML 信息中心,其中每个信息中心均由其他 LookML 元素组成。

如图所示,以下是 LookML 项目中一些较为常见的文件类型:

  • model包含要使用哪些表以及如何将这些表联接在一起的信息。您通常在此处定义模型、其探索和联接。
  • 视图包含有关如何访问或计算每个表(或多个联接表)中的信息的信息。在这里,您通常可以定义视图、其尺寸和度量以及字段集。
  • 探索通常在模型文件内定义,但有时您需要一个单独的“探索”文件,以便创建派生表或者跨模型扩展优化“探索”。
  • 清单文件可以包含从其他项目中导入的文件或项目的本地化设置的说明。

除了模型文件、视图文件、探索文件和清单文件外,项目还可以包含与内置信息中心、文档、本地化等内容相关的其他类型的文件。如需详细了解这些类型的文件以及 LookML 项目中可以包含的其他类型的文件,请参阅 LookML 项目文件文档页面。

这些文件共同构成一个项目。如果您使用 Git 进行版本控制,则每个项目通常都由各自的 Git 代码库备份。

LookML 项目和文件来自哪里?

创建 LookML 文件的最常用方法是从数据库生成 LookML 项目。您还可以创建空白项目并手动创建其 LookML 文件,也可以通过克隆现有 Git 代码库来创建项目

当您从数据库生成新项目时,Looker 会创建一组基准文件,您可以将其用作构建项目的模板:

  • 多个视图文件,一个文件对应数据库中的每个表。
  • 一个model文件。模型文件会为每个视图声明一个 Explore。每个“探索”声明都包含 join 逻辑,用于联接 Looker 能够确定与探索相关的任何视图。

在这里,您可以移除不需要的视图和探索,以及添加自定义维度和测量值,从而对项目进行自定义。

主要 LookML 结构

项目图表的组成部分所示,项目通常包含一个或多个模型文件,这些文件包含用于定义模型及其探索和联接的参数。此外,项目通常包含一个或多个视图文件,每个视图文件都包含定义该视图及其字段(包括维度和测量值)和字段集的参数。项目还可以包含项目清单文件,以便您配置项目级设置。本部分将介绍这些主要结构。

模型

模型是数据库的自定义门户,旨在为特定业务用户提供直观的数据探索。单个 LookML 项目中的同一数据库连接可以存在多个模型。每个模型都可以向不同的用户公开不同的数据。例如,销售代理需要与公司高管不同的数据,因此您可能会开发两个模型来提供适合每个用户的数据库视图。

模型指定与单个数据库的“连接”。开发者还可以在模型文件内定义模型的探索。默认情况下,“探索”会按照定义它们的模型名称进行整理。您的用户会看到探索菜单中列出的模型。

如需详细了解模型文件(包括模型文件的结构和一般语法),请参阅 LookML 项目中的文件类型文档页面。

如需详细了解可在模型文件中使用的 LookML 参数,请参阅模型参数文档页面。

查看

视图声明定义了字段(维度或测量值)列表及其与底层表或派生表的关联。在 LookML 中,视图通常引用底层数据库表,但也可以表示派生表

一个视图可以联接到其他视图。视图之间的关系通常在模型文件中的 Explore 声明中定义。

默认情况下,在“探索”数据表格中,视图名称会显示在维度和衡量名称的开头。此命名惯例可以明确说明字段属于哪个视图。在以下示例中,视图名称 Orders(订单)和 Users(用户)列在数据表中字段的名称前面:

示例查询的数据表,选择了“订单创建日期”“用户 ID”和“订单计数”字段。

如需详细了解视图文件(包括视图文件的结构和常规语法),请参阅 LookML 项目中的文件类型文档。

如需详细了解可在视图文件中使用的 LookML 参数,请参阅查看参数文档页面。

探索

探索是一种可供用户查询的视图。您可以将“探索”视为查询的起点,或者用 SQL 术语来理解 SQL 语句中的 FROM。并非所有视图都属于“探索”部分,因为并非所有视图都能描述感兴趣的实体。例如,与州名对照表对应的 States 视图不一定要使用“探索”,因为商家用户永远不需要直接查询该视图。另一方面,商家用户可能希望使用一种方法来查询 Orders 视图,因此为 Orders 定义“Explore”很合适。如需了解用户如何与“探索”功能互动以查询您的数据,请参阅在 Looker 中查看探索并与之互动文档页面。

在 Looker 中,您的用户可以在探索菜单中看到“探索”部分。探索列在所属模型的名称下方。

按照惯例,探索在模型文件中使用 explore 参数声明。在下面的模型文件示例中,电子商务数据库的 orders“Explore”是在模型文件中定义的。explore 声明中引用的视图 orderscustomers 是在各自的视图文件中的其他位置定义的。

connection: order_database
include: "filename_pattern"

explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

在此示例中,connection 参数用于指定模型的数据库连接include 参数用于指定可供模型引用的文件。

此示例中的 explore 声明还指定了视图之间的联接关系。如需详细了解 join 声明,请参阅本页关于联接的部分。如需详细了解可与 join 参数搭配使用的 LookML 参数,请访问联接参数文档页面。

维度和衡量字段

视图包含字段,主要是维度和测量,它们是 Looker 查询的基本构建块。

在 Looker 中,维度是可分组的字段,可用于过滤查询结果。可以是:

  • 与底层表中的列直接关联的属性
  • 事实或数值
  • 根据单行中其他字段的值计算得出的派生值

在 Looker 中,维度始终显示在 Looker 生成的 SQL 的 GROUP BY 子句中。

例如,“产品”视图的维度可能包括产品名称、产品型号、产品颜色、产品价格、产品创建日期和产品终止日期。

测量是使用 SQL 聚合函数的字段,例如 COUNTSUMAVGMINMAX。任何基于其他测量值计算的字段也是一种测量。测量可用于过滤已分组的值。例如,针对“销售”数据视图的衡量指标可能包含售出商品总数(计数)、总售价(总和)和平均售价(平均值)。

字段的行为和预期值取决于其声明的类型,例如 stringnumbertime。对于测量,类型包括聚合函数,例如 sumpercent_of_previous。如需了解详情,请参阅维度类型衡量类型

在 Looker 中,字段列在页面左侧的字段选择器中的探索页面上。您可以展开字段选择器中的某个视图,以显示可从该视图中查询的字段列表。

按照惯例,字段会声明为其所属的视图的一部分,并存储在视图文件中。以下示例展示了几个维度和测量声明。请注意,在不使用完全限定范围的 SQL 列名称的情况下,使用了替代运算符 ($) 来引用字段。

以下是维度和测量的一些示例声明:

view: orders {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: customer_id {
    sql: ${TABLE}.customer_id ;;
  }
  dimension: amount {
    type: number
    value_format: "0.00"
    sql: ${TABLE}.amount ;;
  }
  dimension_group: created {
    type: time
    timeframes: [date, week]
    sql: ${TABLE}.created_at ;;
  }
  measure: count {
    type: count           # creates sql COUNT(orders.id)
    sql: ${id} ;;
  }
  measure: total_amount {
    type: sum             # creates sql SUM(orders.amount)
    sql: ${amount} ;;
  }
}

您还可以定义 dimension_group(可同时创建多个与时间相关的维度)和 filter 字段(具有各种高级用例,例如模板化过滤条件)。

如需详细了解如何声明字段以及可应用于字段的各种设置,请参阅字段参数文档页面。

联接数

explore 声明中,每个 join 声明都指定一个可联接到 Explore 中的视图。如果用户创建的查询包含多个视图中的字段,Looker 会自动生成 SQL 联接逻辑来正确引入所有字段。

以下是 explore 声明中的联接示例:

# file: ecommercestore.model.lookml

connection: order_database
include: "filename_pattern"   # include all the views

explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

如需了解详情,请访问在 LookML 中使用联接文档页面。

项目清单文件

您的项目可能包含项目清单文件,该文件用于项目级设置,例如指定要导入当前项目的其他项目、定义 LookML 常量、指定模型本地化设置,以及向项目添加扩展自定义可视化图表

每个项目只能有一个清单文件。该文件必须命名为 manifest.lkml 并且位于 Git 代码库的根级别。使用 IDE 中的文件夹时,请确保将 manifest.lkml 文件保存在项目目录结构的根目录下。

如需从其他项目导入 LookML 文件,请使用项目清单文件指定当前项目的名称以及任何外部项目的位置,这些项目可本地或远程存储。例如:

# This project
project_name: "my_project"

# The project to import
local_dependency: {
  project: "my_other_project"
}

remote_dependency: ga_360_block {
  url: "https://github.com/llooker/google_ga360"
  ref: "4be130a28f3776c2bf67a9acc637e65c11231bcc"
}

在项目清单文件中定义外部项目后,您可以使用模型文件中的 include 参数将这些外部项目中的文件添加到您的当前项目中。例如:

include: "//my_other_project/imported_view.view"
include: "//ga_360_block/*.view"

如需了解详情,请参阅从其他项目导入文件文档页面。

如需向模型添加本地化内容,请使用项目清单文件指定默认的本地化设置。例如:

localization_settings: {
  default_locale: en
  localization_level: permissive
}

指定默认本地化设置是模型本地化的一个步骤。如需了解详情,请参阅将 LookML 模型本地化文档页面。

集合

在 Looker 中,是一个列表,用于定义一组一起使用的字段。通常,集用于指定在用户展开细目查看数据后要显示的字段。深入分析集是按字段指定的,因此您可以完全控制当用户点击表格或信息中心中的值时,系统应显示哪些数据。集还可用作安全功能,来定义对特定用户可见的字段组。以下示例展示了视图 order_items 中的 set 声明,该声明定义用于列出所购商品相关详细信息的字段。请注意,该集合通过指定范围来引用其他视图中的字段。

set: order_items_stats_set {
  fields: [
    id,  # scope defaults to order_items view
    orders.created_date,  # scope is "orders" view
    orders.id,
    users.name,
    users.history,  # show all products this user has purchased
    products.item_name,
    products.brand,
    products.category,
    total_sale_price
  ]
}

如需了解集的完整用法详情,请参阅 set 参数文档页面。

展开细目

在 Looker 中,您可以配置字段,以便用户进一步深入了解数据。深入探究适用于查询结果表和信息中心。展开细目会启动受您点击的值限制的新查询。

深入分析行为因尺寸和测量而异:

  • 在展开某个维度时,新查询会过滤深入分析的值。例如,如果您在按日期显示的客户订单查询中点击特定日期,则新建的查询将仅显示该特定日期的订单。
  • 在对测量进行深入探究时,新查询将显示促成测量的数据集。例如,展开计数时,新查询会显示用于计算该计数的行。按最大值、最小值和平均值进行深入分析时,深入分析仍会显示促成该测量的所有行。这意味着,如果按最大度量深入分析,则会显示用于计算最大值的所有行,而不是仅显示最大值的单个行。

为新的深入分析查询显示的字段可以由定义,也可以由 drill_fields 参数(适用于字段)drill_fields 参数(适用于数据视图)定义。

派生表

派生表是一种查询,其结果将用作数据库中的实际表。派生表是通过在 view 声明中使用 derived_table 参数创建的。Looker 访问派生表,就像这些实体表具有自己的一组列一样。派生表作为自己的视图公开,并采用与传统视图相同的方式定义尺寸和测量。就像任何其他视图一样,可以查询派生表的视图并将其联接到其他视图中。

派生表还可以定义为永久性派生表 (PDT),是指写入数据库的临时架构的派生表,并按照您使用持久策略指定的计划自动重新生成。

如需了解详情,请参阅 Looker 中的派生表文档页面。

数据库连接

LookML 项目的另一个重要元素是 Looker 用于对数据库运行查询的数据库连接。Looker 管理员使用“连接”页面配置数据库连接,LookML 开发者使用模型文件中的 connection 参数指定用于模型的连接。如果您从数据库生成 LookML 项目,Looker 会自动填充模型文件中的 connection 参数。

区分大小写

LookML 区分大小写,因此在引用 LookML 元素时,请务必区分大小写。如果您引用的元素不存在,Looker 会提醒您。

例如,假设您有一个名为 e_flights_pdt 的探索,而一位 LookML 开发者使用了错误的大小写 (e_FLIGHTS_pdt) 来引用该探索。在此示例中,Looker IDE 会显示一条警告,指出“探索”e_FLIGHTS_pdt 不存在。此外,IDE 还会建议现有探索的名称,即 e_flights_pdt

但是,如果您的项目同时包含 e_FLIGHTS_pdte_flights_pdt,Looker IDE 将无法为您更正错误,因此您必须确定您预期的版本。通常,在为 LookML 对象命名时,最好使用小写字母。

IDE 文件夹名称也区分大小写。无论何时指定文件路径,您都必须与文件夹名称的大小写保持一致。例如,如果您有一个名为 Views 的文件夹,则必须在 include 参数中也使用这种大小写形式。同样,如果您的大小写与项目中的现有文件夹不匹配,Looker IDE 会再次指出错误:

Looker IDE 会显示一条警告,指出该包含与任何文件都不匹配。