假设我们有D_PROCESS
、D_WORKER
和D_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
这张表的谷物是帐户,工人。此表通过更新更改状态的日期/时间来跟踪"进程",并在达到该状态时添加一个标志。
这使您可以跟踪一段时间内的流程,让您查看有多少帐户对"正在进行"状态做出了反应,到达那里需要多长时间等。