在ETL过程中,对于渐变维度的处理,一直是大家比较关注的问题。关于渐变维度的概念,我们在2007年8月的“渐变维度转换及其实现”一文中有所介绍。本文将在实际应用的对比中,提供三种处理渐变维度的方法,并比较其效率。

      第一代:SSIS控件时代
      对于一些会在原业务系统中进行修改/添加维度,不需要记录记录历史属性的维度,我们通常会选择SSIS中控件“渐变维度”来完成这项工作。应对这种情况我们选用Type2。

Type2:变化的属性
说明:如果更改后的值应当覆盖现有值,则选择该类型。
解析:既需要更改又不用记录历史属性的类型。

选择好数据源,设置好“业务键”和“非键列”之后(如图1),我们再对需要进行更新的“非键列”设置“更改类型”即可,如图2。

 
图1

 
图2

之后SSIS会帮我们生成数据流。简单快捷,3分钟完成一张表格,如图3。

 
图3

      第二代:SQL语句时代
      但是,对于稍微大一些的数据量,源1万条,目标几万条的时候就会非常的慢。对于这种情况,我们可以采用自己手写渐变维度的方式完成。需要分为两部分——更新原有数据和添加新增数据。如表1、表2所示。


表1


表2

1、更新原有数据
使用控件“执行SQL任务”。直接实行SQL语句:

以下是代码片段:

Update Dim_Team set Team_DisplayName = ss. Team_DisplayName

, Sort_ID = ss. Sort_ID

From Dim_Team dim inner join SS_Team ss

On ss. Team_InternalName = dim. Team_InternalName

2、添加新增数据
使用控件“数据流任务”。数据源使用如下语句:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

from SS_Team

Where Team_InternalName not in (

select distinct Team_InternalName from Dim_Team )

然后将结果输入到Dim_Team即可。
插曲:有的表格业务建不止一个,并且not in的效率也不够高,所以采用not exists
则使用如下语句作为数据源:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID ,a

from SS_Team ss

Where not exists ( select distinct Team_InternalName

      第三代:Lookup时代
      虽然上述语句可以高效地完成渐变维度Type2的运行,但是在实际运行中,发现由于目标表被用在了数据源表中,导致数据流产生了死锁。
解决方法1:在目标表中去掉表锁。选择“数据访问模式”为“表或试图-快速加载”,将“检查约束”钩选去掉,如图4。

 
图4

解决方法2:利用lookup的错误输出,如图5。


图5

SS_Dimteam:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

from SS_Team

Lookup:

以下是代码片段:

__select distinct  Team_InternalName from Dim_Team

设置Lookup错误输出为重新定向,如图6。


图6

输入目标:Dim_Team
至此,完成了渐变维度Type2的“进化”。效率也提高了不少。

[原创]微软BI专题-渐变维度Type2进化三部曲相关推荐

  1. 数据仓库系列 - 缓慢渐变维度SCD (Slowly Changing Dimension) 常见的三种类型及原型设计

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是在第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓 ...

  2. 微软bi 架构 服务器,微软BI体系结构.

    <微软BI体系结构.>由会员分享,可在线阅读,更多相关<微软BI体系结构.(41页珍藏版)>请在人人文库网上搜索. 1.Data Warehouse Data Access 前 ...

  3. 【原创】BI解决方案选型之ETL数据整合工具对比

    [原创]BI解决方案选型之ETL数据整合工具对比 参考文章: (1)[原创]BI解决方案选型之ETL数据整合工具对比 (2)https://www.cnblogs.com/xiongnanbin/p/ ...

  4. 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug

    开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...

  5. 微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题

    微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题 参考文章: (1)微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题 ...

  6. BIDS Helper (Free)微软BI开发辅助工具--非常棒

    用了就知道,非常好,分享给微软BI开发的同仁们. /Files/sxfmol/BIDSHelper2005Setup.rar /Files/sxfmol/BIDSHelper2008Setup.rar ...

  7. 记忆的天空:智能进化三部曲

    作者:钟振余,宁波大学 相对于人工智能的快速发展,人类对于生命智能的理解显得很肤浅.由于缺失大脑活动原理的理论指导,人们只能用知识考试去评判一个人的智能,用相当于几岁孩子的智能去比对某些高级动物的智能 ...

  8. 进化三部曲,从互联网大脑发育看产业互联网的未来

    导言:从互联网的左右大脑发育看,产业互联网可以看做互联网的下半场,但从互联网大脑的长远发育看,互联网依然处于大脑尚未发育成熟的婴儿时期,未来还需要漫长的时间发育.参考互联网右大脑的发育历程,可以判断产 ...

  9. 为移动通信争一先:Massive MIMO的进化三部曲

    在围棋中,"先手"是一个十分重要的概念.谁先落子就具有颇大的优势,由此产生了"让先""执先"等概念,也引申出了"敢于争先" ...

最新文章

  1. 通知 | 2017年清华-青岛数据科学研究院“RONG”奖学金即将开放申请
  2. 韦东山虚拟机中arm-Linux-gcc的安装方法
  3. Git关于pull,commit,push的总结
  4. iOS开发-面试总结(十四)
  5. 如何通过调试找到自己需要的ABAP增强
  6. .Net5发布在即,当心技术断层!
  7. Numpy 之 copies and Views
  8. jenkins集成sonar
  9. java 方法详解_Java方法详解
  10. 深度学习笔记(二)——VGG
  11. 成人高考计算机专业,成人高考计算机类里的哪个专业好找工作?
  12. 【webpack】windows10 局部安装webpack,配置环境变量
  13. 大数据是什么,大数据的特点主要有哪些,应该怎么运用?
  14. 【RPA自动化|提升办公效率】无需代码的傻瓜式爬虫
  15. MySQL高级篇知识点——MySQL 事务日志
  16. USACO4.1 篱笆回路Fence Loops
  17. MEMC 是什么意思?
  18. 清分系统层即综合中央计算机,轨道交通AFC系统介绍
  19. 180512 tensorboard高维数据可视化
  20. 与东极岛和山东岛的相遇

热门文章

  1. 我的EOS 400D
  2. 24 solar terms隐私条款
  3. server2008服务器可以远程桌面连接,但是ping不通
  4. 南大通用GBase8s 常用SQL语句(289)
  5. 中国科学院计算机博士张弛,张驰(中国科学院地质与地球物理研究所副研究员)_百度百科...
  6. 张驰咨询:某齿轮有限公司首期六西格玛项目成功关闭
  7. [C/C++/C#] 系统策略禁止这个安装,请与系统管理员联系
  8. 把word文档转化成pdf文档
  9. 如何获取苹果设备UDID?
  10. ftp-serv文件服务软件下载