zoukankan      html  css  js  c++  java
  • 渐变维度入门.

    有一张内容提供商表. 如图, 需要做维度渐变.  渐变列这里做了简化, 只有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

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

  • 相关阅读:
    守护进程的创建(syslog函数)
    进程控制fork vfork,父子进程,vfork保证子进程先运行
    进程概述,父子进程
    gdb调试分析多线程死锁
    tcp握手
    实现自己的ls命令
    获取当前目录getcwd,设置工作目录chdir,获取目录信息
    目录的创建,删除,获取当前目录
    文件的移动,删除 rename remove unlink 函数
    sendkeys
  • 原文地址:https://www.cnblogs.com/jianjialin/p/2544432.html
Copyright © 2011-2022 走看看