Smartbi的数据模型基于成熟的建模理论和方法,总体的而言主要体现在两方面:模型架构和模型表关系。
模型架构
数据模型是围绕事实表和维度表的关系而进行模型的构建:
- 事实表:是数据模型中的中央表,它包含联系事实与维度表的数字度量值和键。事实数据表包含描述业务(例如产品销售)内特定事件的数据。
- 维度表:是维度属性的集合,是分析问题的一个窗口,是人们观察数据的特定角度,是考虑问题时的一类属性,属性的集合构成一个维。
Smartbi支持星型模型和雪花模型:
- 星型模型:所有维表都直接连接到事实表上,整个视图就像星星一样。
星型模型强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。
- 雪花模型:一个或多个维表没有直接连接到事实表上,而是通过其他维度表连接到事实表,视图就像多个雪花连接在一起。
雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如将产品维表分解为产品类别维表。
相关概念
我们在Smartbi设计数据模型架构前,需要对模型设计紧密相关的概念有清晰的认识和理解:
度量值
度量值是存储要汇总的值的事实数据表列。
Smartbi数据模型中的度量值表达式通常利用 DAX 聚合函数(如 SUM、MIN、MAX、AVERAGE 等)在查询时生成标量值结果(值永远不会存储在模型中)。 度量值表达式涵盖广泛,从简单的列聚合到更复杂的公式应有尽有,这为模型开发者提供了便利,因为在很多情况下都无需创建度量值: 如“订单明细”表中的“销售量”列可以通过多种方式进行汇总(包括 SUM、COUNT、AVERAGE、MEDIAN、MIN、MAX 等),无需为每种可能存在的聚合类型创建度量值 。
雪花维度
雪花维度是单个业务实体的一组规范化表 。例如:“产品”维度经过了规范化并存储在两个相关表中:产品类别维度和产品维度。这些规范化表位于事实数据表之外,形成雪花形状的设计。
在 Smartbi数据模型 中,可以选择模仿雪花维度设计,也可以将源表(非规范化)通过私有查询的方式集成到单个模型表中。如下图所示:
一般而言,单个模型表的优点比多个模型表的优点更多,最理想的决策取决于数据量和模型的可用性要求。
在选择集成到一个模型表中时,还可以定义一个层次结构,其中包含维度的最高和最低粒度。 冗余非规范化数据的存储可能会增加模型存储大小,尤其是在维度表很大的情况下。
渐变维度
模型表关系
模型设计过程中,模型表的关系也是很重要的一项内容。
一对多(多对一)关系
多对多关系
一对一关系
目前Smarbi数据模型构建仅支持一对多(多对一)和一对一关系。
模型选型
星型模型和雪花模型在架构体系中各有优劣,其对比如下:
区别项 | 星型模型 | 雪花模型 |
---|---|---|
维度表 | 一级维度表 | 多级维度表(子维度表) |
存储空间 | 多 | 少 |
数据冗余度 | 大 | 小 |
表宽度 | 宽 | 窄 |
扩展性 | 差 | 好 |
Join复杂度 | 低 | 高 |
查询逻辑 | 简单 | 难 |
查询速度 | 快 | 慢 |
可读性 | 简单 | 难 |
OLAP建模工具优化度 | 低 | 高 |
数据总量 | 多 | 少 |
可读性 | 容易 | 差 |
表个数 | 少 | 多 |
在实际业务场景中,往往是两种模型的综合应用。