7.事实设计

发布时间 2023-11-20 17:35:23作者: jsqup

事务事实表

介绍

  • 任何类型的时间都可以理解成一种事务,如交易过程中的创建订单、买家付款,物流过程中的揽货、发货、签收等。

  • 事务事实表,即针对这些过程构建的一类事实表,用来跟踪定义业务过程的个体行为,提供丰富的分析能力,作为数据仓库原子的明细数据

设计过程

  1. 选择业务过程
  • 如:淘宝交易订单的流转过程;(创建订单、买家付款、卖家发货、买家确认收货;即下单/支付/发货/成功完结)
  1. 确定粒度
  • 确定事务事实表每一行所表达的细节层次。

  • 如:下单/支付/成功完结三个业务过程选择交易子订单粒度,即每个子订单为事务事实表的一行,每个子订单所表达的细节信息为:交易时间、卖家、买家、商品。

  • 卖家发货这个业务过程可以选择子订单粒度,即将每个子订单作为卖家发货事实表的一个细节。

  1. 确定维度
  • 按照经常用于统计分析的场景,确定维度包括:卖家、买家、商品、商品类目、发货地区、收货地区、父订单维度以及杂项维度。

  • 杂项维度:由于订单的属性较多,比如订单的业务类型、是否无线交易、订单的attributes属性等,对于这些使用较多却又无法归属到上述买卖家或商品维度中的属性,则新建一个杂项维度进行存放。


4. 确定事实

  • 事实表应该包含与其描述过程有关的所有事实

  • 淘宝交易事务事实表为例,选择下单、支付、成功完结,不同的业务过程拥有不同的事务。

  • 下单业务过程中包含下单金额、下单数量、下单分摊金额;
    支付业务过程中包含支付金额、分摊邮费、折扣金额、红包金额、积分金额;
    完结业务过程中包含确认收获金额。

  • 退化维度(阿里增加)

  • 阿里巴巴数据仓库出于效率和资源的考虑,将常用维度全部退化到事实表中,使下游分析使用模型更加方便。

  1. 冗余维度
  • Kimball维度建模理论建议在事实表中只保存这些维表的外键,而淘宝交易事务事实表在Kimball维度建模基础上做了进一步的优化,将一些维度属性都冗余到事实表中,提高对事实表进行过滤查询、统计聚合的效率。

单事务事实表

  • 针对每个业务过程设计一个事实表。

多事务事实表

  • 定义:同一个事实表包含不同的业务过程。

  • 多事务事实表在设计时有两种方法进行事实的处理:
    ①不同业务过程的事实使用不同的事实字段进行存放。
    ②不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签。

  • 粒度相同,维度相似时使用多事务事实表。如果粒度不同,则必定是不同的事实表。

周期快照事实表

半可加性质定义及案例

  • "半可加性质"是指某一现象、属性或性质在某种程度上是可加的,但在另一种程度上却不可加

  • 举个例子来说,假设有一个公司的销售业绩是半可加性质。如果这个公司有两个部门,分别是A部门和B部门,那么A部门的销售额加上B部门的销售额就等于整个公司的销售额,这符合可加性质。但是,如果A部门和B部门的销售人员之间存在重叠,即有些客户既被A部门销售人员拜访过,又被B部门销售人员拜访过,那么计算整个公司的销售额时就不能简单地将A部门销售额和B部门销售额相加,因为存在重复计算的问题。

  • 在这种情况下,半可加性质意味着销售额的计算需要考虑到重叠部分的去重,以避免重复计算。

  • 事务事实表中的事实是完全可加的,但快照模型将至少包含一个用来展示半可加性质的事实。

特性

  1. 用快照采样状态
  • 快照事实表以预定的间隔采样状态度量。

  • 举例:

  • 淘宝活动运营小二或者卖家经常需要看一些交易状态数据。

  • 对于卖家,可能每天早上都想看一下截至昨天的成交情况;对于小二而言,可能在频繁的活动周期就需要查看一次成交情况。

  • 这些状态度量可以每天通过事实表进行聚集,但随着时间跨度变大,聚集效率会越来越低,因此需要设计快照事实表进行状态的度量。

  1. 快照粒度
  • 快照事实表的粒度通常总是被多维声明,可以简单地理解为快照需要采样的周期以及什么将被采样

  • 在淘宝交易卖家快照事实表中,粒度可以被理解为每天针对卖家的历史截至当日的下单支付金额进行快照。