1. 概述
本章我们将给大家介绍 FineBI 推荐大家使用哪些模型结构。
2. 推荐使用的模型结构
建立模型模型结构绕不开「维度表」和「事实表」:
维度表:维度表是描述和存储业务数据属性详细信息的表格。维度是用户分析问题的角度。例如,一个产品维度表可能包含产品ID、产品名称、产品类型等列。维度表提供了对业务数据进行分组、筛选和分析的维度属性。
事实表:事实表是包含指标字段的表,这些指标用来衡量事实。事实表是主题模型中的核心表,包含了与业务过程相关的指标字段,如销售数量、销售金额、利润等。维度表可以通过与事实表的建立模型关系来提供上下文信息。每一行记录在事实表中表示一个业务事件或事实。
在本文中:维度表用橙色标识、事实表用蓝色标识。
2.1 一张事实表,多张维度表
星型结构
星型模型就像是一个星星,有一个中心的「事实表」,周围围绕着多个「维度表」,就像是星星的射线。
事实表是中心的核心,而维度表提供了与事实相关的上下文信息。每个维度表都与事实表存在一对多的关系,通过共享的键值进行连接,就像星星的射线连接到中心。这种结构让我们可以灵活地按照不同的维度对数据进行切片和分析,就像可以从不同的角度观察星星。星型模型设计简单易懂,同时查询性能也比较高。
雪花结构
雪花模型与星型模型类似,都包含了事实表和维度表。但在维度表的组织方式上有所不同。在雪花模型中,维度表被细分成多个规范化的表格,形成了多层级结构,就像雪花一样展开。
比如说「区域维度表」又由「国家维、省份维、城市维」三张表提供上下文信息。
2.2 多张维度表,多张事实表
在 FineBI 中不支持多个事实表共享多张维度表。
例如下图,「销售事实表」和「库存事实表」共享了两张维度表:「品牌维度表」和「类别维度表」。
在 FineBI 中不能如下图直接建立关联。那我们该如何处理呢?
方法一:将多张维度表进行左右合并,合并成一张维度表后,再与多个事实表建立模型关系。
注:若维度表没有能作为合并依据的字段,也可以直接进行 crossjoin 合并
方法二:将多张事实表进行左右合并,合并成一张事实表后,再与多个维度表建立模型关系。
2.3 多张事实表
场景一:键值完整(N:N在大数据量的情况下会导致性能问题,此时并不推荐使用)
若建立模型关系的两张事实表中,有一侧的事实表中的键值是完整的,就可以直接建立 N:N 的模型关系。
例如下面这个例子:
一般来说,库存里的产品是最全的,只要入库了就会有该产品的记录。而销售事实表中只有当产品售卖出去才会有该产品的记录。
所以说「库存事实表」里的键值「产品键」是完整的,这个时候我们就可以直接对这两张表建立 N:N 的模型关系。
场景二:键值不完整
若建立模型关系的两张事实表中,两侧事实表的键值都不完整,它们的键值中都有对方没有的数据。这种情况下直接建立 N:N 的模型关系可能会导致计算结果不正确。
那该怎么做呢,我们来看下面这个例子:
「预售事实表」与「退货事实表」以「产品键」建立模型关系。但它们两张表中都有对方没有的产品,也就是说两张表「产品键」都不完整,这时候我们可以将键值和两端事实表中共同的维度提取出来,进行上下拼接并去除重复值,获得一张完整的维度表。
再用这个维度表与两侧事实表建立 1:N 的模型关系。
3. 如何以多个字段作为匹配依据
在制作主题模型的时候若我们需要以多个字段作为匹配依据该怎么处理呢?
例如下面这个案例需要「部门、地区」字段共同作为合并依据。
这个时候,我们可以给两张表各添加一个辅助字段「合并依据」。
添加公式列,输入 地区+部门,如下图所示:
建立主题模型时,用「合并依据」作为匹配字段即可。如下图所示: