自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

數(shù)據(jù)庫(kù) SQL Server
和其他task不同,漸變維度轉(zhuǎn)換提供一個(gè)向?qū)гO(shè)置,通過(guò)問(wèn)答的方式來(lái)設(shè)置,類似于在計(jì)算機(jī)中安裝一個(gè)新的程序時(shí)使用的安裝向?qū)?。它是一個(gè)自動(dòng)化的task,提供了一種維護(hù)漸變維度或漸變表的方法。本文詳細(xì)介紹了這一過(guò)程,希望能對(duì)您有所幫助。

漸變維度(SCD)轉(zhuǎn)換提供了一種維護(hù)漸變維度或漸變表的方法,對(duì)漸變維度的分析處理是一個(gè)很大的話題。一般一個(gè)維度表通常包含一些描述其他信息的離散值,例如,價(jià)格,重量,銷售地區(qū)。問(wèn)題是如果隨著時(shí)間的推移這些信息改變我們將如何維護(hù)這個(gè)表,特別是在數(shù)據(jù)轉(zhuǎn)移的過(guò)程中。例如我們查看AdventureWorks中的product表,如圖1

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖1

通常在聯(lián)機(jī)事務(wù)處理(OLTP)數(shù)據(jù)庫(kù)中,我們會(huì)用一行的數(shù)據(jù)來(lái)保存產(chǎn)品信息。如果產(chǎn)品的售價(jià)從10美元上漲到15美元,我們直接更新StandardCost字段為15,這樣做完成了任務(wù):現(xiàn)在的售價(jià)是多少?但是丟失了歷史數(shù)據(jù),我們不知道漲價(jià)之前的價(jià)格是多少??jī)r(jià)格上漲了多少?解決這個(gè)問(wèn)題有三種基本的選擇,具體選擇哪一種要基于這個(gè)表的我們關(guān)注點(diǎn)和想要得到什么樣的結(jié)果,我們將這些基本的選擇簡(jiǎn)單地命名為類型1,類型2,類型3

類型1:重寫(xiě)歷史—通過(guò)使用新的產(chǎn)品價(jià)格來(lái)替換掉當(dāng)前的產(chǎn)品價(jià)格,當(dāng)然這樣會(huì)丟失歷史值。這個(gè)是最簡(jiǎn)單的做法。

類型2:保留歷史—添加一行新的完整的數(shù)據(jù),保留歷史數(shù)據(jù)行,當(dāng)然這樣會(huì)有一些副作用,這樣做使得這個(gè)表更加復(fù)雜,占用空間更大。

類型3:僅保存上一次歷史—添加額外的屬性,僅保存上一次歷史值,這樣我們只能看到產(chǎn)品價(jià)格變化中的兩次價(jià)格。這種方法不常用。

注意:類型3不能直接實(shí)現(xiàn),需要借助其他的task才能實(shí)現(xiàn)

和其他task不同,漸變維度轉(zhuǎn)換提供一個(gè)向?qū)гO(shè)置,通過(guò)問(wèn)答的方式來(lái)設(shè)置,類似于在計(jì)算機(jī)中安裝一個(gè)新的程序時(shí)使用的安裝向?qū)?。高?jí)設(shè)置提供更多的選擇,但是在我們完全掌握它之前***還是使用向?qū)гO(shè)置。雙擊維度轉(zhuǎn)換標(biāo)簽或者右擊選擇編輯都可以打開(kāi)向?qū)?。設(shè)置好之后將會(huì)產(chǎn)生一些更新和插入task來(lái)完成更新或插入的任務(wù)。圖2顯示的設(shè)置好之后的界面。可以看到這個(gè)task和其他的不同,它是由多個(gè)task組合而成的。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖2

漸變維度是一個(gè)自動(dòng)化的task,概括地說(shuō)漸變維度接收輸入數(shù)據(jù)和一個(gè)維度表數(shù)據(jù),通過(guò)配置信息產(chǎn)生至少兩個(gè)輸出,并且這些輸出總共有6種類型,***使用OLE DB命令來(lái)完成數(shù)據(jù)庫(kù)的更新,這6種可能的輸出數(shù)據(jù)流如下:

