1

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

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

在这种情况下如何设计事实表,由于步数不固定,事件的数据类型也不相同。

我很抱歉我的英语不好。

4

1 回答 1

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 动态 PIVOT 查询?

让我知道您是否想出了一些不同的东西,因为我对这个特定的用例很感兴趣。祝你好运

于 2019-06-22T17:03:45.140 回答