ssas - 如何对数据仓库中的流程和状态历史进行建模?

标签 ssas data-modeling data-warehouse dimension fact

假设我们有 D_PROCESSD_WORKERD_STATUS 作为维度,并且事实上 F_EVENT 链接与工作人员(负责人)的流程(内容)以及“当前”状态。

进程状态随着时间的推移而变化。我们是否应该在 F_EVENT 中为每个进程/状态/工作人员存储一行,或者为每个进程/工作人员存储一行,并在“其他地方”为给定的进程/工作人员每次状态更改存储一行?

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

最佳答案

阅读The Data Warehouse Toolkit作者:Ralph Kimball,对维度建模进行了很好的介绍。

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

编辑:

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

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

基本数据模型将用于“税务处理系统”,其中 WORKERS 正在处理帐户,并且每个帐户/ 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)

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

该表的粒度是帐户、工作人员、状态和时间。它回答了诸如“我的第三类员工周三花了多少时间处理账户?”之类的问题。或“发生了多少事件将处理状态更改为“已关闭”?

我不确定这种类型的表格有多大帮助。

相反,假设您有兴趣跟踪流程本身在不同状态下的变化。我假设状态总是及时向前移动,从“未开始”到“处理中”再到“已关闭”。

我将构建 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

这张表的grain是Account、Worker。该表通过更新状态更改的日期/时间以及达到该状态时的标志来跟踪“进程”。

这使您可以跟踪一段时间内的流程,从而查看有多少帐户已 react 为“处理中”状态、到达该状态需要多长时间等等。

关于ssas - 如何对数据仓库中的流程和状态历史进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114988/

相关文章:

c# - 处理 Microsoft.AnalysisServices 更新方法的错误

ssas - 从SSAS中选择​​维度表

visual-studio - 测验系统用例

cassandra - Cassandra 中分层实体的建模

haskell - 处理函数式编程中增量数据建模的变化

hadoop - 缓慢变化的维度 - Hive 中的 SCD1 和 SCD2 实现

ssas - 选择 mdx 中的前 MAX 10 个度量

ssas - 如何在 ssas 中使用更改脚本进行部署

sql - 跨数据库联合

Hadoop 可以替代 SSIS、Informatica 等 ETL 工具吗?