这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。 我也要与时俱进了,被itpub2.0牵着尾巴,拼命的奔跑,不停的灌水...

【原】关于数据仓库 —lookup表的一点看法

上一篇 / 下一篇  2008-02-22 23:00:20 / 个人分类:数据仓库专区

对于搞数据仓库的人来说,面试的时候总会问及到lookup表的概念。。。。。。
5E\G~v9ak1T6vk0

对于搞数据仓库的人来说,面试的时候总会问及到lookup表的概念,这个概念一开始对我而言也是很莫名其妙的;明明基础表和事实表的一个关联就可以完成的事情需要什么lookup表。

通常的做法

SELECT A.ID,SUM(Measure1) as Measure1,SUM(Measure2) as Measure2FROM table_original A,table_dimension B
V[ tj!Ku!r,`&|0WHERE A.ID = B.ID
dV~(lOY)y0ITPUB个人空间#?K6dw8P$mp%v

为了严谨起见,我们的处理最多是加以NULL值或者未匹配键值的处理

SELECT -- A.ID,B.ID, -- the transformed field names IDITPUB个人空间,E"FT+tJ(h5GT
DECODE(NVL(A.ID,-2),-2,-2, DECODE(NVL(B.ID,-1),-1,-1,B.ID)) AS ID,
%Q k)ae#f%U BI0SUM(CASE A.Measure1>0 AND A.Measure1<100 THEN Measure1 ELSE 0 ENDITPUB个人空间#bx9e&a;r*B| l
) Measure1,
*eYNTF h/i0~E}q0SUM(CASE A.Measure2>0 AND A.Measure2<100 THEN Measure2 ELSE 0 ENDITPUB个人空间PN/} Q V6U
) Measure2,
+~'s;Tm1@d0N0]0FROM table_original A,table_dimension BITPUB个人空间 P/M[#t8EV q
WHERE A.ID = B.ID(+)
jg~$WU.]0GROUP BY DECODE(NVL(B.ID,-2),-2,-2, DECODE(NVL(B.ID,-1),-1,-1,B.ID))

Slowly change dimenstion

但是对于老外来说,为了严谨起见,把维度做为历史处理的轨迹进行保存,主要是全记录处理方式其中包括版本号方式、时戳方式、标志方式(具体处理方式参看数据仓库系列文章);所以必须增加一个代理主键,以记录和替代原来不断变化的内容,从而保存原主键信息的变化轨迹。主键的变化导致与原事实表关联过程中的脱节,必须使用新的外键代理原来的外键值。同时主键的变化导致在与事实表关联过程的变化,当然我们也可以使用复杂的视图和函数方式寻找到相应的外键值;但是对于老外来说宁愿用最简单的方式,图形化的操作和最直观的方式进行处理,毕竟数据库、数据仓库、ETL图形工具全部都是由老外发明的。实现的原理其实很简单:

Slowly change dimenstion

原理
K&s m w(e7RQR0
5L5@2R5EB#gsZX&i0

SQLServer2005 SSIS实现的一个实例ITPUB个人空间2zO9{"Oe7H
Slowly change dimenstionITPUB个人空间$YJ4dh!x7[:?


TAG:

引用 删除 lioulb   /   2008-04-21 15:22:33
还是没太明白,有些空洞。
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 22243
  • 日志数: 65
  • 建立时间: 2007-12-07
  • 更新时间: 2008-08-31

RSS订阅

Open Toolbar