0

我必须用 12 次查找维度表来填充 FactTable 以获得 SK,其中 6 次查找不同的 Dim 表,其余 6 次查找相同的 DimTable(类型 II),查找相同的自然键。

前任:

PrimeObjectID => 查找 DimObject.ObjectID => 获取 ObjectSK

并得到了其他相同的列

OtherObjectID1 => 查找 DimObject.ObjectID => 获取 ObjectSK

OtherObjectID2 => 查找 DimObject.ObjectID => 获取 ObjectSK

OtherObjectID3 => 查找 DimObject.ObjectID => 获取 ObjectSK

OtherObjectID4 => 查找 DimObject.ObjectID => 获取 ObjectSK

OtherObjectID5 => 查找 DimObject.ObjectID => 获取 ObjectSK

对于这样的多重查找,我的 SSIS 包中应该如何进行。

现在我正在使用查找 / unionall foreach 查找。有没有更好的方法。

4

2 回答 2

1

我假设您正在做的是查找,将错误重定向到派生列以设置失败查找的默认值,然后是每个查找/派生列值的联合。这种模式相当普遍,我在早期使用它来帮助调试。然而,由于 union all 在 SSIS 中是一个部分阻塞的组件(即 Union All 在执行时会创建一个新缓冲区,但一旦数据进入就会传递数据),这将降低包的整体效率,因为在数据流中创建新缓冲区的开销。通常,我将对一系列查找进行编码以忽略错误,然后在最后一个之后,我将包含一个派生列组件,该组件对作为查找目标包含的所有列进行默认替换。这允许最有效的数据流通过您的数据流。有关哪些数据流组件正在阻塞或半阻塞的更多信息,请参阅这篇文章:http://sqlblog.com/blogs/jorg_klein/archive/2008/02/12/ssis-lookup-transformation-is-case-sensitive.aspx

于 2010-04-29T11:20:56.320 回答
0

我不明白您为什么要对每个维度进行 2 次查找。

通常我们首先处理所有维度(使用 TableDifference 组件来推断/过期维度)。

然后加载事实表,使用业务键对每个维度(按顺序)进行一次查找以找到代理键。

于 2010-04-29T05:57:57.293 回答