如何在数据仓库中建模流程和状态历史记录?

Fra*_*ois 4 ssas data-modeling data-warehouse dimension fact

让我们说,我们有D_PROCESS,D_WORKER并且D_STATUS作为维度,以及将F_EVENT流程(什么)与工人(谁负责)和"当前"状态联系起来的事实.

过程状态随时间而变化.我们应该为F_EVENT每个进程/状态/工作者存储一行,或者每个进程/工作者存储一行,并且对于给定的进程/工作者,每个状态更改的"其他地方"一行存储一行?

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

N W*_*est 7

阅读Ralph Kimball 的数据仓库工具包,了解维度建模的一个很好的介绍.

听起来您正在F_EVENT中存储流程更改事件.如果此进程具有已定义的开始和结束,我将构建一个快照事实表,使您可以跟踪一段时间内的进程(每次进程从一个步骤移动到另一个步骤时只更新行).

编辑:

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

对于D_PROCESS,建模"进程"通常不建模为维度,并将其称为"什么",因此我将其重命名为"D_ACCOUNT".

基本数据模型将用于"税务处理系统",其中工人正在处理账户,并且每个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
Run Code Online (Sandbox Code Playgroud)

现在,如果我想报告由工作人员执行的帐户发生的所有"事件",我可以构建一个事务级事实表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)
Run Code Online (Sandbox Code Playgroud)

我们称尺寸的独特组合标识一行的粒度谷物的事实表.

此表的粒度是"帐户","工作人员","状态"和"时间".它回答的问题是"我的工人在第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
Run Code Online (Sandbox Code Playgroud)

这张桌子的颗粒是账号,工人.此表通过更新状态更改的日期/时间以及达到该状态时的标志来跟踪"进程".

这使您可以跟踪一段时间内的过程,从而可以查看有多少帐户对"IN PROCESS"状态做出反应,到达那里需要多长时间,等等.