0

我需要从 EDW 表(确实维护历史记录)加载维度,并且是键值参数类型。

如果在 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

这需要通过将其旋转为

key1 和 key2 组合使 DM 成为自然键

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

我的 ssis 包做了这一切很好的旋转...在 DIM 中查找传入的 NK .. 如果新的将插入 .. 否则进一步查找有效日期并确定相同自然键的传入是否有任何新的(更改)属性.. 如果是这样,则通过设置其结束日期来更新当前记录,并插入具有新属性值的新记录并提取其他属性的最近记录值。

我的问题是,如果相同的自然键在一次提取中具有相同的属性两次,我的第一次查找在自然键上.. 将让两个记录都通过并尝试插入.. 它失败的地方。如果我在 NK 上获得不同的记录,则第二个不会被选中,需要再次运行包。

所以我的问题是,当相同的 NK 在单次提取中出现两次时,我如何配置查找或替代方法来处理这种情况,如果 Dim 表中不存在,则能够插入第一条记录,第二条记录应该能够使用更改进行更新参考上面插入的一个。

不确定这是否有意义。将截图附上一次回到办公桌(周一)。

谢谢

4

2 回答 2

0

查找对此不好 - 使用缓存和所有内容,它只是无法查找之前设置的值。

您最好将其传递给 SQL 命令任务并让存储过程根据它找到的内容执行插入或过期/插入。

您还可以将它们流式传输到表格并分批进行。

为了解决您的流程和它试图填充的模型:

首先,当输入中的行顺序导致行为差异时总是很尴尬 - 即 NK = A,Val = 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 的材料对此有何评论。

于 2010-06-05T17:19:10.550 回答
0

凯德的评论是正确的 - 但我相信你的主要问题是重复,时期。您在“源”流中具有相同 NK 的两个版本这一事实是否表明两个独立的、有意义的版本?还是只有“最后一个”版本才重要?

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

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

于 2010-06-07T23:52:14.347 回答