微軟BI 之SSIS 系列 - 在 SSIS 輸出平面文件時根據運行日期生成不同的文件名稱


開篇介紹

 SSIS 中操作文件的輸入和輸出是非常方便的,這個例子講解一個最簡單的需求:比如每天從數據庫中查詢一批數據要輸出到文件,每天產生一個文件,那么文件的名稱按照"文件名+日期"的格式加以區別,比如 Employee20131225.txt 。

測試案例

我的測試數據非常簡單,就是一個查詢語句,要將這些查出來的數據輸出到文件並使用逗號分隔,每個文件根據時間加以區別。

SELECT EmployeeKey,
             ParentEmployeeKey,
            EmployeeNationalIDAlternateKey,
            FirstName + ' '+ LastName AS FullName,
            Title  
FROM AdventureWorksDW2012.dbo.DimEmployee

新建一個 SSIS Package 並創建一個數據流,在數據流中使用上面的 SQL 查詢語句創建一個數據源表,並且注意最下方先創建兩個變量。一個變量表示輸出的目錄,一個變量表示輸出的文件名稱。在我之前的項目中,還包括輸出的服務器地址,目錄,分類然后再是輸入的服務器地址,目錄分類和文件名等等,這個例子只是簡單演示。

新建一個平面文件輸出 Flat File Destination 這時編輯 FF_DST_Employee 會提示創建文件連接管理器。

新建文件連接管理器, Overwrite data in the file 是指如果同名文件將覆蓋,這個選項很有用,因為有的場景需要你追寫文件。

Delimited - 逗號分隔,這個格式最為方便,無論是加載還是輸出,格式都是非常方便管理和配置的。當然也有的需要輸出成 Fixed width 定長,那么就需要為每一個輸出列指定輸出的寬度。

定義好連接管理器的名稱,並且在 File Name 那里瀏覽到一個目錄並填寫一個文件名稱,這個文件不需要存在,因為在輸出的時候會自動創建。

文件輸出是逗號分隔,連格式轉換都省略掉了,不用管。

Mapping 是數據源和連接管理器的 Data Mapping ,由於連接管理器是根據上游數據源創建的,所以格式都一樣。

保存並運行 Package ,執行成功。

文件已經輸出了,數據和格式都沒有問題。

這個時候就要開始處理文件的命名了,選擇好文件連接管理器並右鍵屬性,找到 Expressions - 這里面提供了大量可配置的選項。

ConnectionString 就是我們要編輯的對象,它指定了平面連接管理器的連接到輸出文件的路徑。

將我們自定義的兩個變量拼接成字符串看看,路徑斜杠用 "\\" 表示,點擊計算表達式看看實際的路徑。也就是說平面連接管理器的路徑將由這兩個變量來決定了,變量是什么值,路徑便是什么。 在這個例子中,其實可以完全不需要使用到這兩個變量,但是這是我們處理文件時通常所采用的一種規范的做法,原因就是我們輸出的文件地址可能會發生改變,所以這些都是最終需要配置的。

文件名根據時間來計算,我使用到了一些小函數來進行格式轉換,這個文字的正下方有很多文件夾 (Mathematical Functions. String Functions),提供了很多的小函數。

@[User::VarOutputFolder]+"\\"+ @[User::VarOutputFileName]+(DT_STR,4,1252)DATEPART( "yyyy" , @[System::StartTime] ) +

RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" ,@[System::StartTime] ), 2) +

RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , @[System::StartTime] ), 2) +".txt"

點擊計算就能看到計算出來的地址是根據當前運行時間決定的,當然最后的路徑不正確。那是因為我們的文件名變量是 Employee.txt,因此最后文件名變成了以 Employee.txt20131224.txt 命名的方式。

要改的話非常容易,將文件名稱的變量改成 Employee並保存,然后重新打開連接管理器的表達式看看輸出的文件名稱就是正確的了。

保存並執行 Package,並將當前系統時間修改為明天再執行。

最終就看到兩個文件輸出了,名稱是根據今天的日期和明天的日期決定的。

更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM