8、不同粒度事实表的处理与跨表分析

不同粒度事实表的处理与跨表分析

1. 不同粒度事实的问题

当两个或多个事实描述具有不同粒度的事件时,它们代表不同的业务流程。例如,销售部门可能有以下业务需求:
- 按日期、客户和产品分析订购数量。
- 按日期、客户、产品和托运人分析发货数量。

这里发货数量多了一个维度细节——托运人,这一信息仅适用于发货,不适用于订单。

1.1 单事实表的困境

尝试使用单个事实表(如 sales_facts )来满足这些需求会带来诸多问题。该事实表的粒度要求按天、产品、客户以及可选的托运人记录订单、发货或两者。这种表述中“或”的存在就预示着问题的出现。

为了处理有订单但无发货的情况,设计中会在托运人维度添加一个特殊行,其代理键值为 0。当用户分析单个流程(如发货)时,报告中会出现大量值为 0 的行,还包含隐晦的托运人名称“[ not a shipper ]”,这会让业务用户感到困惑。而且,当订单和发货在同一天针对同一产品和客户发生时,需要存储两行数据,一行对应订单(无托运人数据),另一行对应发货(无订单数据),订单和发货永远不会记录在同一行。

另一种单事实表设计允许无托运人的事实表行使用 NULL 键,但这会进一步加剧报告难题。当托运人表参与查询时,多余的行可能会消失,但当托运人表不参与查询时,零值事实又会出现。此外,允许 shipper_key 为 NULL 值在同时研究订单和发货时需要不同的连接配置,难以限定特定的托运人类型。

1.2 多事实表的优势

当两个事实具有不同粒度时,将它们放在不同的事实表中可以避免

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值