时间跨度的事实表设计

时间:2019-06-04 09:54:36

标签: data-warehouse star-schema fact-table

我需要设计一个星型模式来处理订单处理。订单进度如下所示:

  • 客户C在数量为100的物料I上下订单
  • F1工厂接受数量为30的部分订单
  • F2工厂接受数量为20的部分订单
  • 从市场上购买50件商品
  • F1交付20件物品
  • F1交付7件物品
  • F1取消合同(我们需要从市场上再购买3件商品)
  • F2交付20件物品
  • 从市场上购买3件商品
  • 完成订单

在这种情况下,如何设计事实表,因为步数不固定,所以事件的数据类型不相同。

对不起,我的英语不好。

1 个答案:

答案 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?

让我知道您是否提出了不同的建议,因为我对此特定用例感兴趣。祝你好运