0

我正在从事一个数据仓库项目,该项目将涉及集成来自多个源系统的数据。我已经建立了一个 SSIS 包来填充客户维度并使用渐变维度工具来跟踪客户的更新。

我遇到了一些问题。举个例子:

源系统 A 可能具有如下所示的记录:

名字,姓氏,邮政编码 Jane,Doe,14222

源系统 B 可能具有相同客户端的记录,如下所示:

名字,姓氏,邮政编码 Jane,Doe,未知

如果我首先从系统 A 导入记录,我将拥有名字、姓氏和种族。伟大的。现在,如果我从系统B导入客户记录,我可以做模糊匹配识别这是同一个人,并使用渐变维度工具更新信息。但在这种情况下,我会丢失邮政编码,因为“未知”会覆盖有效数据。

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

感谢您的任何建议!

4

1 回答 1

0

以我的经验,内置的 SCD 工具不够灵活,无法满足这一要求。

几个MERGE语句或一系列UPDATEandINSERT语句可能会给您最大的逻辑和性能灵活性。

可能有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);
于 2016-11-18T00:08:50.067 回答