0

(之前发布过类似的问题,但今天人力资源部门改变了条件)

我们的人力资源部门以平面文件的形式从我们的 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 平面文件源连接中的数据时,所有信息都在一个列中。我曾尝试使用分隔符设置为管道,但它不会分隔数据,我假设由于文件顶部和中间的非必要信息。

我需要删除顶部和中间的数据,然后将 Date 和 Total 分成两个单独的列。

这样做的目的是分离数据,以便我可以获得运行年份的单个 SUM。

Year    Total
2013    $5123.25

我曾尝试在 SSIS 中执行此操作,但似乎无法分隔列或删除数据。我想避免脚本任务,因为我不熟悉该组件的代码或操作。

任何援助将不胜感激。

4

3 回答 3

1

我将创建一个可以导入整个平面文件的临时表,然后在 SQL 级别进行过滤

一个例子

  1. 创建 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,15,100),'|',''),',','') AS NUMERIC(19,4)) 作为 LCAmount 从 tmp WHERE ISDATE(SUBSTRING(txtline,2,10)) = 1 ) 从 cte GROUP BYYEAR(PostingDate) 中选择年份(PostingDate), SUM(LCAmount)

于 2013-08-27T20:13:10.323 回答
0

也许您可以使用 MS-Excel 打开平面文件,使用管道字符作为分隔符,然后根据需要创建一个 CSV。

于 2013-08-27T19:29:45.300 回答
0

缺少脚本任务/组件(或成熟的自定义 SSIS 组件),我认为您无法在 SSIS 中解析该特定格式。平面文件连接管理器确实允许您选择要跳过多少行文本文件的标题,但您显示的格式有多个部分(因此有多个标题)。还有水平线的问题,平面文件连接将无法正确处理。

我首先看看是否有任何方法可以从 SAP 中获取包含这些数据的普通 CSV 文件。如果事实证明这是不可能的,那么您将需要某种自定义代码来去除多余的文本。

于 2013-08-27T19:58:48.207 回答