(早些时候发布过类似问题,但人力资源部门今天改变了条件)
我们的人力资源部门以平面文件的形式从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平面文件源连接中的数据时,所有信息都在一列中。我试图使用Delimiter设置为Pipe但它不会分离数据,我假设由于文件顶部和中间的非必要信息。
我需要删除顶部和中间的数据,然后将Date和Total拆分为两个单独的列。
这样做的目的是分离数据,以便我可以获得运行年份的单个SUM。
Year Total
2013 $5123.25
我曾尝试在SSIS中执行此操作,但我似乎无法将列分开或删除数据。我想避免脚本任务,因为我不熟悉该组件的代码或操作。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我会创建一个可以导入整个平面文件的临时表,然后在SQL级别上进行过滤
一个例子
创建TABLE tmp(txtline VARCHAR(MAX))
将BCP或SSIS文件放入tmp表
像这样运行查询以获得结果(您可能需要调整字符串长度以适合您的平面文件)
WITH cte AS( 选择 CAST(SUBSTRING(txtline,2,10)AS DATE)AS PostingDate, CAST(REPLACE(替换(SUBSTRING(txtline,15,100),'|',''),',','')AS NUMERIC(19,4))AS LCAmount 来自tmp 在哪里(SUBSTRING(txtline,2,10))= 1 ) 选择 YEAR(PostingDate) SUM(LCAmount) 来自cte GROUP BY YEAR(PostingDate)
答案 1 :(得分:0)
也许您可以使用MS-Excel打开平面文件,使用竖线字符作为分隔符,然后根据需要从中创建CSV。
答案 2 :(得分:0)
缺少脚本任务/组件(或完整的自定义SSIS组件),我认为您无法在SSIS中解析该特定格式。平面文件连接管理器允许您选择要跳过的标题文本文件行数,但您显示的格式有多个部分(因此有多个标题)。还存在水平线的问题,平面文件连接将无法正确处理。
我首先看看是否有办法从SAP获取包含此数据的普通CSV文件。如果事实证明这是不可能的,那么你需要一些类型的自定义代码去除多余的文本。