2016-11-17 69 views
0

我正在研究一个数据仓库项目,该项目涉及集成来自多个源系统的数据。我已经建立了一个SSIS包,用于填充客户维度并使用缓慢变化的维度工具来跟踪客户的更新。需要帮助了解SSIS中scd的替代方案

我遇到了一些问题。就拿这个例子:

源系统可能有一个记录一样,看起来像这样:

姓,名,邮编 简,DOE,14222

源系统B可能有一个记录同一个客户端,看起来像这样:

姓,名,邮编 简,DOE,未知

如果我先导入由系统中的记录,我会第一个名字,姓氏和种族。大。现在,如果我从系统B导入客户记录,我可以进行模糊匹配以识别这是同一个人,并使用缓慢变化的维度工具来更新信息。但在这种情况下,我将失去邮政编码,因为'未知'将覆盖有效数据。

我想知道我是否以错误的方式接近这个问题。基于新数据是否有效,SCD工具似乎没有提供任何有选择性地更新属性的方法。合并声明会更好吗?我是否犯了某种我没有看到的基本设计错误?

感谢您的任何建议!

回答

0

根据我的经验,内置的SCD工具不够灵活,无法满足此要求。

一对MERGE语句或一系列UPDATEINSERT语句可能会为您提供逻辑和性能的最大灵活性。

可能有模特在那里为MERGE语句SCD 2型,但这里是我使用模式:

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    When Matched And 
    Target.NonKeyAttribute <> Source.NonKeyAttribute 
    Or IsNull(Target.NonKeyNullableAttribute, '') <> IsNull(Source.NonKeyNullableAttribute, '') 
    Then Update Set SCDEndDate = GetDate(), IsCurrent = 0 

    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ..., GetDate(), 1) 

    When Not Matched By Source Then 
    Update Set SCDEndDate = GetDate(), IsCurrent = 0; 

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    -- These will be the changing rows that were expired in first statement. 
    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ... , GetDate(), 1); 
+0

感谢您确认内置SCD工具的局限性。我有一种预感,那就是这种情况,但在我放弃我目前的设计之前,希望得到一些外部确认。 –