SSIS:将数据转换为使用可变行的固定宽度文本



我正在尝试使用SQL Select制作SSIS的纯文本。问题在于SSIS将文件像表一样,我需要特定格式。

例如,我有这个结果:

bill_id    | concept    |concept_type |amount |
-----------|------------|-------------|-------|
334455     |concept1    |product      |12     |
334455     |concept2    |product      |10,5   |
334455     |concept3    |service      |45,8   |
334455     |concept4    |service      |1,05   |
334455     |concept5    |service      |12,5   |
334455     |concept6    |service      |14,6   |
334455     |concept7    |service      |108    |

我需要转换为这样的东西:

00   334455                                          
19                                                   
10   concept1       12.00                            
20   concept2       10.50                            
17                                                   
10   concept3       45.80                            
20   concept4        1.05                            
30   concept5       12.50                            
40   concept6       14.60                            
50   concept7      108.00                            
21   total         204.45                            

所以,我有第一行,ID,这是第一列的值。00告诉该行是ID。接下来,我们有19个,告诉启动产品概念,然后是每个概念的行。与17相同,但与服务概念相同。最后21个是所有概念的总数。

我知道可以使用C#应用程序完成,但是我试图使用SSIS,以便我可以制作DTS文件。

有可能吗?我该怎么办?

谢谢

用于您的任务的几种方法:

  1. 如评论中所述,您可以在C#中编写一个脚本转换,并做任何您想做的事情。这是一种方法,尤其是对于复杂变换。
  2. 以纯SSIS的方式,您必须将任务分解到子任务上。IE。从SQL中提取数据,在 bill_id 的循环组中获取所有 bill_ids 的列表,并计算总计,查询SQL数据由 bill_id 和获取 concept_type 的列表,在 concept_type 上组织循环,查询SQL数据由 bill_id concept_type ,做数据流使用行号脚本。然后将结果存储为记录集并在随后的循环中收集所有记录集。
    你看到问题了吗?您的转换需要大量数据分组,并且可以在整个记录集中完成。当您进行流数据转换时,即线程分组时,SSIS会发光。

回到您的任务 - 我宁愿做SSIS和C#脚本任务。SSIS 执行SQL Task 获取您的结果集并将其存储在对象变量中,然后 script Task 从对象变量获取数据集,并使用LINQ等进行所有转换等。然后将结果存储至带有C#的文件。

最新更新