我需要设计一个星型模式来处理订单处理。订单进度如下所示:
在这种情况下,如何设计事实表,因为步数不固定,所以事件的数据类型不相同。
对不起,我的英语不好。
答案 0 :(得分:0)
根据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来创建所需的视图
SQL Server dynamic PIVOT query?
让我知道您是否提出了不同的建议,因为我对此特定用例感兴趣。祝你好运