2010-06-05 97 views
0

我需要加载从EDW表尺寸(它维护历史记录),类型为键 - 值参数。SSIS查找与查找组件Vs的脚本组件

我的情况是确定的,如果通过转动它作为

键1和键2的组合获得了创纪录的EDW如下

Key1 Key2 Code  Value  EffectiveDate   EndDate  CurrentFlag 
100 555  01  AAA  2010-01-01 11.00.00  9999-12-31   Y 
100 555  02  BBB  2010-01-01 11.00.00  9999-12-31   Y 

这需要加载到DM使DM的自然键

SK NK  01  02  EffectiveDate  EndDate  CurrentFlag 
1 100-555 AAA BBB  2010-01-01 11.00.00 9999-12-31  Y 

我的SSIS包,这一切良好旋转......在昏暗的仰视传入NK ..如果新会插入其他..进一步查找有效的日期,如果incomin确定g为相同的自然键获得属性中的任何新(更改)。如果更新当前记录byy设置其结束日期,并插入新的属性值,并拉动最近的记录值的其他属性。

我的问题是,如果同一个自然键与单一提取物我的第一查找相同的属性,其自然键..让这两个记录和传递尝试插入..其中的失败来两次。如果我在NK上得到不同的记录,那么第二个没有被选中,需要再次运行包。

所以我的问题如何配置lookup或alernative方式来处理这种情况,当相同的NK在单一提取中出现两次时,将能够插入第一个记录,如果不存在Dim表中,第二个应该能够更新参照上面插入的内容进行修改。

不知道这是有道理的,试图解释。将附上屏幕截图回到办公桌(星期一)。

感谢

回答

0

查找不利于这一点 - 与缓存和一切,它只是无法查找在它先前设定的值。

你可能会更好它传递到SQL命令的任务,并具有一个存储过程执行插入或到期/取决于它所发现的插入。

你也可以将它们流式传输到一个表,并做一个批次。

为了解决您的流量,它试图填充模式:

首先,它总是尴尬当输入行的顺序导致行为上的差异 - 即NK = A,缬氨酸= 1,则NK = A,Val = 2给出与NK = A不同的行为,Val = 2然后NK = A,Val = 1。人们不得不怀疑这是否是正确的尺寸设计。请记住,所有维度属性都是基于实用选择分配给维度表的。最终尺寸可以随意排列成表格 - 所以不同的设计可能会更有意义。如果事情在一次加载中发生变化,那可能表明您需要分解该加载以匹配谷物(而不是试图一次加载2天的数据)。

我注意到有一个生效日期,并在你的尺寸的结束日期。现在这听起来很像维度行为的属性(你的01和02代码在NK上正在改变),而不是这个维度将被附加到的事实。这可能表明它需要在单独的非事实性事实表中进行跟踪,例如(SK,EffectiveDate,EndDate) - 或者它并不重要,因为所有您关心的都是NK,01,02组合,在这种情况下,你的自然钥匙实际上都是NK,01,02。

我建议回到您的事实表,传入的提要和预期用法,并更仔细地查看它,看看这可能是否需要成为一个单独的非事实型表格来跟踪这些尺寸更改。另外,如果你可以发布更多的细节,这可能会有所帮助,而且当我看到更多的业务案例时,我会看到Kimball的材料必须对此进行评论。

+0

谢谢凯德,这很有道理。如果我的方法是加入两个数据源,则通过旋转并通过脚本组件传递它们以通过将其他新的传入属性值 =>转储到暂存表中并与实际昏暗合并来计算源记录。这是使用Script组件的性能命中,这是场景。 – Sreedhar 2010-06-06 01:46:02

+1

@Nev_Rahd任何在逐行基础上完成的事情都会比数据库更慢。我认为你真的需要看看你的模型。我已经添加了一些材料。该模型应该与饲料相匹配,以至于如何模拟数据应该反映数据如何随着时间的推移而在子代码中“摆动”。我认为这不仅仅是一个ETL问题,而是一个建模问题,因为我不认为当你查询与这个维度有关的事实表时,你将使用生效日期和结束日期,因为它们与代码分配相关而不是(当前)事实。 – 2010-06-06 02:51:29

+1

@Nev_Rahd因为将要分配给这些维度的Feed中的事实由SK物理分配给维度,所以在查询数据库时生效日期无关紧要。 – 2010-06-06 02:53:14

0

凯德的评论是现货 - 但我相信你的主要问题是重复的时期。在“源”流中有两个相同NK的版本是否表示两个单独的有意义的版本?还是只有“最后”版本有关系?

如果两个版本中反映的更改都应该反映在您的维度表中,那么我会回应Cade的建议,将您的处理分为多个批次。你可以通过NK(以及更改时间)对输入进行排序,然后使用行计数脚本来枚举每个NK的“版本”,然后按版本号处理“批次”。

如果只有最后一个“版本”需要合并到维度表中,我建议您在使用查找之前消除重复项。