5

假设我们有D_PROCESS和作为维度,以及将流程(什么)与工人(负责人)和“当前”状态联系起来的D_WORKER事实。D_STATUSF_EVENT

进程状态随时间而变化。我们应该在F_EVENT每个进程/状态/工作者存储一行,还是每个进程/工作者一行,并且“其他地方”为给定进程/工作者的每个状态更改存储一行?

我是 Datawarehouse 的新手,很难找到与数据建模相关的最佳实践/教程。

4

1 回答 1

8

阅读Ralph Kimball 的The Data Warehouse Toolkit,了解维度建模的良好介绍。

听起来您将流程更改事件存储在 F_EVENT 中。如果这个过程有一个定义的开始和结束,我会构建一个快照事实表,它可以让你随着时间的推移跟踪这个过程(只需在每次过程从一个步骤移动到另一个步骤时更新行)。

编辑:

我将尝试使用您的尺寸作为示例来制作一般情况。

对于 D_PROCESS,建模“流程”通常不建模为维度,您称其为“什么”,因此我将其重命名为“D_ACCOUNT”。

基本数据模型将用于“税务处理系统”,其中 WORKERS 正在处理 ACCOUNTS,并且每个 ACCOUNT/WORKER 组合具有该流程当前所处位置的几个可能的“状态”。

D_ACCOUNT
    ACCOUNT_NUMBER
    ACCOUNT_TYPE

D_WORKER
    WORKER_ID
    FIRST_NAME
    LAST_NAME
    BADGE_NUMBER
    SHIFT

D_STATUS
    STATUS_ID
    STATUS_NAME

现在,如果我想报告由工作人员执行的帐户发生的所有“事件”,我可以构建一个事务级事实表 F_EVENT:

F_EVENT
    ACCOUNT_ID
    WORKER_ID
    STATUS_ID
    EVENT_TIME_ID
    Metrics taken at time of the measurement (Cost, Worker time spent, etc)

我们将标识行的唯一维度组合称为事实表的粒度粒度

此表的粒度是 Account、Worker、Status 和 Time。它回答了诸如“我在 3 班轮班的员工在周三花了多少时间处理账户?”之类的问题。或“发生了多少事件将处理状态更改为“已关闭”?

我不确定这种类型的桌子会有多大帮助。

相反,假设您有兴趣在流程通过各种状态时跟踪流程本身。我将假设状态总是及时向前移动,从“未开始”到“处理中”再到“关闭”。

我将构建 Kimball 所说的“累积快照事实表”。

F_TAXPROCESSING
    ACCOUNT_ID
    WORKER_ID 
    CURRENT_STATUS_ID
    NOT_STARTED_DTTM
    NOT_STARTED_FLAG
    IN_PROCESS_DTTM
    IN_PROCESS_FLAG
    CLOSED_DTTM
    CLOSED_FLAG

该表的粒度是 Account, Worker。此表通过更新状态更改的日期/时间以及达到该状态时的标志来跟踪“过程”。

这使您可以随着时间的推移跟踪流程,让您查看有多少帐户对“处理中”状态做出反应,到达那里需要多长时间等等。

于 2012-06-20T12:56:15.817 回答