专注于中国的商业智能

导航

IntegrationService学习--数据流转换组件3

(非常抱歉,上次写文章的时候,有点粗心大意了,没有经过详细测试,以下第一种方法是有问题的,但是思想是对的,可以换成脚本组件的方式来实现,先使用脚本查找维度表,如果不存在则插入一条维度数据,返回插入的维度代理键;如果存在,则直接返回维度代理键)

好久没有写文章了,人有些变懒了,最近除了用Sqlserver2005BI平台在做一个大型项目外,空闲时间也研究了一下另外一个非常优秀的开源的BI平台,是pentaho,研究BI的朋友可以去看看这个东东,免费的东西还是很多公司用的,功能也不弱。

接下来我们今天要用ssis解决一个ETL里面经常会碰到的维度问题。就是在导入事实表的时候,查找事实表中的某个维度的代理键的时候(比如我前几篇文章中的时间维度),假如维度表中不存在该键值,那么就会出错。现在我们的要求是假如发现维度表没有该记录,我们要不出错,先往维度表里面把该记录插入进去,然后再查找该维度的代理建,这样就肯定可以找到了。

以下是数据流的图片

首先我们把日期传过来到达“查找TradeDatekey”这个组件,如果发现日期维度表没有该记录,就把错误重定向到转换日期字段组件上,在这个脚本组件里面,会把日期分解成日期维度表里面的每个字段,比如年,月,日,周等,然后用渐变维度插入到日期维度表中。(这个步骤需要配置“查找TradeDatekey”这个组件的错误重定向)

接下来在"查找TradeDatekey1"组件里面重新查找一遍这个组件,那么肯定可以查到了。

另外维度处理还有另外一种常见的处理,在导入事实表的时候发现该维度不存在,那么就把事实表中该维度的键值设置-1,那么下面我也给出设置的办法。

在查找维度键的组件中要把错误配置为忽略,然后进入下面的设置,这样如果维度查找不到,查找的维度代理键将会是NULL

加入一个派生列,设置派生列的属性

在表达式里面加上判断"ISNULL(TradeDateKey) ==  TRUE  ? -1 : TradeDateKey"然后覆盖你要查找的维度的键就可以了。

好了,今天查找维度的两种基本方式已经介绍完了。

posted on 2008-10-29 13:25  李梦蛟  阅读(2141)  评论(7编辑  收藏  举报