修改屬性更新輸出:這種輸出屬于類型1。在SCD中被選中作為可變項(xiàng)的屬性都會(huì)和輸入數(shù)據(jù)源做比較。如果匹配主鍵的兩行屬性值有差異,輸入數(shù)據(jù)將會(huì)從這個(gè)輸出流輸出。

歷史屬性插入輸出:這種屬性屬于類型2。在SCD中被選中作為可變項(xiàng)的屬性都會(huì)和輸入數(shù)據(jù)源做比較。如果匹配主鍵的兩行屬性值有差異,輸入數(shù)據(jù)將會(huì)從這個(gè)輸出流輸出。

固定輸出:在SCD中被選作固定的屬性都會(huì)和輸入的數(shù)據(jù)源做比較。如果匹配主鍵的兩行屬性值有差異,輸入數(shù)據(jù)將會(huì)從這個(gè)輸出流輸出。這種輸出流適用于類型3,但是必須自己編寫(xiě)sql語(yǔ)句。

推斷成員更新:在SCD的設(shè)置選中推斷成員的時(shí)候,將會(huì)有這個(gè)輸出流。如果需要將維度表轉(zhuǎn)到另外一個(gè)表中需要設(shè)置使用這個(gè)輸出流。這個(gè)輸出可能在后面的操作中添加到維度表中。

新輸出:這個(gè)和歷史輸出一樣都要合并到目標(biāo)表中。

不變的輸出:默認(rèn)沒(méi)有這個(gè)輸出。如果SCD發(fā)現(xiàn)輸入數(shù)據(jù)和維度表中的數(shù)據(jù)沒(méi)有差異,不會(huì)有任何操作。如果感興趣的話你可以為這個(gè)輸出建一個(gè)目標(biāo)表,查看其中的數(shù)據(jù)。

說(shuō)了這么一大堆,我們可以看看這些輸出到底在什么地方,如上圖2,左邊***個(gè)輸出是修改屬性更新輸出,中間那根線是新輸出,右邊那根線是歷史屬性插入輸出。

在我們這里我們拿比較熟悉的員工工資這個(gè)例子來(lái)做一個(gè)示例。每個(gè)工資周期都會(huì)有一些費(fèi)用被扣掉例如,個(gè)人所得稅,保險(xiǎn)稅,醫(yī)療保險(xiǎn)等等。為了模擬這些過(guò)程我們可能會(huì)新建一個(gè)表PayrollDeductItem類似于圖3。PayrollEventFact參照PayrollDeductItem來(lái)更新。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖3

現(xiàn)在假設(shè)一年的時(shí)間過(guò)去了,每個(gè)人的工資情況都會(huì)有些變動(dòng)。我們的任務(wù)是來(lái)更新PayrollDeductItem這個(gè)表。我們發(fā)現(xiàn)有些工資項(xiàng)減少了,有工資項(xiàng)增加了,如果有些工資項(xiàng)刪除了,則記為0。可以在啟用新的工資標(biāo)準(zhǔn)之前執(zhí)行一次更新,但是如果僅僅跟新這樣會(huì)丟失工資走向信息。在這種情形下我們使用漸變緯度來(lái)解決這個(gè)問(wèn)題,參照下面的步驟。

