模型度量视图数据

本页介绍如何为指标视图建模以及使用这些视图的最佳做法。

指标视图有助于为数据创建语义层,将原始表转换为标准化的业务友好指标。 他们定义要度量的内容、如何聚合它以及如何细分它,确保整个组织中的每个用户针对同一关键绩效指标(KPI)报告相同的数字。 目标是为业务指标创建单一事实来源。

通过将数据建模为指标视图,可以抽象化复杂的 SQL、表结构和数据质量问题,使分析人员能够完全专注于分析。

核心组件

对指标视图建模涉及在源数据上定义以下元素:

组件 Description Example
来源 包含原始事务数据的基表、视图或 SQL 查询。 samples.tpch.orders
尺寸 用于对指标进行分段或分组的列属性 产品类别、订单月份、客户区域
措施 生成指标的列聚合。 这些度量值是你通常报告的内容。 COUNT(o_order_id) 作为订单计数, SUM(o_total_price) 作为总收入。
筛选器 通过持久条件应用于源数据来定义范围。
  • status = 'completed'
  • order_date > '2024-01-01'

定义源

可以使用类似表的资产或 SQL 查询作为指标视图的源。 若要使用类似表的资产,必须至少拥有对该资产的SELECT特权。

将表用作源

若要将表用作源,请包括完全限定的表名称,如以下示例所示。

source: samples.tpch.orders

使用 SQL 查询作为源

若要使用 SQL 查询,请直接在 YAML 中编写查询文本。

source: SELECT * FROM samples.tpch.orders o
  LEFT JOIN samples.tpch.customer c
  ON o.o_custkey = c.c_custkey

注释

使用包含 JOIN 子句的 SQL 查询作为源时,Databricks 建议在底层表中设置主键和外键约束,并在查询时酌情选择使用 RELY 选项,以实现最佳性能。 有关使用主键和外键约束的详细信息,请参阅 使用主键约束声明主键和外键关系 以及 查询优化

将指标视图用作源

还可以使用现有指标视图作为新指标视图的源:

version: 1.1
source: views.examples.source_metric_view

dimensions:
  # Dimension referencing dimension from source_metric_view
  - name: Order date
    expr: order_date_dim

measures:
  # Measure referencing dimension from source_metric_view
  - name: Latest order month
    expr: MAX(order_date_dim_month)

  # Measure referencing measure from source_metric_view
  - name: Latest order year
    expr: DATE_TRUNC('year', MEASURE(max_order_date_measure))

将指标视图用作源时,相同的可组合性规则适用于引用维度和度量值。 请参阅 “可组合性”。

尺寸

用于查询时SELECTWHEREGROUP BY子句中的列即为维度。 每个表达式必须返回标量值。 维度定义为数组。 每个维度由两个组件组成:

  • name:列的别名。

  • expr:源数据上的 SQL 表达式,用于定义指标视图中的维度或以前定义的维度。

注释

从版本 1.1 开始,还可以为每个维度定义语义元数据(显示名称、格式和同义词)。 请参阅 指标视图中的语义元数据 以获取详细信息。

措施

度量值是定义为一组表达式的列,这些表达式在生成结果时不依赖于预先确定的聚合级别。 必须使用聚合函数来表示它们。 若要在查询中引用度量值,必须使用函数 MEASURE 。 度量值可以引用源数据或早期定义的维度中的基字段。 每个度量值由以下组件组成:

  • name:度量值的别名。

  • expr:可以包含 SQL 聚合函数的聚合 SQL 表达式。

以下示例演示了常见的度量值模式:

measures:
  # Simple count measure
  - name: Order Count
    expr: COUNT(1)

  # Sum aggregation measure
  - name: Total Revenue
    expr: SUM(o_totalprice)

  # Distinct count measure
  - name: Unique Customers
    expr: COUNT(DISTINCT o_custkey)

  # Calculated measure combining multiple aggregations
  - name: Average Order Value
    expr: SUM(o_totalprice) / COUNT(DISTINCT o_orderkey)

  # Filtered measure with WHERE condition
  - name: High Priority Order Revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderpriority = '1-URGENT')

  # Measure using a dimension
  - name: Average Revenue per Month
    expr: SUM(o_totalprice) / COUNT(DISTINCT DATE_TRUNC('MONTH', o_orderdate))

请参阅 聚合函数 获取聚合函数列表。

