1. 案例
张小华和李小草共同买了5份足彩,花了25块钱。
2. 理想情况
理想情况是拆分到单个人身上。
人, 日期, 数量, 金额。 再加一个购买id表示同一个订单。
能拆最好, 通常拆不了, 能拆也不会有多只维度这个需求了。
3. 多值有上限
维度数量有上限, 比如3个。
第一购买人,第二购买人,第三购买人, 日期, 数量, 金额。 再加一个购买id表示同一个订单。
优点:简单
缺点:有限制
缺点:后面方式该有的缺点,他也有。
4. 支架表
用户维度:
用户id | 用户名称 |
1 | 张小华 |
2 | 李小草 |
事实表:
订单id | 购买者 | 购买时间 | 购买数量 | 购买金额 | |
1 | 1,2 | 2000-01-01 | 5 | 25 |
支架:
购买者id | 用户id |
1,2 | 1 |
1,2 | 2 |
购买者id 是对订单的多个用户collectset ,然后再排序得到。
优点: 能准确表示多值维度关系。
缺点:存在重复计算。上面表格数据, 一个订单关联了两条支架数据,然后每条支架数据对应一个用户。最后看起来 张小华和李小草没人买了5份足彩,花了25.
所以使用时应该限制:查询的是用户参与过的 订单的总额。 多个用户之间可能存在重复的订单。
5.支架表扩展
购买者id | 用户id | 出资比率 |
1-0.3,2-0.7 | 1 | 0.3 |
1-0.3,2-0.7 | 2 | 0.7 |
支架表上增加一个拆分比率,关联时事实表的事实乘以这个比率, 就可加了。
优点: 相当于对事实表进行了拆分。
缺点:这个比率不容易拿到。如果能拿到,干脆把事实表拆分粒度,做什么多值维度。
严重错误:这里有一个严重错误,张小华和李小草第一次合买的比率和第二次合买的比率不一定一致。 所以购买者组的id也不一定一致。 购买者组id的生成, 应该包含两者id 和比率。
6. 建议
多值维度,实在没辙时能做,但是统计时的重复计算需谨慎。