首先為了跟蹤歷史變更我們要新建一個(gè)表添加一些數(shù)據(jù)列。即使只有其中的一部分會(huì)在執(zhí)行這個(gè)任務(wù)的時(shí)候用得到,還是要添加所有可能會(huì)用到的數(shù)據(jù)列。使用下面的sql語(yǔ)句創(chuàng)建一個(gè)表并添加數(shù)據(jù):

  1. Use AdventureWorks  
  2.  
  3. GO  
  4.  
  5. CREATE TABLE [dbo].[PayrollDeductItem](  
  6.  
  7. [PayrollDeductItemID] [int] IDENTITY(1,1) NOT NULL,  
  8.  
  9. [EmployeePlanIDNbr] [varchar](50) NULL,  
  10.  
  11. [DeductionAmount] [money] NULL,  
  12.  
  13. [EmployeeID] [int] NULL,  
  14.  
  15. [PayDeductType] [char](10) NULL,  
  16.  
  17. [HistTextStatus] [char](10) NULL  
  18.  
  19. CONSTRAINT [DF_PDI_HistTxtStatus] DEFAULT ('CURRENT'),  
  20.  
  21. [HistBitStatus] [bit] NULL  
  22.  
  23. CONSTRAINT [DF_PDI_HistBitStatus] DEFAULT ('TRUE'),  
  24.  
  25. [HistStartDate] [smalldatetime] NULL,  
  26.  
  27. [HistEndDate] [smalldatetime] NULL,  
  28.  
  29. CONSTRAINT [PK_POLICY] PRIMARY KEY CLUSTERED  
  30.  
  31. (  
  32.  
  33. [PayrollDeductItemID] ASC  
  34.  
  35. ) ON [PRIMARY]  
  36.  
  37. ) ON [PRIMARY]  
  38.  
  39. GO  
  40.  
  41. INSERT INTO PAYROLLDEDUCTITEM(EmployeePlanIDNbr, DEDUCTIONAMOUNT, EMPLOYEEID,  
  42.  
  43. PAYDEDUCTTYPE, HISTSTARTDATE)  
  44.  
  45. SELECT '000000001', 200.00, 1, '401K', '01/01/2004'  
  46.  
  47. UNION  
  48.  
  49. SELECT 'ZZ0-10001', 10.00, 1, 'LIFE', '01/01/2004'  
  50.  
  51. UNION  
  52.  
  53. SELECT '000000002', 220.00, 2, '401K', '01/01/2004'  
  54.  
  55. UNION  
  56.  
  57. SELECT 'DC001-111', 10.00, 2, 'BUSPASS', '01/01/2004'  
  58.  
  59. UNION  
  60.  
  61. SELECT '000000003', 300.00, 3, '401K', '01/01/2004'  
  62.  
  63. UNION  
  64.  
  65. SELECT 'ZZ0-10003', 10.00, 3, 'LIFE', '01/01/2004'  
  66.  
  67. GO 

創(chuàng)建一個(gè)文本文件,使用下面的內(nèi)容作為工資變更信息:

  1. EMPLOYEEID,EMPLOYEEPLANIDNBR,DEDUCTIONAMOUNT,PAYDEDUCTTYPE,ENROLLDATE,COMMENT  
  2.  
  3. 1,000000001,225,401K,'01/01/05',INCREASED 401K DEDUCTION  
  4.  
  5. 1,ZZ0-10001,15,LIFE,'01/01/05',INCREASED LIFE DEDUCTION  
  6.  
  7. 2,000000002,220,401K,'01/01/05',NO CHANGE  
  8.  
  9. 2,DC001-111,0,BUSPASS,'01/01/05',TERMINATED BUSPASS DEDUCTION  
  10.  
  11. 3,000000003,250,401K,'01/01/05',DECREASED DEDUCTION  
  12.  
  13. 3,ZZ0-10003,10,LIFE,'01/01/05',NO CHANGE  
  14.  
  15. 4,000000004,175,401K, ‘01/01/05',NEW 401K DEDUCTION 

 #p#

創(chuàng)建一個(gè)package,命名為SlowChangingDemension。創(chuàng)建一個(gè)Data Flow Task點(diǎn)擊進(jìn)入Data Flow界面。在Data Flow界面內(nèi)下面的ConnectionManageers內(nèi)新建一個(gè)Flat File Connection連接上面的文本文件,選擇***行作為列名如圖4。在高級(jí)標(biāo)簽內(nèi)設(shè)置EmployeePlanNbr和PayDeductType兩個(gè)列的長(zhǎng)度是10,設(shè)置EmployeeID的類型是32-bit Integer [DT_I4],設(shè)置DeductionAmount的數(shù)據(jù)類型是currency[DT_CY],如圖5。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖4

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖5

使用上述連接添加一個(gè)Flat File DataSource

添加一個(gè)漸變緯度任務(wù),將Flat File DataSource和它連接起來(lái)

