【问题标题】:Slowly Changing Dimension - Effective/Expiry Date corruption when running multiple times in one day缓慢变化的维度 - 一天内运行多次时有效/到期日期损坏
【发布时间】:2016-05-02 18:43:16
【问题描述】:

我正在使用 Kimball 方法来缓慢更改我们数据仓库中的维度。我们遇到了在一天内多次更新记录并且 ETL 每 15 分钟运行一次的问题。所以生效日期和到期日期都搞砸了。

例如:

First      Last    Effective Date    Expiry Date   CurrRowInd
John       Smith   Jan 01, 1900      Aug 5, 2015   N
Jonathon   Smith   Aug 6, 2015       Aug 10, 2015  N
Jonathon   Smithe  Aug 11, 2015      Aug 10, 2015  Y

看看最后一行的 EffectiveDate 是如何大于到期日期的 - 这不好:(

还有其他人遇到过此类问题吗?您是如何处理的?

我在 SSIS 中使用渐变维度工具

【问题讨论】:

    标签: sql-server ssis etl data-warehouse scd


    【解决方案1】:

    您要么必须将 Time 添加到源表中的有效日期(这并不难做到),要么在有人进行更改时调整设置有效日期/到期日期的代码(这可能是例如触发器)。

    您关于有效期的约定似乎是,从包含有效日期(以时间而言,从有效日期 00:00:00 开始)到包含有效日期(以时间而言,直到 23 日为止)的行是有效的: 59:59)。因此,更新这些日期的代码必须在同一天设置一个更早的、现在完全无效的更新:

    生效日期:今天 ExpiryDate:前一天。

    显然,维度的 ETL 必须与此一致,并忽略 EffectiveDate>ExpiryDate 的行。

    【讨论】:

    • 我喜欢忽略 EffectiveDate>ExpiryDate 的记录 - 这可能会起作用。
    【解决方案2】:

    您的问题看起来更像是数据映射。检查 ETL 包中的映射连接。使用标志列。查找表中存在的记录并标记为 1。仅选择标记的记录并查找所有属性。如果更改将 CurrRowInd 更新为 N 并插入新记录

    【讨论】:

    • 我不太明白。问题是该作业每 15 分钟运行一次。因此,在 8 月 15 日,进行了两项更改 - 一项将其更改为 Jonathon,一项将他的姓氏更改为 Smithe。但这些变化发生在一天的两个不同时间。一种解决方案是将其更改为 Type 1 维度——但我必须与业务部门讨论这一点——此时我正在寻找技术解决方案。另一种方法是增加生效日期和到期日期的时间——但这会产生非常大的技术影响
    【解决方案3】:

    我再次遇到这个问题并找到了解决方案。在 SCD 进程运行后,我执行一个删除语句来删除除一个条目之外的所有条目。

    ;with  cte as (
    select e.EmployeeKey
            ,e.EmployeeID
            ,e.EffectiveDate
            ,e.ExpiryDate
            ,e.CurrentRowInd
            ,iif(e.EffectiveDate = LEAD(e.EffectiveDate) OVER (partition by EmployeeID order by EffectiveDate), 'DELETE','') AS Note
    from DimEmployees e
    where EmployeeID in (
                select EmployeeID
                from DimEmployees 
                group by EmployeeID, EffectiveDate
                having count(*) > 1
                )
    
    )
    DELETE
    from cte
    where Note = 'DELETE'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多