0

我正在使用 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 中使用渐变维度工具

4

3 回答 3

1

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

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

EffectiveDate:今天 ExpiryDate:前一天。

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

于 2016-05-03T08:27:45.157 回答
0

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

于 2016-05-02T18:55:35.660 回答
-1

我再次遇到这个问题并找到了解决方案。在 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'
于 2018-04-05T19:08:02.643 回答