查看PayrollDeductItem表的內(nèi)容如圖6,你可能會(huì)奇怪為什么會(huì)有一些多余的字段例如HistTextStatus, HistBitStatus, HistStartDate, HistEndDate,在執(zhí)行task的時(shí)候并不是所有的字段都用得上,我們會(huì)根據(jù)不同的設(shè)置來(lái)使用不同的列。注意這個(gè)截圖是我執(zhí)行這個(gè)SCD之后的表,數(shù)據(jù)已經(jīng)被修改。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖6

初次打開(kāi)SCD的時(shí)候,設(shè)置向?qū)?huì)展開(kāi)四個(gè)設(shè)置步驟,這些步驟如下:

維度表和維度選擇步驟:這個(gè)步驟中設(shè)置維度表的位置,輸入數(shù)據(jù)和維度表中對(duì)應(yīng)字段,和使用那些字段作為主鍵以便一一對(duì)應(yīng)。那些需要對(duì)應(yīng)的字段將會(huì)被覆蓋或者更新,還需要設(shè)置那些字段作為主鍵字段,以便對(duì)應(yīng)。雙擊打開(kāi)Slow Changing Demension進(jìn)入向?qū)гO(shè)置界面,點(diǎn)擊下一步進(jìn)入Select a Dimension and Keys界面,首先選擇數(shù)據(jù)庫(kù)AdventureWorks和這個(gè)數(shù)據(jù)庫(kù)下的表PayrollDeductItem作為Dimension Table,Imcoming columns這一列中的數(shù)據(jù)一部分被作為Business key來(lái)匹配Dimension Columns中的對(duì)應(yīng)列,剩下的作為更新數(shù)據(jù)源,這里EmployeePlanIDNbr,EmployeeID兩列作為Business key,剩下的兩列默認(rèn)Not a key column。這里注意到必須選擇一列作為Business key才能進(jìn)入下一步設(shè)置。設(shè)置好的界面如圖7

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖7

漸變維度設(shè)置步驟:這個(gè)步驟只關(guān)心在***個(gè)步驟中未被設(shè)置為主鍵字段的的那些字段。在這個(gè)步驟中將設(shè)置按照什么樣的策略來(lái)更新這些字段。在運(yùn)行的時(shí)候目標(biāo)表中的數(shù)據(jù)將按照這些策略來(lái)更新。這些cerulean如下:

固定屬性:  在維度表中的值是固定的,如果輸入數(shù)據(jù)源中的數(shù)據(jù)有變動(dòng),將會(huì)報(bào)錯(cuò)。

更改屬性:維度表中的數(shù)據(jù)總是被輸入數(shù)據(jù)源中的數(shù)據(jù)覆蓋掉。這是相面討論的類型2。

歷史屬性:維度表中的數(shù)據(jù)和輸入源中的數(shù)據(jù)會(huì)有不同,但是有重大意義,將會(huì)被保存起來(lái)。

如圖8

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖8

在這個(gè)例子中,點(diǎn)擊下一步進(jìn)入Slow Changing Dimension Clumns界面,上一個(gè)步驟中設(shè)置為默認(rèn)Not a key column的兩個(gè)列將會(huì)出現(xiàn)在這個(gè)步驟中,在這里他們作為更新Dimension Table的兩個(gè)候選列。在Changing Type中選擇修改屬性為更新屬性的或者歷史屬性,如果選擇更新的,遇到匹配項(xiàng)的時(shí)候這一列的值將會(huì)被修改。如果選擇為歷史的將會(huì)評(píng)估變更,如果檢測(cè)到更新,將會(huì)根據(jù)選擇的歷史變更添加一個(gè)新的行。這里我們做一個(gè)試驗(yàn),將DeductionAmount和PayDeductType都選擇為更新的。

固定和更新屬性設(shè)置:點(diǎn)擊下一步會(huì)看到如圖9。在這里如果選擇了固定屬性,如果數(shù)據(jù)不同通過(guò)這個(gè)設(shè)置可以在運(yùn)行時(shí)報(bào)錯(cuò)。前一個(gè)步驟我們沒(méi)有選擇更新屬性,所以這里是灰色的不可用。另外一個(gè)選項(xiàng)設(shè)置是否覆蓋當(dāng)前活動(dòng)數(shù)據(jù),或者覆蓋活動(dòng)和實(shí)效的數(shù)據(jù)。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖9

