作者:大数据私房菜

多值维度及交叉维度最佳解决方案

​     公众号:大数据私房菜 

1前言

       正常情况下,维表和事实表之间是一对多的关系,维表中的一行记录会连接事实表中的多行记录,事实表中的一行记录在维度表中只能关联上一条记录,不会发生数据发散的现象

       想法是美好的,但是事实总是不尽人意。因为现实中不但事实表和维度表之间存在多对多的关系,维度表和维度表之间也存在多对多的关系

        这两种情况本质是相同的,但事实表和维度表之间的多对多关系少了唯一描述事实和维度组的中间维度。

       对于这两种情况,一种称为桥接表的中间表就需要派上用场了,并且还可以支持更为复杂的多对多的关系

 

2事实表与维度表多对多(多值维度)

       比如下单了一套学习课程,但是这套课程并不是某一个用户买的,而是好几个用户合买的,所以为了处理这种情况,需要创建一个桥接表,将这些合买的用户组成一个组


       ETL过程需要对每条事实表中的用户组,在桥接表中查找相应的用户主键,上图所示的桥接表有重复计数的风险。如果按用户累加购买金额,对某些分析而言结果是正确的,但对于其他情况仍会有重复计数的问题。要解决这个问题,可以向桥接表中添加权重。    

       权重是一个分数值,所有的用户组的权重累加起来为1。将权重和累加事实相乘,以按照每个用户在分组中的比重分配事实。

lock