2013-08-27 50 views
0

(發佈一個類似的問題早,但HR部門今天變化了的情況)平面文件導入:刪除數據

我們的HR部門有來自我們的SAP系統中的平面文件的形式自動導出。平面文件中的信息如下所示。

G/L Account 4544000 Recruiting/Job Search 
Company Code 0020 

-------------------------- 
| Posting Date| LC amnt| 
|------------------------| 
| 01/01/2013 | 406.25 | 
| 02/01/2013 | 283.33 | 
| 03/21/2013 |1,517.18 | 
-------------------------- 
G/L Account 4544000 Recruiting/Job Search 
Company Code 0020 

-------------------------- 
| Posting Date| LC amnt| 
|------------------------| 
| 05/01/2013 | 406.25 | 
| 06/01/2013 | 283.33 | 
| 07/21/2013 |1,517.18 | 
-------------------------- 

當我查看SSIS平面文件源連接中的數據時,所有的信息都在一個列中。我試圖使用設置爲管道的分隔符,但它不會分隔數據,我假定由於文件頂部和中間的非必需信息。

我需要刪除頂部和中間的數據,然後將日期和總分爲兩個單獨的列。

這樣做的目標是分離數據,以便我可以得到運行年份的單個SUM。

Year Total 
2013 $5123.25 

我試圖做到這一點在SSIS,但我似乎無法分開列或刪除數據。我想避免腳本任務,因爲我不熟悉該組件的代碼或操作。

任何援助將不勝感激。

回答

0

也許你可以使用MS-Excel打開平面文件,使用管道字符作爲分隔符,然後根據需要創建一個CSV文件。

+0

通常我會那樣做,但他們希望這是自動化的。他們不希望任何人在成立之後觸摸它。所以.txt是源代碼,因爲它來自SAP,它被格式化爲一種特定的方式。 –

+0

Gotcha。那會太容易了。 – BWS

0

缺少腳本任務/組件(或成熟的自定義SSIS組件),我認爲你不能解析SSIS中的特定格式。平面文件連接管理器允許您選擇要跳過的文本文件的多少行,但顯示的格式具有多個部分(並因此包含多個標題)。還有水平線的問題,平面文件連接將無法正確處理。

我首先看看是否有任何方法可以從SAP中獲取正常的CSV文件。如果事實證明這是不可能的,那麼你需要一些自定義代碼來去除多餘的文本。

+0

我回到了原創者,瞭解如何以.csv格式獲取此信息。不幸的是,該系統只會吐出這種格式。我們可能會考慮聘請一位顧問爲我們今後編制不同的產出。 –

1

我會創建一個臨時表,可以導入整個平面文件,後在SQL水平

一個例子做過濾

  1. CREATE TABLE TMP(txtline VARCHAR(MAX))

  2. BCP或SSIS文件到tmp目錄表

  3. 運行查詢像這樣得到的結果(你可能需要調整字符串的長度,以適應你ř平面文件)

    WITH CTE AS( SELECT CAST(SUBSTRING(txtline,2,10)AS DATE)AS PostingDate, CAST(REPLACE(REPLACE(SUBSTRING(txtline,15100)

    , '|',」 '),', ''')AS NUMERIC(19,4))AS LCAmount 從TMP中 WHERE ISDATE(SUBSTRING(txtline,2,10))= 1 ) SELECT YEAR(PostingDate) SUM (LCAmount) FROM CTE GROUP BY YEAR(PostingDate)