数据模型
数据模型,即关联关系模型,可以在数据集之间建立 join 或者 union 的关系,并在作图时带入这些关系。
数据模型有以下功能:
- 支持数据集追加,比如每月追加新的销售数据
- 支持数据集复用:在一个数据模型中,可以将一个数据集多次拖入,建立不同的关联关系,可以实现数据集自关联,使用单个字典表扩展成带有层次结构的字典表
- 支持跨数据集建立指标:模型表可以使用与之关联的关联数据集创建指标
- 关联条件支持表达式:允许用户自由编写关联条件,比如模糊匹配等
与此同时,引入新的概念:
- 模型表:选中一个数据集,围绕该数据集建立各种关系,这个数据集称为模型表。
- 关联表:在数据模型中与模型表建立关联关系的数据集。
一个数据集在参与其他模型表的关联关系时,身份是“关联表”,在自己的数据模型中,身份是“模型表”。作图时选择数据集,就会带入以该数据集为模型表的整个数据模型。
提示
只支持处于同一连接下的同源数据集建立数据模型。 一个图表只能使用一个数据模型,不能跨数据模型作图。
新建关系
在数据模型区域,点击一个数据集,然后将左侧列表中的数据集拖到该数据集上,就会弹出新建关系
弹窗,在弹窗中,可以设置:
- 关联关系:内连接、左连接、右连接、全连接
- 关联条件:简单条件、表达式条件
- 关联基数:一对一、一对多、多对一、多对多
关联关系
关联关系指的是数据集 join 方式,包括以下四种:
- 内连接:只返回两张表中完全匹配的行
- 左连接:返回左表所有的行,无论是否匹配右表
- 右连接:返回右表所有的行,无论是否匹配左表
- 全连接:返回左连接结果和右连接结果的并集
提示
部分数据库由于自身限制,不支持 full join,比如 mysql 5、tidb 等,创建模型时会有相应提示。
关联条件
关联条件有简单条件
和表达式条件
两种设置方式。
简单条件的多个条件之间有两种关系:任一条件
(OR)和全部条件
(AND)。
表达式条件支持用户自由编写关联条件,可以是字段 a>字段 b,也可以是 like(字段 a,字段 b),如下:
关联基数
在数据模型中关联基数类型的作用是避免因数据膨胀导致分析失真。示例中展现了关联基数为一对一
建模时数据膨胀的情况,膨胀的数据会导致分析严重失真。
所以在数据建模时用户要根据业务实际情况,选择表格关联基数。 基数基数包括一对一
、一对多
、多对一
、多对多
四种类型,默认设置为一对一
。
生效机制
模型的生效机制包括按需关联和始终关联。
- 按需关联表示只使用模型表时关联关系不生效,只有使用到扩展表时关联关系才会生效。
- 始终关联表示不管是否使用到扩展表,关联关系都会生效。
示例中使用销售数据集作为模型表,门店信息表作为扩展表,两张表在使用按需模型和始终关联模型下作图效果。作图时都使用模型表中的字段,可以看出始终关联下关联关系生效,门店使用了扩展表中的门店信息。 按需关联时门店字段还是使用模型表的信息。
编辑关系
点击一个 join 关系图标,在弹出的菜单中选择编辑
,会弹出编辑关系
页面。编辑关系
和新建关系
页面完全一样。
数据集上下合并
数据模型中每个数据集支持追加数据。点击模型中每个节点的三点菜单中的上下合并。此时左侧的数据集列表呈现勾选状态,右侧展示当前数据集的字段信息。 从左侧数据集列表中选中待追加的数据集,点击确定后数据追加成功,将勾选的数据集数据追加到节点的数据集中。可以通过数据预览查看合并结果。
提示
追加原则如下:
- 自动按节点字段名称对齐,第一个为基础节点数据集,字段名称相同时数据追加到一起,字段名称不一样的添加新的一列。
- 基础节点数据集的用户新增字段,追加后依然是新增字段,如果追加进来的字段名称一样,该字段为实体列时被忽略。
- 隐藏列可以参与追加。
公共字典
不同来源的数据集不能进行建模。如图所示,公司名称
和公司人数
这两个数据集不能进行关联。
公共字典可以解决上述情况。首先将公司名称
的数据集设置为公共字典表。 然后在数据模型中拖动公司名称
与公司人数
进行关联建模。
提示
转换成公共字典的数据集不能大于500行。 任何类型的数据集都支持转换为公共字典。
维度去重
在没有公共维度表的情况下,如果多表之间的数据是多对多关系时,直接关联建立模型后,数据可能会发生膨胀,生成重复数据,影响后期数据的挖掘和分析。这种情况下可以使用维度去重功能,去除重复数据,消除数据膨胀。
下面以订单表和广告投放表两个数据集举例,演示如何使用维度去重功能消除数据膨胀。
订单表和广告投放表的原始数据如下。
直接使用日期字段进行多对多的关联并作图分析,那么得到的关联关系和图形的数据会膨胀,总广告投放支出只有4000的情况下,聚合结果为6000。
当开启维度去重之后,那么模型就可以根据用户的意图,算出订单对应的日期的广告支出实际上只有3000。
提示
维度去重功能根据数据分析的需要支持开启和关闭。 在使用维度去重功能时,要清楚哪些数据发生了膨胀,消除的是哪些膨胀数据。
预览数据
点击数据模型区域右下方的预览数据
,可以即时预览关联模型生效后的数据:
删除关系
删除关系有两种方式:
- 点击关联图标,在弹出菜单中选择
删除
,可以删除单个关系。删除单个关系时,与删除的关联表关联的其他关系也会被删除。也就是说,数据模型中不会有独立于模型表的关系,任何一个数据集都会通过一个或多个链条与模型表相关联。
- 点击数据集右上方的三点菜单,在弹出菜单中点击
删除
,这会删除与该数据集关联的所有关系。
跨数据集创建指标
打开模型表数据集,选择新建指标,在指标表达式中可以使用关联表的字段。
在一个模型中,只能给模型表创建指标,不能为关联表创建指标。
下图的指标使用了两个数据集的字段:
数据集复用
同一数据集复用
在一个数据模型中,可以将同一数据集拖入多次,后续拖入时会在数据名称上自动加上(1)、(2),如下图,门店信息表
第二次拖入时,自动加上了(1),变成了门店信息表(1)
。
数据集复用主要适用于维度表/字典表自关联来实现多层级别的场景,比如员工表中,员工经理 ID 与员工 ID 进行自关联,来查询某个员工的经理是谁。
比如下图中,层级1、层级2、层级3这三个数据集都是字典表
这个数据集的复用,它们相互之间使用 parentid 与 id 进行关联,一级一级查询到最高的父级,它们与订单表进行关联,从而可以统计出各个级别的订单销售情况。
关联主表聚合的数据集
聚合数据集只使用模型主表字段时,可以把它与主表的数据模型进行关联,反向对主表进行明细的筛选查看。主表的聚合数据集拖入主表的数据模型后,可能会出现循环引用等情况,此时会向用户发出提示信息。 下面列出一些在主表模型中拖入主表的聚合数据集,会发生报错的场景。
在主表的数据模型中:
- 主表的聚合数据集使用了除主表之外其它的数据集字段,此时该聚合数据集不允许添加到主表模型中。
- 主表的聚合数据集拖入模型后生效机制设置为始终关联,此时不允许添加该聚合数据集。
- 模型中若上游数据集中有主表聚合数据集,则下游数据集生效机制不允许设置为始终关联,如果设置为始终关联则不允许添加。
对模型中的数据集追加数据时
- 在模型中主表的聚合数据集都不允许进行上下合并操作,对数据集追加数据。
- 模型中的其他数据集进行上下合并操作时也不能追加主表聚合数据集的字段。
当主表聚合数据集拖入模型后,
- 编辑主表聚合数据集时如果添加了模型中非主表的字段则报错。
- 使用模型中的从表替换主表聚合数据集时报错。
数据集重命名
在数据模型中,可以点击数据集右上角的重命名
对数据集进行重命名,重命名后的数据集本质上是一个新的引用数据集,在联动过滤时不会影响使用原始数据集做的图。
联动过滤
提示
只要数据集名称相同,就会联动过滤。
该规则适用于联动过滤和仪表盘过滤器。
数据模型性能优化指南
- 直连时:原表使用窄表,避免宽表,去掉无用的字段,减少扫描,减少内存占用
- fusion 等加工表落引擎表,也是去掉无用的字段,加速导入引擎过程
- 直连时,将计算字段在原表物化,避免做图时计算
- join 时,尽量使用数字进行 join,比如有部门 id 和部门名称,用部门 id 进行关联,数据库会对数字进行性能优化
- 生成聚合表,导入引擎:比如订单表,按照客户、天、产品去聚合,甚至可以按月来聚合
- 创建索引视图,给视图加索引
- 在源数据库新建一个日期维度表,将年、季度、月、周、日提前计算出来,确保日期覆盖了事实表的日期,用日期维度表和事实表进行关联,过滤时使用日期维度表
- 减少类型转换,建表时就把类型正确定好
- 关联字段不要使用计算字段,一个原因是计算字段耗时间,一个原因是计算字段没有索引
- 先聚合,再 join,减少 join 基数
- 关联时:一对一、一对多,尽量避免多对多,因为会造成重复计算,聚合结果可能不正确
数据模型与 fusion 数据集的区别
- fusion 可以落实体表,偏分析性能
- 数据模型在作图时会显示数据集,便于字段识别,偏分析时的便利性
- 查询时,fusion 会用到所有基础表,模型只会查询使用到的数据集
可以使用数据模型进行探索性分析,确定分析模型和分析数据之后,使用 fusion 将仅需的字段落实体表。