【问题标题】:Late arriving fact - best way to deal with it迟到的事实 - 处理它的最佳方法
【发布时间】:2016-05-23 21:31:57
【问题描述】:

我有一个星型模式来跟踪公司中的角色,例如该角色属于哪个部门,分配给该角色的员工,何时开始,何时/是否完成并离开。

我有两个时间维度,StartedDate 和 EndDate。当角色处于活动状态时,源系统中的结束日期为空。在星型模式中,我将任何空结束日期设置为 31/12/2099,这是我手动添加的维度成员。

我正在研究更新角色结束或员工离职时的 Enddate 的最佳方式。

现在我:

  1. 正常填充事实表,在所有维度上进行查找。

  2. 然后我对事实表进行查找以查找重复项,但在此查找中不包括 EndDate。不匹配的行是新的,因此插入到事实表中。

  3. 匹配的行然后进入条件拆分以检查 currentEndDate 是否与 newEnd Date 不同。如果不同,则将它们插入到 updateStaging 表中并运行 proc 以更新事实表

有没有更有效或更整洁的方法来做到这一点?

【问题讨论】:

  • 你说“两个时间维度,StartedDate & EndDate”……你不是说两个时间列吗?

标签: ssis etl data-warehouse star-schema


【解决方案1】:

将所有这些都放在一个 foreach 容器中怎么样,它会遍历并且效率更高。

【讨论】:

  • 我不明白,我看不出每个容器的 a 是如何帮助优化工作流程的,或者它是如何适应的。我可以要求更详细一点吗?谢谢!
【解决方案2】:

我认为这是一个合理的解决方案。我个人会使用存储过程来提高处理效率,但由于 DWH 的维度性质和隐含的类型 2 性质,这是一种有效的方法。

另一种方法是按原样执行 SSIS 的“不匹配”分支,但在“匹配”分支中,您可以将该行插入到实际的事实表中,然后进行后处理 T-SQL 步骤这将更新所需的两条记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 2017-03-27
    • 1970-01-01
    • 2017-04-26
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多