用SSIS 2005向导处理渐变维度(下)

日期: 2009-07-06 作者:Baya Pavliashvili翻译:冯昀晖 来源:TechTarget中国 英文

  例如:在图一(渐变维列)中,屏幕截图显示AccountDescription列被设置为变化型属性,AccountType列是历史型属性,Operator是不变属性。   图1,变化类型:不变属性,变化型属性,历史型属性。   在图2(历史型选项)中,你可以配置你的实现细节。你可以让SSIS包在检测到不变属性变化时执行失败;而且你可以在检测到变化型记录被修改时,修改所有匹配的记录,包括过期记录。

大家可以看看我以前对第一个选项的讨论。   第二个选项对那些会有重复值,重复跨多个维度成员的属性比较有用。例如:同一个账户类型被应用到多个账户,如果账户类型从“负债”变成了“流动负债”,你可能想对所有……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

  例如:在图一(渐变维列)中,屏幕截图显示AccountDescription列被设置为变化型属性,AccountType列是历史型属性,Operator是不变属性。

  图1,变化类型:不变属性,变化型属性,历史型属性。

  在图2(历史型选项)中,你可以配置你的实现细节。你可以让SSIS包在检测到不变属性变化时执行失败;而且你可以在检测到变化型记录被修改时,修改所有匹配的记录,包括过期记录。大家可以看看我以前对第一个选项的讨论。

  第二个选项对那些会有重复值,重复跨多个维度成员的属性比较有用。例如:同一个账户类型被应用到多个账户,如果账户类型从“负债”变成了“流动负债”,你可能想对所有此类型账户应用这一变更。

  接下来,向导会提示你选择识别当前记录和过期记录的方式。有两个选项供你选择:把记录标识为过期(或废弃,超期或者你选择的其他形容词);或者通过给该条记录添加过期日期来表示本记录是过期记录。如果你选择了后者,你可以使用SSIS的一个全局变量来判断更新过期维记录的日期和时间值。我更喜欢使用标志当前记录的方式,所有其他记录可以认为是过期的。当然,你可以从多个选项中选择。

  图2,配置你的实现细节。

  图3所示界面(数据流任务)允许你配置对自动推断维成员的支持。自动推断成员在你加载一条记录给实际表时就创建了,它没有相应的维记录。为了分析正确,每一个实际表记录必须与维度表中的一条记录相关联。

  在数据仓库中有多种途径做到这一点。SCD向导允许你创建一个新的自动推断成员记录,其中所有维属性设置为Null。在你的维度表里设置一个“未知”成员(可能是让代理键等于-999,或者另一个特殊的不在正常范围内的值)常常很有用,省得创建自动推断成员。在本例中我们只关注Type1类型的SCD和Type2类型的SCD,并且不关注自动推断成员。所以我们取消默认选中,然后点击下一步。

  这就是向导为找出维护SCD要求的整个数据流需要的所有信息。你可以从下面的屏幕截图中看到,向导替你做了大量的工作。

  图3,使用数据流任务配置对自动推断维成员的支持。

  你可以定制向导生成的数据流来满足应用程序的需要。但是,首先我们要检查最新创建的转换组件:如果AccountType 得值被改变了,OLEDB命令转换器就更新“record_expired(过期记录)”属性。如果数据源的值变了,SSIS会创建新纪录,这样Union All转换组件会把这条记录和原来存在的数据源记录联合起来。OLEDB命令1转换组件会用类似下面的SQL命令来更新AccountDescription的值——基于业务键AccountCodeAlternateKey的变化属性。

  UPDATE [dbo].[DimAccount] SET [AccountDescription] = ?

  WHERE [AccountCodeAlternateKey] = ?

  最后,插入目标转换组件会填入目标表DimAccount。

  现在,我们在事务数据库中更新几个成员,然后运行包看看SCD向导维护变化维度是否正确。事实上,我们可以确认在把属性值AccountType得值从“assets”改为“wonderful assets”时,触发了在Account维创建新记录,并把新创建的记录标记为当前记录:

  另一方面,AccountDescription列的变化不创建新行——它们只是简单地覆盖原来的值。

  就像我在本文一开始就提到的,在你的数据仓库里有一些维护渐变维度(SCD)其他方法不能通过向导使用。然而,通过在SSIS中点击几下,就实现Type1和Type2渐变维度的能力肯定能加快ETL开发的速度。

相关推荐