时间跨度累积事实表设计



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

  • 客户 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 来创建所需的视图

SQL Server Dynamic PIVOT query?

如果您想出不同的东西,请告诉我,因为我对这个特定的用例感兴趣。祝你好运

最新更新