请参阅 measure 聚合函数

注释

从版本 1.1 开始,还可以为每个度量值定义语义元数据(显示名称、格式和同义词)。 请参阅 指标视图中的语义元数据 以获取详细信息。

应用筛选器

指标视图的 YAML 定义中的筛选器适用于引用它的所有查询。 它必须编写为 SQL 布尔表达式,并且等效于在 SQL 查询中使用 WHERE 子句。

以下示例演示了常见的筛选器模式:

# Single condition filter
filter: o_orderdate > '2024-01-01'

# Multiple conditions with AND
filter: o_orderdate > '2024-01-01' AND o_orderstatus = 'F'

# Multiple conditions with OR
filter: o_orderpriority = '1-URGENT' OR o_orderpriority = '2-HIGH'

# Complex filter with IN clause
filter: o_orderstatus IN ('F', 'P') AND o_orderdate >= '2024-01-01'

# Filter with NOT
filter: o_orderstatus != 'O' AND o_totalprice > 1000.00

# Filter with LIKE pattern matching
filter: o_comment LIKE '%express%' AND o_orderdate > '2024-01-01'

还可以在查询或使用指标视图时添加筛选器。

高级建模功能

指标视图建模支持高级技术来创建复杂且高度可重用的指标。

联接

通过联接,可以使用相关表中的描述性属性来扩充指标视图。 可以使用联接对来自事实数据表到维度表(星型架构)的关系建模,并从维度表遍历到子维度表,从而允许在规范化维度表(雪花架构)之间进行多跃点联接。

请参阅 指标视图中的“使用联接”。

窗口测量

重要

此功能为试验性的

利用窗口度量值,您可以在指标视图中通过窗口化、累积或半累加聚合来定义度量值。 这些类型的度量值允许更复杂的计算,例如移动平均值、期间内更改和运行总计。 请参阅在指标视图中使用窗口度量值,了解演示如何在指标视图中使用窗口度量值的示例。

可组合性

指标视图是可组合的,允许通过引用以前定义的元素来构建复杂的逻辑。 可以在新的维度中引用先前定义的维度,在新的度量值中引用任何维度或先前定义的度量值,并且在度量视图中引用定义的联接的列。

查看 指标视图中的可组合性

语义元数据

语义元数据有助于使用工具了解如何显示和处理度量值和维度。 这包括以下属性:

语义元数据 Example
显示名称 Total Revenue 而不是 sum_o_price
显示格式 标准化货币、百分比和日期的格式。
注释 使用自然语言解释指标的业务定义。

定义语义元数据时,它会随指标一起传输。 例如,当分析师在仪表板中使用 总收入 时,它会自动显示为货币。

请参阅 在指标视图中使用语义元数据

YAML 语法和格式设置

指标视图定义遵循标准 YAML 表示法语法。 请参阅 YAML 语法参考 ,了解定义指标视图所需的语法和格式。 请参阅 YAML 规范 1.2.2 文档,了解有关 YAML 规范的详细信息。

窗口测量

窗口度量值在定义的 窗口内或与当前行相关的行区间上计算出一个值。 可以使用时间序列和比较分析的窗口度量值,从而定义指标,例如:

  • 滚动 30 天总收入:过去 30 天内的收入总和
  • 年到日(YTD)收入:从年初算起累计总和
  • 上一期比较:上月收入

请参阅 度量视图中的“使用窗口度量值”

对指标视图进行建模的最佳做法

对指标视图进行建模时,请使用以下准则:

  • 模型原子度量值:首先定义最简单的非计算度量值(例如,SUM(revenue)COUNT(DISTINCT customer_id))。 使用可组合性构建复杂的度量值(如 AOV)。
  • 标准化维度值:使用转换(如 CASE 语句或表达式)将神秘数据库代码转换为明确的业务名称(例如,将订单状态“O”转换为“打开”,将“F”转换为“履行”)。
  • 使用筛选器定义范围:有意使用持久性筛选器。 如果指标视图只应包含已完成订单,请在指标视图中定义该筛选器,以便用户无法意外包含不完整的数据。
  • 使用业务友好的命名:指标名称应当让业务用户能够立即识别(例如,客户生命周期价值cltv_agg_measure)。
  • 单独的时间维度:始终包括精细的时间维度(如 订单日期)和截断的时间维度(如 Order Month 或 OrderWeek),以支持详细级别和趋势分析。