2010-04-29 49 views
0

我需要用12個查找填充FactTable以獲得SK,其中6個用於不同的Dim表,其餘6個用於查找相同的DimTable(類型II)查找到相同的自然鍵。用於SK查詢的加載事實表+查找/ UnionAll

例:

PrimeObjectID =>查找到DimObject.ObjectID => GET ObjectSK

,並得到其他列該做相同的

OtherObjectID1 =>查找到DimObject.ObjectID => GET ObjectSK

OtherObjectID2 =>查找DimObject.ObjectID => get ObjectSK

OtherObjectID3 =>查找DimObject。對象ID => GET ObjectSK

OtherObjectID4 =>查找到DimObject.ObjectID => GET ObjectSK

OtherObjectID5 =>查找到DimObject.ObjectID => GET ObjectSK

這樣多個查找應如何去我SSIS包。

現在我正在使用lookup/unionall foreach lookup。有沒有更好的方法來解決這個問題。

回答

1

我假設你正在做的是查找,錯誤重定向到派生列以設置失敗查找的默認值,然後爲每個查找/派生列值添加聯合。這種模式相當普遍,我在早期階段使用它來幫助調試。但是,由於union是一個部分阻塞的組件(即Union All在執行時會創建一個新的緩衝區,但隨後會在數據通過時立即傳遞),這會降低SSIS的整體效率,這是由於在您的數據流中創建新緩衝區的開銷。通常,我將編寫一系列查找以忽略錯誤,然後在最後一個之後,我將包含一個派生列組件,該派生列組件將替換爲作爲查找目標包含的所有列的默認值。這可以通過數據流實現最高效的數據流。有關哪些數據流組件阻塞或半阻塞的更多信息,請參閱此帖:http://sqlblog.com/blogs/jorg_klein/archive/2008/02/12/ssis-lookup-transformation-is-case-sensitive.aspx

0

我不明白你爲什麼要做每個維度的2次查找。

通常我們首先處理所有維度(使用TableDifference組件來推斷/過期維度)。

然後加載事實表,使用業務鍵在每個維度(串聯)上執行一次查找以找到代理鍵。