在数仓建设过程中可能会遇到事实表中的一行对应维度表中多行的情况,产生多值维度,例如一个订单由多名销售人员共同完成。就此问题说一下我的设计思路
思路1:在事实表中增加多个字段来标记同一个订单的同种维度值

适用场景
适用于固定销售人员数量的场景
优点:
好维护,结构清晰,易理解
缺点:
只适合固定数目的场景,如果是不固定数目的销售人员,在事实表中就不知道要建立多少个销售人员的字段,且及时设置了最多的销售人员个数,就可能会造成很多字段的稀疏;
使用不方便,若希望得到某个销售人员的订单数,得遍历所有此类字段;
思路2:建立桥接表
方法1

方法2

group桥接表中存放每个订单的销售人员,每个订单对应一个销售组;percent是分配因子,用于分配每个销售人员的贡献度(可以避免多重计算);方法1中primary_saleman_id放在group中,在事实表与桥接表不使用分配因子进行连接的情况下回引起多重计算,因此需要先对group表进行预处理,而在方法2中,primary_saleman_id放在order中,可以直接将order和saleman做关联,不会引起多重计算。
优点:
灵活简化了生成报表的难度
借分配因子避免了多重计算;
缺点:
桥接表的维护比较复杂,当出现一个新组合时,得先判断桥接表中是否已存在;
缓慢变化维的影响
对思路1的处理办法按照常规方式处理即可,对思路2进行处理时,一旦saleman变化的属性需要插入新记录时,该销售人员若有新的订单,就需要在group中新增一条记录。
2263

被折叠的 条评论
为什么被折叠?



