【问题标题】:Update in data warehouse fact table数据仓库事实表中的更新
【发布时间】:2019-06-27 14:07:53
【问题描述】:

阅读了有关事实表(事务、累积、定期)等的许多 Kimball 设计技巧。我仍然不清楚我应该如何处理我认为并不少见的更新事实表的情况。到案子。

我们正在处理来自客户的投诉,我们希望能够在数据仓库中反映投诉的当前状态。我们的投诉有一个他们经历的状态工作流程,不同的受让人按时处理他们,但对于我们的分析来说,这与现在无关。我们想回顾一下目前的投诉情况。

据我了解,事实表的粒度将是单一投诉,带有列(与此问题无关,是否应该是垃圾维度、退化等),例如:

  • 投诉号码
  • 当前状态
  • 当前状态日期
  • 当前受让人
  • 投诉类型

据我了解,由于我们不想查看进程历史记录,而是查看进程的当前状态,因此为每个表示其状态的投诉存储多行是一种矫枉过正的做法,因此我们存储每个投诉只有一行,然后更新

现在,我的推理正确吗?在上述情况下,投诉数量和投诉类型存储值不会更改,而“当前”列会更改,我们需要更新行,因此我们可以实现更改数据捕获机制(就像我们现在对维度所做的那样)将来自该事实的源系统的传入行与当前存储的事实行进行比较,以降低此类操作的时间成本。

老实说,对我来说,它看起来像一个混合 SCD 类型 0 和 1 的维度表,但它存储了接收投诉的事实。

发帖供参考:Fact table with information that is regularly updatable in source system

编辑

我知道我可以使用带有时间戳的累积事实表,这有点类似于 SCD 类型 2,但最终用户并不真正关心该过程的历史。稍后在分析中涉及更多事实,因此在这种情况下,将这种需求与数据仓库分开并不起作用。

【问题讨论】:

    标签: sql-update data-warehouse fact


    【解决方案1】:

    我过去遇到过类似的用例,其中累积快照将是默认解决方案。

    但是,累积快照不允许具有不同长度的进程。我设计了一种不同的模式,为每个事件添加 2 行:如果一个对象从状态 A 转到状态 B,您首先插入状态 A 和数量 -1 的行,然后插入状态 B 和数量 + 的新行1.

    最终结果允许: - 无需更新,只需插入; - 地图减少友好; - 任意长度的进程; - 在任何时间点计算每个状态中每个状态的数量(出于性能原因,借助定期快照); - 在任何时间点有多少人进入或离开任何状态。 - 计算每个州的时间和总体年龄。

    这里有 5 篇博文的详细信息(在 Pentaho 数据集成中实现):

    http://ubiquis.co.uk/dwh/status-change-fact-table-part-1-the-problem/

    【讨论】:

    • 感谢您的帖子,我相信您的看法是对 Kimball 提出的使事务事实表 SCD2 相似的方法的修改:kimballgroup.com/2012/05/… 我也考虑过这一点,但不想过分收集历史,因为最终用户似乎真的不关心这个过程,但我觉得很不幸。
    • 是的,但不完全是。无需考虑更新,更轻松地提供净计数。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多