歷史屬性設(shè)置步驟:只有在第2步驟選擇歷史屬性會(huì)有這二個(gè)設(shè)置步驟。如果設(shè)置了歷史的屬性,那就是類型2。有兩種方法來(lái)保存歷史數(shù)據(jù)。每一種都會(huì)新插入一個(gè)行。我們來(lái)看這兩個(gè)設(shè)置。

使用單獨(dú)的行來(lái)顯示當(dāng)前的何過(guò)期的數(shù)據(jù):這個(gè)選項(xiàng)允許在維度表中選擇一個(gè)列,這個(gè)列用來(lái)標(biāo)識(shí)這一行數(shù)據(jù)是老舊的,而另一行數(shù)據(jù)是更新的。在SCD中有兩組值用來(lái)標(biāo)識(shí)數(shù)據(jù)的時(shí)效性:True/False,Current/Expired。

使用開(kāi)始時(shí)間和結(jié)束時(shí)間來(lái)標(biāo)識(shí)更新的和老舊的數(shù)據(jù):這個(gè)選項(xiàng)會(huì)使用維度表中的的兩個(gè)列來(lái)標(biāo)識(shí)這一行的有效期的開(kāi)始時(shí)間和結(jié)束時(shí)間。要注意的一點(diǎn)是要使用一個(gè)時(shí)間變量來(lái)給這些列賦值。

這里既然DeductionAmount字段為歷史的,PayrollDeductItem表中的一些看起來(lái)冗余的字段就有用了,這些字段可以標(biāo)記這一行數(shù)據(jù)的不同的生效時(shí)間。選擇變更類型為歷史的時(shí)候字段HistStartDate和HistEndDate用來(lái)記錄有效時(shí)間。當(dāng)使用新加列的方法時(shí)這兩個(gè)字段會(huì)變成false和Expired,新添加的一行將會(huì)是ture和Current。如圖6-23示例說(shuō)明如何使用HistStartDate和HisEndDate。設(shè)置時(shí)間值選項(xiàng)有一些系統(tǒng)變量,也可以使用自定義的變量,這里我們?cè)O(shè)置為System::StartTime然后點(diǎn)擊下一步。

推斷成員選項(xiàng)設(shè)置:當(dāng)你從其他表中將數(shù)據(jù)導(dǎo)入到維度表中,但是維度表中的數(shù)據(jù)列不全或者你想過(guò)一段時(shí)間再執(zhí)行它,可以在這個(gè)步驟中設(shè)置。這里我們不設(shè)置這個(gè)選項(xiàng),如圖10。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖10

完成向?qū)Р襟E:使用這個(gè)步驟來(lái)完成整個(gè)SCD的設(shè)置,如圖11。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖11

在這個(gè)例子中,我們要判斷維度表中那些字段作為主鍵,在PayrollDeductItem表中我們可以判斷出[EmployeeIDNbr]字段是員工號(hào),這個(gè)是不會(huì)改變的,另外[EmployeeID]也是不會(huì)改變的,這兩個(gè)建組合成一個(gè)主鍵可以唯一標(biāo)識(shí)一行數(shù)據(jù)。[PayrollDeductItemID]字段在這里不選擇作為主鍵,因?yàn)樵谳斎霐?shù)據(jù)源中沒(méi)有這樣的一個(gè)字段。當(dāng)運(yùn)行的時(shí)候這個(gè)字段不能幫助我們判斷這個(gè)行應(yīng)該更新或插入到維度表中。

另外一個(gè)重要的設(shè)置是輸入數(shù)據(jù)源中有匹配的數(shù)據(jù)的時(shí)候選擇什么樣的策略來(lái)更新維度表。舉一個(gè)例子,在輸入源數(shù)據(jù)中[EmployeePlanIDNbr] = "0000000001" [EmployeeID]= "1", [PayDeductType] ="401"這一行數(shù)據(jù)中對(duì)應(yīng)的DeductionAmount是225.00,而在維度表中對(duì)應(yīng)的值是200.00,我們應(yīng)該怎么設(shè)置呢?下面的表格給出了選擇項(xiàng)和對(duì)應(yīng)的結(jié)果。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖12

