使用SSIS维度合并SCD组件的推断成员问题

时间:2011-12-14 15:03:58

标签: ssis etl scd

我正在使用SSIS Dimension Merge SCD组件(http://dimensionmergescd.codeplex.com/),并且我的配置包含SCD1和SCD 2列。我有行设置了InferredMember标志但是组件插入了新行并且没有重置现有推断行的当前标志。

是否有其他人使用此组件,您是否看到它正常工作?我误会了吗?我的理解是SCD2列成为SCD1,其中InferredMember是真的,这是错误的吗?

在数据库中对业务键进行排序,并将排序列设置为匹配。 DMSCD组件的输出直接挂钩到OLE DB Command / OLE DB Destination组件。这是在生产中,并且每天都在正常工作数月。

这是来自运行的审核输出:

ExistingDimensionInputRowCount = 719941
SpecialMemberInputRowCount = 1
SourceSystemInputRowCount = 720516
UnchangedOutputRowCount = 719941
NewOutputRowCount = 720517
DeletedOutputRowCount = 0
SCD2ExpiredOutputRowCount = 0
SCD2NewOutputRowCount = 0
SCD1UpdatedOutputRowCount = 0
InvalidInputOutputRowCount = 0

2 个答案:

答案 0 :(得分:2)

您只有推断成员的问题?您正在使用CodePlex上发布的最新版本的组件吗?

听起来您的问题并不仅仅与推断成员相关,而是因为SCD2管家列(当前成员和日期列)未正确设置而可能发生。最常见的原因是输出没有像您期望的那样从DMSCD中获得,原因是由于以下原因之一:

  1. 您正在使用DMSCD之后的派生列组件更改日期,和/或不更新/插入DMSCD提供的日期信息。相反,您在派生列中使用硬编码或变量值,在表定义中使用默认值,或者未正确映射目标列。

  2. DMSCD输入的排序顺序不正确。您可能假设将OLE DB Source的输出上的IsSorted属性标记为true,并且设置列的各种SortKeyPosition属性就足够了 - 它不是。删除您所做的高级编辑,或在流程中使用排序组件(出于测试目的 - 我们稍后可以修复OLE DB源)。

答案 1 :(得分:0)

所以,回答我自己的问题,是的,我错了。仅InferredMember标志不会触发推断成员行为。

推断成员是在维度表中插入的骨架记录 - 通常是存储过程。 - 在事实表维护期间代理键查找失败时。 InferredMember标志通常触发维度加载过程以填充骨架推断成员记录中的其余字段。对于推断成员记录中的SCD2字段,它们将作为SCD1处理,不应生成新记录。

通过实验,我能够确定DMSCD组件要求推断成员骨架至少包括业务密钥,推断成员标志和过去的活动日期 - 我当时正在使用当前日期以便记录未被视为推断成员记录,它们被视为新记录,并且正在生成重复记录。

令人遗憾的是,我从来没有找到过调用与DMSCD兼容的推断成员记录规范的文档,因此可以通过为创建它们而开发的存储过程正确地形成推断成员记录。我还质疑无法标记推断的成员记录,其活动日期是当前日期。