1. 概述

对于不同粒度事实表一同分析的场景,可以通过定义数据关系,在分析时支持保留每个表的详细级别数据,使数据查询实现先聚合后关联,并规避数据膨胀和性能问题。

2. 操作流程

关系模型 - 图1

您可以在普通数据模型的基础上开启关系,即增加一个关系层,也可以直接在原始的物理表上进行关系模型的创建。

3. 操作步骤

3.1 开启关系模型

在数据模型编辑界面左上角开启关系模式,显示关系模式已开启,数据模型进入两层结构:第一层关系;第二层联接。
关系模型 - 图2

若表配置区已经存在多个物理表进行联接,则将多个物理表的联接结果作为第一个逻辑表。

3.2 在「关系」层配置逻辑表之间的关联

(1)配置逻辑表之间的关联字段
类似于数据模型的创建,拖入两张表时,若它们在原数据库中存在外键关联,则会自动进行关联;若无外键,系统会自动将两张表中相同名称的字段设置为外键进行关联。您可以在此自行添加/修改/删除关联字段。
关系模型 - 图3

(2)高级设置
关联时,您可以在此处配置逻辑表的基数和引用完整性。例如下图,“订单表”和“销售人员表”关联时,基数用来度量“订单表”中,公共字段“地区”的值在“销售人员表”中可以对应的行的数量;引用完整性用来度量“订单表”的行在“销售人员表”中是否具有匹配行。 关系模型 - 图4

  • 配置逻辑表的基数:确定当前表跟其他表关联时,关联和聚合的先后顺序
    如果公共字段的值不唯一,即“地区”的多个值可以与“销售人员表”中的多个行对应,请选择“多”,如果您不清楚字段的对应情况,也请选择“多”,当前表跟其他表关联时会先聚合再关联
    如果确定公共字段的值是唯一的,请选择“一”,当前表跟其他表关联时先关联再聚合
  • 配置引用完整性:确定表联接的类型
    如果公共字段中的某些值在另一个表中没有匹配项,即“地区”的某些值可能在“销售人员表”中没有对应的行,请选择引用完整性为“某些记录匹配”,如果您不清楚匹配情况,也请选择“某些记录匹配”,表join时为外部联接
    如果公共字段中的值确定在另一个表中都具有匹配项,请选择引用完整性为“所有记录匹配”,表join时为内部联接

3.3 在「联接」层配置物理表之间的关联

在某个逻辑表右下角的下拉菜单中点击编辑表或者直接双击逻辑表,可进入第二层,进入该逻辑表的内部联接配置,您可以配置物理表之间的联接类型和关联字段,操作与普通数据模型相同。
关系模型 - 图5

4. 其他说明

4.1 开启关系模型后的数据视图

(1)在第一层关系,只允许选择一个逻辑表,查看该逻辑表的数据视图,默认选择第一个逻辑表(用户可切换成其他逻辑表)。
关系模型 - 图6

(2)在第二层,进入某个逻辑表的内部联接时,字段视图、数据视图只展示该逻辑表的部分;模型筛选器维值加速批量设置也只展示该逻辑表的部分;添加时,也只可添加该逻辑表的部分。

4.2 开启关系模型后计算字段的处理逻辑

(1)若计算字段只依赖某一张逻辑表,则归属于该逻辑表,在该逻辑表的字段视图、数据视图中会展示该计算字段;

(2)若计算字段依赖多张逻辑表或者不依赖任何逻辑表(比如一个常量计算字段),则只在全局的字段视图中展示,不在任何一个逻辑表的字段视图、数据视图中展示;

(3)开启关系模型后,字段按照“表分类”展示时,是按照逻辑表进行分类展示。

4.3 开启关系模型后的功能限制

(1)报告图表:最高(前n项)最低(前n项)的条件格式功能无法使用;
关系模型 - 图7

(2)表格支持显示翻页器,但翻页器不显示总页数;
关系模型 - 图8

(3)选择开启关系的模型进行取数,不支持生成分析报告;
关系模型 - 图9

(4)若选择开启关系的模型进行取数,则不支持创建关联模型;若使用没有开启关系的模型进行取数,则创建关联模型的时候不支持选择关系模型;

(5)表格组件度量默认为聚合,自动勾选聚合度量,不允许修改;
关系模型 - 图10

(6)使用关系模型时,禁用大数据量导出功能;

(7)关系模型下暂不支持物化视图和复杂报表。

5. 应用案例:直播电商计算GPM指标

直播电商场景下,比起GMV,大家更关心GPM(千次曝光成交量)指标,该指标的计算公式:

GPM=(GMV/曝光PV)*1000

GMV,即商品的成交金额,该数据存在商品的交易表中(如表1),而曝光PV则在商品的曝光数据表中(如表2),因此需要将商品交易数据跟商品曝光数据关联在同一个数据模型里,才能计算出商品的GPM。
表1.商品交易数据表样例:
关系模型 - 图11

表2. 商品曝光数据表样例:
关系模型 - 图12

而当我们需要把商品交易数据跟商品曝光数据用商品id字段直接关联(Join),就会产生数据膨胀:
关系模型 - 图13

因为表1是订单粒度的,同一个商品id存在多笔订单,一个商品id会对应多条记录。而表2是商品粒度的,一个商品id只会有一条记录。两个表用商品id进行关联(Join)后,表2中的曝光PV指标就会产生膨胀——“p0001”这个商品id在表1中出现过6次,表2中的曝光pv数据汇总后就会放大6倍(如下图),这样计算得到的GPM则会比真实值小很多:
关系模型 - 图14

虽然,可以先将表1按照商品id粒度聚合,再跟表2进行关联,如此不会发生数据膨胀的问题。但是表1中的sku、订单等粒度的信息也在聚合的过程中丢失了。无法在分析的过程中下钻到sku或者订单粒度查看交易数据。
利用关系模型功能,则可以很好地解决上述问题:

  • 步骤1:新建一个数据模型,打开“关系模型”的开关
  • 步骤2:拖入要分析的“商品交易数据表”、“商品曝光数据表”
    关系模型 - 图15

  • 步骤3:在报告模块引用该数据模型,并进行数据分析
    拖入商品id、成交金额、曝光PV和GPM,可以发现曝光PV指标展示的值是正确的,未发生数据膨胀,由此得到了正确的GPM:
    关系模型 - 图16