渐变维度入门.

有一张内容提供商表. 如图, 需要做维度渐变.  渐变列这里做了简化, 只有Cpname.

image

维度表如下

image

多了三列, 维度开始时间, 结束时间, 以及是否是当前值.

渐变的设置如下.

1..image  2..image

在这里我们强调一下图2的几列意思.  固定的属性, 用的比较少, 不做解释. 变化的属性就是, 假设有某行记录该列发生了改变, 那么就执行一条sql语句

update  table  set 变化的属性=new Value where 业务键  更改该行.

而与此同时, 渐变维度工具栏会为这行数据做一个历史记录, 于是, 执行另一条sql语句.

update table set 新旧标示列=旧 where 业务键

3..image 4…image

在这里, 我们希望能保留变化的属性的历史值, 因此没有打上勾勾. 我们的标示该行记录的是否最新通过DimEndTIme和IsCurrent来标识.

5..image

现在我们在OdsCP表中插入如下一条记录.

declare @dt datetime = dateadd(day,-1, getdate())
insert into OdsCP select NEWID(),'中国联通',@dt,@dt,@dt

image

运行我们的ssis包, 发现DimCP表同步过来了OdsCp表的最新记录

image

DimStartTime是刚刚插入的时间. 而业务增加时间故意写成了昨天, 因为ssis包是取的昨天的数据.

OK. 我们来看看修改这条记录看看

update OdsCP set CPName='中国联通垃圾' , UpdateTime=dateadd(day,-1, getdate())

where CPID='0A7AB0A1-9CAA-4E11-9931-D0DA0CAB77FB'

image

运行Dim包.

得到image

我们看到. Cpname果然被修改了. 但是我们期待的历史记录却没有产生. 这是为什么呢?

原来是, image我们在上面只更新了Cpname, CPname是 变化的类型. 而没有历史属性的更改. 因此, 维度渐变就只简单的做了一下update. 执行图如下

image

OK. 我们重新执行一次

update OdsCP set CPName='中国联通不垃圾' , UpdateTime=dateadd(day,-1, getdate())
,CreationTime=dateadd(day,-1, getdate())
where CPID='A3876677-CA0A-427A-B7B4-9BD99103B1AB'

image

注意观察. CpName, 和CreationTime都改了. 这次, 变化的属性和需要保存历史的属性都有了. 按照逻辑, 会走上图的右边, 先用Oledb命令更改每一列的的历史属性, 然后union All, 再然后插入数据库.

image

得到一条心的记录. 这样. 历史数据保留了下来. 这就是渐变维度的处理全过程

原文地址:https://www.cnblogs.com/jianjialin/p/2544432.html