2014-11-04 91 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

相关问题