我需要设计一个星型模式来处理订单。订单进度如下所示:
- 客户 C 订购数量为 100 的商品 I
- F1工厂接受部分订单,数量30
- F2工厂部分接单,数量20
- 从市场购买 50 件商品
- F1发货20件
- F1发货7件
- F1 取消合同(我们需要从市场上再购买 3 件商品)
- F2发货20件
- 从市场购买 3 件商品
- 完成订单
在这种情况下如何设计事实表,由于步数不固定,事件的数据类型也不相同。
我很抱歉我的英语不好。
我需要设计一个星型模式来处理订单。订单进度如下所示:
在这种情况下如何设计事实表,由于步数不固定,事件的数据类型也不相同。
我很抱歉我的英语不好。
根据 Kimball 对累积快照事实表的定义是:总结在过程开始和结束之间的可预测步骤中发生的测量事件。
对于这个特定的用例,我会使用事务事实表,因为事件(步骤)是不可预测的,它更像是一个事件事实表,类似于日志或审计。
| order_key | date_key | full_datetime | entity_key (customer, factory, etc. varchar) | entity_type | state | quantity |
|-----------|----------|---------------------|----------------------------------------------|-------------|----------|----------|
| 1 | 20190602 | 2019-06-02 04:30:00 | C1 | customer | request | 100 |
| 1 | 20190602 | 2019-06-02 05:30:00 | F1 | factory | receive | 30 |
| 1 | 20190602 | 2019-06-02 05:30:00 | F2 | factory | receive | 20 |
| 1 | 20190602 | 2019-06-02 05:40:00 | Company? | company | buy | 50 |
| 1 | 20190603 | 2019-06-03 06:40:00 | F1 | factory | deliver | 20 |
| 1 | 20190603 | 2019-06-03 02:40:00 | F1 | factory | deliver | 7 |
| 1 | 20190603 | 2019-06-03 04:40:00 | F1 | factory | deliver | 3 |
| 1 | 20190603 | 2019-06-03 06:40:00 | F1 | factory | cancel | |
| 1 | 20190604 | 2019-06-04 07:40:00 | F2 | factory | deliver | 20 |
| 1 | 20190604 | 2019-06-04 07:40:00 | Company? | company | buy | 3 |
| 1 | 20190604 | 2019-06-04 09:40:00 | Company? | company | complete | 100 |
我不确定您的报告需求,因为它们没有指定,但假设您需要测量不可预测步骤的滞后/持续时间,您可以 PIVOT 并使用动态 SQL 来创建所需的视图
让我知道您是否想出了一些不同的东西,因为我对这个特定的用例很感兴趣。祝你好运