2014-11-04 63 views
0

我正在開發一個SSIS項目來構建一個數據倉庫。在緩慢維度更新期間更新計算派生列的最佳方式是什麼?

這是我的簡單的SSIS過程,用於加載維度表(位置)。 位置表包含基於嵌套集的父/子結構(LEFT,RIGHT,LEVEL字段)。 因此,插入過程工作以及更新過程。

enter image description here

然而,我需要爲了存儲父關係填補計算列(PARENT_ID)。 因此,我需要在SQL語句中使用(LEFT,RIGHT和LEVEL列)來查找PARENT_ID值。

這是源表的表結構: enter image description here

那麼,什麼是在加載過程來填充我的PARENT_ID欄的最好方法? 我應該爲這個過程建立一個專門的數據流嗎?

我可以在派生列組件中使用SQL語句來查找parent_id值嗎?

編輯:這是我的SQL查詢來更新我的父/子結構(parent_id字段)。

UPDATE 
    L1 
    SET L1.[PARENT_ID] = (
    SELECT TOP 1 L2.ID 
      FROM [DW].[DimLocation] L2 
      WHERE L2.[TREE_LEFT_VALUE] < L1.[TREE_LEFT_VALUE] AND L2.[TREE_RIGHT_VALUE] > L1.[TREE_RIGHT_VALUE]  
      ORDER BY L2.[TREE_RIGHT_VALUE]-L1.[TREE_RIGHT_VALUE] ASC) 
FROM [DW].[DimLocation] L1 
WHERE [TREE_LEFT_VALUE] > 1 

編輯2:這裏是一個圖來表示一組嵌套的結構,以及如何表示它在數據庫中。 enter image description here enter image description here

因此,每個節點包含分別結合他們的childs TREE_LEFT_VALUE/TREE_RIGHT_VALUETREE_LEFT_VALUETREE_RIGHT_VALUE值。

它可以在一個簡單的查詢中查找指定節點的所有子節點。例如,如果我想的「根1」節點的所有孩子,我需要查詢所有節點,其中TREE_LEFT_VALUE比5

因爲我需要在我的數據倉庫的使用PARENT_ID結構(SSAS項目少超過2 TREE_RIGHT_VALUE構建一個OLAP多維數據集),我需要通過添加父節點ID來更新PARENT_ID字段。所以,我需要通過使用TREE_LEFT_VALUETREE_RIGHT_VALUE字段來查詢父節點ID,然後在更新語句中使用結果。

它工作正常,但有沒有更有效的方法來做到這一點?

感謝,

回答

2

如果列可以爲空,我要和你的數據流經過SQL任務更新。這將確保在嘗試查找parentid之前插入所有可能的父行,同時它將保持基於此過程的設置,而不是嘗試在數據流任務中執行查找。

+0

我添加了我的SQL查詢來更新parent_id字段。它工作正常,但有沒有更有效的方法來做到這一點? – K4timini 2014-11-05 14:20:38

+0

我不確定我是否足夠理解表格結構來回答這個問題。理想情況下,你不會有一個子查詢來獲取每行的值。這肯定會減慢速度。如果您提供表結構並解釋記錄如何更明確地相互關聯,那將會有所幫助。即我不知道什麼Tree_left_value意味着什麼。 – 2014-11-05 14:34:52

+0

我希望我的第二次編輯能幫助你理解我的問題。 – K4timini 2014-11-05 15:36:03

相關問題