如何在数据仓库中对进程和状态历史记录进行建模



假设我们有D_PROCESSD_WORKERD_STATUS作为维度,以及将流程(什么)与工人(负责者)和"当前"状态联系起来的事实F_EVENT

进程状态随时间而变化。我们为每个流程/状态/工作人员存储F_EVENT一行,或者每个流程/工作人员一行,并且"其他地方"为给定流程/工作人员的每个状态更改存储一行?

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

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

听起来您正在F_EVENT中存储流程更改事件。如果此流程具有定义的开始和结束,我将构建一个快照事实数据表,以便您随时间跟踪流程(只需在流程从一个步骤移动到另一个步骤时更新行)。

编辑:

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

对于D_PROCESS,对"过程"进行建模通常不会建模为维度,您将其称为"什么",因此我将其重命名为"D_ACCOUNT"。

基本数据模型将用于"税务处理系统",其中工人正在处理帐户,并且每个帐户/工人组合都有几个可能的"状态",表明此过程当前所处的位置。

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)

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

此表的粒度是帐户、工作人员、状态和时间。它回答了诸如"我的第 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

这张表的谷物是帐户,工人。此表通过更新更改状态的日期/时间来跟踪"进程",并在达到该状态时添加一个标志。

这使您可以跟踪一段时间内的流程,让您查看有多少帐户对"正在进行"状态做出了反应,到达那里需要多长时间等。

最新更新