跳转至

运算机制概述

基础概念

指标查询

image

查询指标时,系统会根据使用的指标和维度,通过数据模型,将其转换为对应的SQL语句运行。

  • 查询参数的主要内容包含指标(必需)维度(非必须)两类

  • 指标:用于指定查询结果

  • 维度:用于分组或过滤

  • 系统根据本次查询包含的指标维度所在的数据模型,动态的生成查询的 SQL 语句。

  • 将查询 SQL 提交给执行引擎,计算返回结果。

数据模型

image

关联关系

关联关系是数据模型的核心概念,多个数据集通过其关联关系进行连接,形成数据模型。

以上图的商品维度表订单表为例

名词 说明
关联字段 两数据集之间的关联字段为 [商品维度表/商品ID] 和 [订单表/商品ID]
关联方向 从图示中我们可以看出 1:N 的示意,对于这条关联关系而言: * 商品维度表订单表的1端 * 订单表商品维度表的N端 !!! note "说明 1端和N端是一个相对关系。 比如用户维度表,相对于订单表页面访问日志而言,他是N端;但相对用户标签而言,他处于N端。"
说明 1端和N端是一个相对关系。 比如`用户维度表`,相对于`订单表`和`页面访问日志`而言,他是N端;但相对`用户标签`而言,他处于N端。

|

关系传递

在了解关系传递之前,我们需要掌握以下背景信息。

指标平台中定义的指标/维度都能找到其归属数据集。

指标的归属数据集:

指标类型 归属数据集
基础指标 在指标定义时,选择的数据集即为归属数据集。 image.png
派生指标 在指标定义时,与选择的 基于/复合指标 一致。 image.png
复合指标 复合指标归属于定义中引用的指标的归属数据集的并集,即复合指标可能归属于多个数据集。

维度的归属数据集:

维度类型 归属数据集
字段转换 转换的字段所在的数据集,即为该维度的归属数据集。
自定义维度 在维度定义时,选择的数据集即为归属数据集。 image.png
指标平台中定义的指标/维度都能找到其归属数据集。

指标的归属数据集:

指标类型 归属数据集
基础指标 在指标定义时,选择的数据集即为归属数据集。 image.png
派生指标 在指标定义时,与选择的 基于/复合指标 一致。 image.png
复合指标 复合指标归属于定义中引用的指标的归属数据集的并集,即复合指标可能归属于多个数据集。

维度的归属数据集:

维度类型 归属数据集
字段转换 转换的字段所在的数据集,即为该维度的归属数据集。
自定义维度 在维度定义时,选择的数据集即为归属数据集。 image.png

提示

关系传递规则: ● 定义基础指标和维度时,我们可以使用到当前归属数据集字段以及其对应的全部一端数据集的字段。 ● 基础指标的可用分析维度,是其归属数据集所对应的一端数据集以及归属数据集的维度。

利用关系传递的特性,我们可以很方便的实现以下几个场景:

场景 说明
指标定义 定义基础指标时,引用1端数据集字段进行聚合的计算或筛选。 * 案例1:创建基础指标订单毛利润,需要使用[订单表/订单金额]剔除[商品维度表/成本],可以在界面中直接引用该字段编写表达式,不需要提前进行字段的加工,将字段冗余到订单表数据集中再进行指标定义 * 案例2:创建基础指标高利润产品销售额,需要使用[商品维度表/成本][订单表/订单金额]进行比较,保留订单金额高于成本1.5倍的订单数据,计算指标结果。
扩展维度 扩展模型引入新维度,可以灵活快速的为指标添加维度。 * 案例1:创建指标订单毛利润后,随着业务的发展,会扩展会员标签表等用户分析的用户特征,可以在数据集中新建关联关系,即可在指标上快速使用新增的维度

指标日期

目前指标平台内置了一个日期维度,中文名称为指标日期,英文名称为 metric_time

由于在指标平台中创建基础指标时,必须要指定一个日期类型的字段为指标日期,所以指标日期是全部指标必有的一个分析维度。但这并不意味着指标必须要按照指标日期进行分析,用户依然可以选择在查询时不使用指标日期进行维度分组或筛选。

案例

案例:指标日期维度的引入可以解决需要将多个来自于不同数据集的指标一起进行分析。

以 1.2 章节的数据模型为例,若用户需要分析每日的订单销售额页面访问量两个指标,希望返回在同一个表格中。

日期 订单销售额 页面访问量
2024-09-30 14,000 800,300
2024-09-28 15,020 798,332
2024-09-27 12,000 680,000
2024-09-26 16,088 820,000

如上图所示,期望可以返回一个表格,一列日期,另外两列为指标的结果值。

这时候指标日期就派上用场了,用户只需要将指标日期作为维度进行查询即可,系统会在查询时根据指标的定义,在查询订单销售额时,转换为下单时间;查询页面访问量时,转换为访问时间;最后再将两份数据结果拼接到一起返回。

指标计算

指标平台中定义的指标,只是一段聚合的逻辑定义,并没有真实的数据值,而指标若希望得到一个实际的数据值,则需要结合一些限定来使用。维度便是添加限定的一种方式,当然,没有限定也是一种限定方式。

案例

订单额是定义出来的基础指标,其公式为 SUM([订单金额]) 。当我们期望获得一个指标结果时,通常有如下方式: 2024-09-20 日的订单额:其中 指标日期=2024-09-20 便为限定

本年的订单额:其中 指标日期的范围等于本年 便为限定

已完结的订单额:其中 订单状态=已完结 便为限定"

通过上述案例,我们可以发现,指标的计算要结合具体的语境,这种语境我们称其为查询环境。我们在设计之初,就希望查询环境是支持灵活多变的,这样一个指标才可以在不同的查询环境中都可以被消费使用,从而实现一处定义,处处使用

查询环境

查询环境是指查询指标的环境条件。

体现在查询界面中的查询环境

image

体现在 API 调用中的查询环境

{
  ...

  "metrics": ["salesAmount"],
  "dimensions": ["province", "city"],
  "filters": ["['orderchannel']=\"线上\""],
  "timeConstraint": 
  "(['metric_time_day'] = DateTrunc("2024-09-30", \"DAY\"),
  "limit": 10,
  "offset": 1,

  ...
}

无论使用何种方式查询指标,指标的查询环境的运作机制都是完全一致的。

规则1

:在计算单个指标时,查询环境中用于分组和用于筛选的维度,都会转为数据筛选,作用到指标的计算中。

如上述示例所示,使用蓝框标记的销售额的值,是由以下筛选条件构成的:

  • 省份=浙江(分组维度筛选)

  • 城市=杭州(分组维度筛选)

  • 指标日期=2024-09-30(筛选维度筛选)

  • 订单渠道=线上(筛选维度筛选)

规则2

指标平台中支持在查询时对查询环境中的筛选条件进行调节。具体的调节方法有以下几种:

覆盖修改筛选条件

增加筛选条件

移除筛选条件

总结

本文提出了几个指标计算的重点机制,你需要了解这些机制规则,以便于理解后续指标计算的原理。

  1. 数据集之间存在关联关系,数据(字段、维度)可以通过关系传递,从1端数据集传递到N端数据集中被使用

  2. 系统提供了指标日期维度,通过指标日期维度可以将多个指标放在一起查询分析

  3. 筛选会影响指标结果的计算,一般来说筛选是和查询条件一致的,但是指标平台中提供一些特性可以调节这些筛选,以达到可以计算符合预期的指标结果