按照表中提示的信息,我們雙擊打開(kāi)SCD,點(diǎn)擊下一步轉(zhuǎn)到選擇主鍵選擇設(shè)置。***必須新建一個(gè)OLE DB數(shù)據(jù)源,并從數(shù)據(jù)源中選擇維度表PayrollDeductItem。所有作為主鍵的字段和作為更新的字段都砸這里選擇設(shè)置。默認(rèn)的設(shè)置是“Not a key column”。在這里[EmployeePlanIDNbr]和[EmployeeID]選為business key。注意這里至少要選擇一個(gè)列作為主鍵,否則不能點(diǎn)擊下一步。***的設(shè)置效果如圖7。

#p#

下一個(gè)步驟將設(shè)置那些沒(méi)有被選擇作為主鍵的字段,這些字段將作為更新和覆蓋的候選字段。每個(gè)字段需要設(shè)置更新屬性或者歷史屬性。如果選擇更新屬性,維度表中的值將被直接更新。如果選擇歷史屬性,列將會(huì)評(píng)估更新。當(dāng)發(fā)現(xiàn)有任何變動(dòng),根據(jù)設(shè)置一個(gè)新的行將被寫(xiě)入。這里我們?nèi)绻裑DeductionAmount]設(shè)置為歷史屬性,[PayDeductType]字段都設(shè)置為更新屬性。

既然選擇了一個(gè)字段作為歷史屬性,在后面的設(shè)置中將會(huì)出現(xiàn)歷史屬性向?qū)гO(shè)置。如果DeductionAmount發(fā)生了變動(dòng),我們可以選擇兩種方式來(lái)保存歷史數(shù)據(jù)?,F(xiàn)在PayRollDeductionItem表中的那些額外的字段就開(kāi)始起作用了。這些字段不是必須的,但是這里我們?yōu)榱俗鲆恍┚毩?xí)把他們加在維度表中。在設(shè)置歷史屬性時(shí)會(huì)用到HistStartDate和HistEndDate這兩個(gè)字段,在設(shè)置單獨(dú)列保存的時(shí)候,HistBitStatus 和HistTextStatus字段會(huì)被用到,它將把已經(jīng)過(guò)時(shí)的字段標(biāo)識(shí)為false或者expired,新的數(shù)據(jù)行將會(huì)被標(biāo)識(shí)為true和current。這里要注意,如果我們選擇Column to indicate current record屬性值為HistBitStatus的時(shí)候因?yàn)樗莃it類型的,那么Value when current和Expiration value將會(huì)被默認(rèn)的設(shè)置為T(mén)rue和False如圖13。如果我們選擇Column to indicate current record屬性值為HistTextStatus的時(shí)候,那么Value when current和Expiration value應(yīng)該相應(yīng)的設(shè)置為T(mén)rue和False如圖14

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖13

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖14

下一個(gè)步驟是推斷成員選項(xiàng)設(shè)置。在這例子中,在維度表中沒(méi)有一個(gè)新的工資扣除項(xiàng),所以不需要設(shè)置推斷選項(xiàng)。如果在輸入源數(shù)據(jù)中有一個(gè)新的扣除選項(xiàng)需要添加的話設(shè)置這個(gè)選項(xiàng)可以為維度表添加一個(gè)占位符。如圖10,如果設(shè)置了推斷成員,必須選擇將歷史屬性或者變更屬性字段設(shè)置為null或者使用一個(gè)bool列來(lái)表示數(shù)據(jù)是推斷成員。

點(diǎn)擊下一步如圖11,在這個(gè)步驟中預(yù)覽SCD有哪些輸出項(xiàng),可以在使用這些輸出項(xiàng)定制自己的task,但是一旦這樣整個(gè)SCD將會(huì)被重新配置,把以前的設(shè)置打亂,頁(yè)不能使用這個(gè)向?qū)А?/p>

