【问题标题】:Time span accumulating fact tables design时间跨度累积事实表设计
【发布时间】:2019-10-19 20:17:47
【问题描述】:

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

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

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

对不起,我的英语不好。

【问题讨论】:

  • 我们能否明确说明您需要设计一个完整的星型模式还是只需要一个事实表。因为,您提到的场景 - 整个星型模式可以设计为相同的。

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


【解决方案1】:

根据 Kimball 对 Accumulating Snapshot Fact 表的定义是: 总结在流程开始和结束之间可预测步骤发生的测量事件。

对于这个特定的用例,我会使用 事务事实表,因为事件(步骤)是不可预测的,它更像是一个事件事实表,类似于日志或审计。 p>

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

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

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多