SQL Server BI Step by step 4-3 合并資料 Conditional Split和Slowly Changing Dimension組件

來源:互聯網
上載者:User

合并資料3-----------Conditional Split和Slowly Changing Dimension組件

以ProductNumber尋找Excel和資料庫。當資料在Excel中但沒在資料庫的就新增;都在的就更新;資料庫中有資料但Excel中沒資料的就刪除。
不再資料庫中的就刪除。

一、 Conditional Split組件
如果用Product表來實驗,Add時會遇到很大的麻煩:因為完全聯結時,會造成某條紀錄會有多個NULL值,而資料庫中又要求不可為空!這樣就Add不進去!所以我只有從新做一套資料來實驗咯~5555~費了我不少時間啊

 

1. 準備Excel資料來源,它的資料完全來自於現在的資料庫,一共有9行資料。
    但是對其中ID為1,2的ProductNumber資料進行新的修改,用於Add.
    ID為3,4的ProductNumber紀錄在資料存在,但是MakeFlag屬性有更改,用於Update.
    而資料表,我們把表中ProductNumber值改為一個Excel表中沒有的,為了Delet時計數等於1.現在刪除後有7行資料。

2. 建立MergeDataMerge 包。
3. 拖一個OLE DB 源和Excel源。OLE DB 源串連到Product表,Excel源來串連到指向Product1.xls。
4. 拖入兩個Sort組件,分別按ProductNumber欄位進行升序排序。
5. 添加合并聯結組件。
 
ProductNumber指OLE DB的欄位。NewProductNumbe指Excel的欄位
這裡我們選的是完全外部串連,這樣才能完全合并兩邊的資料.當一方資料沒有匹配的資料時,用NULL代替.所以我們直接根據合并後的ProductNumber和NewProductNumber 就可以直接判斷出這行資料應該是添加,更新,還是刪除.在Merge Join組件下面,我們添加Conditional Split組件,這個組件來判斷對於不同的情況的分支

6. Conditional Split組件
 
很簡單,當行中對應的ProductNumber為NULL時,說明沒有從資料庫時面查到匹配的資料,所以這條資料應該進行新增操作,當NewProductNumber為NULL時,說明Excel資料來源中不存在資料庫中ProductNumber對應的資料,所以此條資料應該進行刪除,最後,如果兩個ProductNumber相同,則應該進行更新操作.這裡需要注意的是,一定要把兩個判斷ISNULL的條件放在前面,因為我們在第三個裡面用到了TRIM,如果為NULL值時,會有錯誤發生.

 

我沒有完成update的任務,也查不出來,後面看吧
解決:

7. 配置OLE DB  Destination和OLE DB   Command。
OLE DB   Command的Update語句

指令碼

UPDATE [dbo].[Product_Teste] SET [MakeFlag] = ?,[Name] = ? WHERE [ProductNumber] = ?

配置列的映射:
 
這裡一定要注意咯!輸入列的順序與UPDATE語句中參數順序是要一直的!否則,將會報錯。
運行:
 

沒有衍生的資料行時,的錯誤
 

運行:

 
 

 

 
 
 

 合并後的資料庫
 
原來的DB
 

二、 同樣的需求目的用Slowly Changing Dimension組件完成。
1. 準備資料來源,如上。只是DB資料有最後一條有改變。建立包:MergeDataSCDComponent.dtsx
 

2. 添加Slowly Changing Dimension組件
雙擊這個控制項進行設定,我們會發現,這類似於一個安裝程式,可以一步一步的設定,點擊下一步,首先我們需要選擇資料連線管理器,然後再設定業務鍵,在這裡我們設定ProductNumber列作為業務鍵
 

再點擊下一步,在這裡我們可以選擇資料來源中的列,然後設定此列的更改類型,分為固定,變化還是曆史,在左面已經列中不同的類型的詳細說明:
 
可以看到這個組件很強大,可以針對不同的更改類型做出這麼多的區分,我們再點擊下一步,看到在這裡可以設定,如果固定類型的屬性更改時是否轉換失敗,變化的屬性更改時,是否更改所有的匹配記錄.
 
我們直接下一步,然後完成整個配置,可以看到,Slowly Changing Dimension下面多出來了三個分支和其對應的組件,就象我們前幾次實現的一樣,只不過這次是全部配置完成的.雖然下面的其中的兩個組件名顯示的是英文(估計是沒有對應的中文翻譯),不過還是相應強大的.


 

我們來看一下這三個自動產生的組件。“插入目標”,它自動產生的是一個OLE DB目標組件,並自動把欄位對應好了,而且對於一些特殊的列已經自動進行了忽略(考慮的還真周到).
其它的兩個更新的操作,都是產生的OLE DB Command組件,而且自動產生了SQL語句。它們完成的目的就是更新資料

指令碼

UPDATE [dbo].[Product_Teste] SET [MakeFlag] = ?,[Name] = ? WHERE [ProductNumber] = ?

 
運行:
 

 資料庫:
 

 

三、 總結
用了兩個組件完成了在一個資料流中新增、更新、刪除(只有Condition Split組件可以)的操作。
用下來感覺第一比較複雜,都是需要手動來配置。但是很靈活你可以根據你的需求對不同操作進行控制。
而第二個都是自動產生,降低了使用的難度,但是就不太靈活了。

 

 

項目step1---4原始碼檔案:版本為SQL 2005,運行代碼前還需要安裝ExceL應用程式

/Files/cocole/Step1-4Sql05.rar

 

作者:悟空的天空(天馬行空)
出處:http://www.cnblogs.com/cocole/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.