完成整個(gè)設(shè)置向?qū)е笕鐖D2,整個(gè)SCD共有三個(gè)輸出,最左邊的是Changing Attribute Updates Output,這個(gè)輸出使用OLE DB Command來(lái)更新維度表中的數(shù)據(jù),如圖15。我們可以看到有一個(gè)SQL語(yǔ)句來(lái)更新[PayDeductType]字段。中間的輸出時(shí)New Output,這里將處理那些新出現(xiàn)的行,最終它將和右邊的歷史屬性輸出合并起來(lái),并輸入到維度表中。最右邊的輸出的作用是當(dāng)識(shí)別出有更新數(shù)據(jù)的時(shí)候要更新[HistEndDate]這個(gè)列,如圖16。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖15

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖16

***我們來(lái)看看運(yùn)行后的效果。

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖17

SSIS高級(jí)轉(zhuǎn)換任務(wù)之漸變維度詳解

圖18

在圖18中我們可以發(fā)現(xiàn)第1,3,4,5行現(xiàn)在是老舊的無(wú)效的數(shù)據(jù),他們的[HistEndDate]字段都被設(shè)置成當(dāng)前時(shí)間,對(duì)應(yīng)的新的有效地的數(shù)據(jù)分別是第8,11,10,9行。第2,6行雖然有匹配的主鍵,但是輸入數(shù)據(jù)源中和維度表中的DeductionAmount值是一樣的,所以沒(méi)有更新,但是他們的[HistStartDate]被重新設(shè)置成當(dāng)前時(shí)間。

在實(shí)際的生產(chǎn)環(huán)境中如果要使用SCD,建議認(rèn)真檢查輸入數(shù)據(jù)源,看里面是否有臟數(shù)據(jù)。使用SCD來(lái)講OLTP中的數(shù)據(jù)更新到數(shù)據(jù)倉(cāng)庫(kù)中的時(shí)候會(huì)很省力。如果想這個(gè)例子這樣,可以檢查***輸出中的OLE DB命令,但是總的來(lái)說(shuō)SCD已經(jīng)為我們做了大部分的工作。

關(guān)于漸變維度的知識(shí)就介紹到這里,謝謝!

【編輯推薦】

  1. 誤刪SQL Server日志文件后怎樣附加數(shù)據(jù)庫(kù)
  2. 利用mysql的audit審計(jì)功能記錄用戶操作信息
  3. 詳解Discuz_WIN7_Apache_MySQL_PHP平臺(tái)搭建
  4. 在SQL SERVER 2005執(zhí)行存儲(chǔ)過(guò)程的權(quán)限分配問(wèn)題
  5. T-SQL行列相互轉(zhuǎn)換命令:PIVOT和UNPIVOT使用詳解

 

責(zé)任編輯:趙鵬 來(lái)源: 博客園
相關(guān)推薦

2012-09-20 09:43:37

SSIS

2011-04-14 14:43:38

SSISTransformat

2011-04-19 09:18:02

SSIS數(shù)據(jù)轉(zhuǎn)換

2021-09-12 07:30:10

配置

2011-04-27 16:09:48

SQL ServerSSIS

2011-03-02 13:23:42

Vsftpd配置

2019-07-12 08:49:04

MySQ數(shù)據(jù)庫(kù)Redis

2015-08-27 14:50:40

BISSIS

2015-08-27 14:56:36

SSIS部署項(xiàng)目部署包部署

2011-08-02 09:46:04

iOS開(kāi)發(fā) XML 樹(shù)

2011-08-02 10:08:32

IOS開(kāi)發(fā) XML 樹(shù)

2014-04-04 10:53:04

2024-03-14 09:07:05

刷數(shù)任務(wù)維度后端

2015-09-07 09:18:43

企業(yè)安全安全維度網(wǎng)絡(luò)安全

2013-05-21 13:55:51

Android游戲開(kāi)發(fā)圖像漸變特效

2023-01-03 10:38:04

函數(shù)計(jì)算技術(shù)

2009-07-06 15:03:53

JSP向Servlet

2021-11-15 07:45:06

CSS 技巧背景光動(dòng)畫(huà)

2011-06-16 16:20:32

JavaScript分解任務(wù)

2011-03-28 09:23:31

Visual Stud
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)