《维度模型系列》-3事实表核心技术(上)

维度模型系列文章:

《维度模型系列》-1初识维度模型

《维度模型系列》-2数据仓库总线架构

《维度模型系列》-3事实表核心技术(上)

《维度模型系列》-3事实表核心技术(下)

。。。

更多最新文章请文末扫码关注公众号查看


 

1引言

维度建模的事实表是围绕业务过程来设计的,其包含了业务过程的度量和引用的维度。下面我们将从以下事实表相关内容来对事实表相关技术有一个全面的介绍:

  • 事实类型:可加性、半可加性,不可加性

  • 粒度
  • 事实表三种类型: 事务事实表(单事务,多事务)、周期快照事实表和累积快照事实表
  • 父子型事实表
  • 退化维
  • 代理键
  • 一致性事实
  • 事实表设计方法

2事实类型

作为度量业务过程的事实,一般是整形或者浮点型的数值,有可加性、半可加性,不可加性三种类型。

  • 可加性指的是事实可以按照任意维度进行汇总,例如销售订单事实表的商品数量可以按照时间,地点,商品进行汇总求和统计每个城市的销售数量。
  • 半可加性指的是事实可以按照某些特定维度进行汇总,如有关库存或者账户余额的事实就是半可加的,这类事实是对某一时间点的度量,不能跨越时间周期将他们加到一起,但是可以对某一时间点的库存按照地点,商品汇总
  • 不可加性的事实,比如某个产品单位价格,温度 ,比率值等,因为所有维度中的这类事实是独立的,这种数据汇总毫无意义

3粒度

粒度用于确定实表中一行所表示业务过程的细节层次,技术上来说粒度确定了事实表的主键。例如下面订单相关的两个事实表:

  • 左边订单事实表中的粒度是到订单级别的,相关事实都是相对于整个订单来说的,如毛订单总额
  • 右边的订单明细事实表的粒度是具体到子订单中的商品来说的,如该订单中某一商品的下单数量,该商品的总毛利额等等

事实表中强调同一事实表中的事实要具有相同的粒度,这样我们就可以按照任意维度进行汇总,避免不同粒度在汇总计算时出现重复统计的情况。

 

4事实表三种类型

按照粒度划分事实表类型大致可以分为三种: 事务事实表、周期快照事实表和累积快照事实表。它们作为互补事实表,从不同的粒度层次上表现数据,提供了对业务较为全面的描述。下面我们分别介绍这几种事实表的设计以及试用场景。

4.1事务事实表

事务事实表的粒度是每一行数据对应一个事务,或者一行对应事务中的一个条目。事务可以理解为业务过程中的各个事件节点,比如网购交易过程中的创建订单,买家付款,物流过程中的揽活,发货,签收,退款过程中的申请退款,确认退款等,都可以理解为事务。事务事实表针对这些过程构建,作为数仓的原子明细数据,可以跟踪定义业务过程的事件,提供丰富的分析能力。

事务事实表只有事务发生才会新增对应的一条数据,一般不会做更新操作

事务事实表可以分为单事务事实表和多事务事实表

单事务事实表

单事务事实表,顾名思义,即针对每个业务过程设计 个事实表。这样设计的优点不言而喻,可以方便地对每个业务过程进行独立的分析研究。如下单,支付两个事务事实表:

两个事务事实表表的维度基本一致,不同的是事务发生对应的事实

 

下面以具体交易订单为例 ,展示单事务事实表的设计实例。假设orderl在2019-11-01日下单并且在当天完成支付;order2 order3在2019-11-01日下单并且在2019-11-02日完成支付。order1 order2 order3 写入单事务事实表中,下单日期均为 2019-11-01日, orderl order2 order3 也分别写入支付事务事实表中,支付日期分别为2019-11-01,2019-11-02,2019-11-02

多事务事实表

多事务事实表,将不同的事实放到同一个事实表中,即同一个事实表包含不同的业务过程。不同的业务过程可以通过打标签的方式区分,标记当天是否是这个业务过程,比如针对下单,则打一个是否当天下单的标签,针对支付打一个是否当天支付的标签。

多事务事实表在设计时有两种方法进行事实的处理:

  • 不同业务过程的事实使用不同的事实字段进行存放

当不同业务过程的度量差异较大时可以使用这种设计方式

每个度量都使用一个字段进行保存 ,即不同的事实使用不同的字段进行存放;如果不是当前 业务过 程 的度量,则采取零值处理方式。比如在下单业务过程中,对于支付度量全部置为0

同样以交易订单为例,假设orderl在2019-11-01日下单并且在当天完成支付;order2 order3在2019-11-01日下单并且在2019-11-02日完成支付。则交易多事务事实表数据实例如下:

 

  • 不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签

当不同业务过程的度量比较相似,差异不大时可以使用这种设计方式

以收藏商品业务过程来举例说明,收藏事务事实表使用 一个“收藏事件类型”字段来区分是收藏商品还是删除商品。收藏商品和删除商品的事实主要是商品价格

 

 

4.2周期快照事实表

周期快照事实表在了解有规律的,可预见时间间隔的业务累计性能方面很有必要。与针对每个出现的事件都要加载一行数据的事务事实表不同,利用周期快照可以在每天,每周,每月结束时,为当时的行为进行拍照,然后在下一周期拍另一张照片,比如商品库存,账户余额,每日交易额,每月累计交易额等。事务事实表需要聚集长期的事务历史才能得出这些结果,使用效率比较差,可以用周期快照作为事务事实表的补充。

下面举两个周期快照的例子:库存周期快照和每月累计销售额周期快照表

 

4.3累积快照事实表

累积快照表完全涵盖一个事务或者离散产品(或者用户)的生命期的不确定跨度。累积快照表具有多个日期字段,用于对应可预见的主要事件或者环节的发生时间。通常还有一个用于指示快照行最后一次更新的附加日期列。

累积快照事实表需要对数据进行重新访问,当某一事件发生后,需要对应时间字段和相关度量进行更新操作,而不是新增一行。

累积快照可以很好的满足某些特殊的需求,例如:统计下单到支付的时长,支付到发货的时长,下单到确认收货的时长等。如果用事务事实表的话逻辑复杂且性能较差。

以交易订单业务过程举例,包含下单,支付,发货,收货几个主要节点,具体的事实表设计如下:

5总结

事务与快照是维度数据仓库的阴与阳。事务事实表伴随快照事实表一起使用,能购提供业务方面的完整视图。同时存在对这几种类型的事实表的需要,是因为通常没有一种简单的方式能将这几种视图组合在一起。虽然在事务与快照之间存在一些数据冗余,但是每个单独的事实表类型都为相同内容提供了一个不同的分析视图,更加能够有效的对数据进行分析。

在下篇我们会继续介绍事实表其他相关的内容:

  • 父子型事实表
  • 退化维
  • 代理键
  • 一致性事实
  • 事实表设计方法

更多技术文章请关注公众号:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值