SSIS:数据仓库中实现Slowly Changing Dimension缓慢渐变维度的三种方式

关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

本篇文章总结了实现缓慢渐变维度的几种方式,并且分析了 Changing Attribute 和 Historical Attribute 输出的逻辑过程。

示例一:SSIS 中使用 Slowly Changing Dimension 控件

示例二:使用 SQL 中 Merge 语句实现简单的 SCD 效果

示例三:在 SSIS 中使用 Lookup, Conditional Split, Multicast 等控件实现 SCD 效果

测试表以及测试数据,其中 Customer 是数据源表,DimCustomer 模拟的是数据仓库中的 Customer 维度表。

每个示例都是从空表开始,第一次运行的时候 Dimension 表没有数据,第二次运行之前将添加几条 数据到 Customer 数据源表中,并同时修改若干数据。

但是要注意这个示例对数据源数据的加载是全部加载,而不考虑基于数据源数据的增量加载,关于增 量加载的实现会放在 BI 系列的其它文章中讲解。

USE BIWORK_SSIS
GO

IF OBJECT_ID('Customer') IS NOT NULL
DROP TABLE Customer
GO

IF OBJECT_ID('DimCustomer') IS NOT NULL
DROP TABLE DimCustomer
GO

CREATE TABLE Customer
(
    ID INT PRIMARY KEY IDENTITY(1,1),
    FullName NVARCHAR(50),
    City NVARCHAR(50),
    Occupation NVARCHAR(50)
)

CREATE TABLE DimCustomer
(
    CustomerID INT PRIMARY KEY IDENTITY(1,1),
    CustomerAlternateKey INT,
    FullName NVARCHAR(50),
    City NVARCHAR(50),
    Occupation NVARCHAR(50),
    StartDate DATETIME,
    EndDate DATETIME,
    IsCurrent BIT DEFAULT(1)
)

INSERT INTO BIWORK_SSIS.dbo.Customer VALUES
('BIWORK','Beijing','IT'),
('ZhangSan','Shanghai','Education'),
('Lisi','Guangzhou','Student')

示例一  SSIS 中的 Slowly Changing Dimension

新建一个 Package 并拖放一个 Data Flow,在 Data Flow 中建立好与 Customer 表的数据源连接, 新建 Slowly Changing Dimension SCD_DimCustomer。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 数据仓库
, ssis
, 数据源
, 维度
, nvarchar
示例
缓慢渐变维度、dimension w 维度战记、缓慢变化维度、缓慢变更维度、渐变维度,以便于您获取更多的相关知识。

时间: 2024-10-03 06:54:00

SSIS:数据仓库中实现Slowly Changing Dimension缓慢渐变维度的三种方式的相关文章

数据仓库系列:缓慢渐变维度常见的三种类型及原型设计

在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据仓库中,哪些数据应该随之变化,哪些可以不用变化?考虑到这些变化,在数据仓库中的维度表又应该如何设计以满足这些需要. 很显然在业务数据库中数据的变化是非常自然和正常的,比如顾客的联系方式,手机号码等信息可能随着顾客的所在地的更改发生变化,比如商品的价格在不同时期有上涨和下降的变化.那么在业务数据库中,

Asp.net mvc 2中使用Ajax的三种方式

在Asp.net MVC中,我们能非常方便的使用Ajax.这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用.Jquery.Ajax Helper.分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板. 首先看一下原始的Ajax的调用的 定义CommentController,代码如下: public class CommentController : Controller { private IList<string> _comments = new List

WPF中实现PropertyGrid的三种方式

由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章 介绍在WPF中实现PropertyGrid的三种方式,三种方式都是俺平时使用时总结出 来的. 第一种方式:使用WindowsForm的PropertyGrid控件. 用过WPF的童鞋都晓得,可以通过WindowsFormsHost将WindowsForm的控件宿 主到WPF中使用.很简单,分为简单的3步. 第一步:引用dll:在WPF应用程序中引入System.Windows.Forms.dll. 第二步:引用命

C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法

  这篇文章主要介绍了C#..Net中把字符串(String)格式转换为DateTime类型的三种方法,本文总结了Convert.ToDateTime(string).Convert.ToDateTime(string, IFormatProvider).DateTime.ParseExact()三种方法,需要的朋友可以参考下 方式一:Convert.ToDateTime(string) 代码如下: Convert.ToDateTime(string) 注意:string格式有要求,必须是yyy

探讨JavaScript中声明全局变量三种方式的异同

     这篇文章主要介绍了JavaScript中声明全局变量三种方式的异同.变量及变量声明是一门语言最基本的概念,初学者都会很快掌握.需要的朋友可以过来参考下,希望对大家有所帮助 变量及变量声明是一门语言最基本的概念,初学者都会很快掌握.JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符).   方式1   var test; var test = 5;需注意的是该句不能包含在function内,否则是局部变量.这是第一种方式声明全局变量.   方式2   test

JS中创建函数的三种方式及区别_基础知识

1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2; }; 两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问:而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行. 自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,

iOS开发中UIWebView的加载本地数据的三种方式_IOS

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): UIWebView加载内容的三种方式: 1 加载本地数据文件 指定文件的MIMEType 编码格式使用@"UTF-8" 2加载html字符串(可以加载全部或者部分html

iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)_IOS

在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式 方式一: 全局通知 1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textV

JS中用三种方式实现导航菜单中的二级下拉菜单_javascript技巧

我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片.那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style