Informatica行列转化实现

Informatica行列转化实现
Informatica行列转化实现

表:SALES、SALES2

在session的Mapping选项卡的Targets中选中Truncate target table option 是为了先把目标表中的数据彻底删除。

1、行转列:

1)导入源表:SALES

2)导入目标表:SALES2

3)创建Mapping,命名为mapping_1。

4)将源表和目标表拖拽入Mapping Designer。

5)创建Normalizer Transformation(用于将一行变成多行),编辑该转换,选择

“Normalizer”页面,添加对应的输出字段,其中level可理解为group by等级,Occurs 相当于循环次数,即该字段可能有几行(几个等级)输出。

6)查看Ports页面,系统将自动生成一系列字段。其中GCID_

这个端口产生一个序号指名当前输出来自多个输入中的哪一个;GK_XXX,由这个端口产生一个序列号值,在需要时可以作为主键,运行成功后会在知识库中保存下一个值,可以在Mapping中看到下一个值,可以修改这个值;

7)连接SQ到Normalizer以及Normalizer到目标表的对应字段。

8)创建工作流并运行即可。

附SQL代码:

SELECT STORENAME,QUARTER1 AS SALES, 1 AS QUARTER

FROM SALES

GROUP BY STORENAME,QUARTER1 ------level

UNION

SELECT STORENAME,QUARTER2 AS SALES, 2 AS QUARTER

FROM SALES

GROUP BY STORENAME,QUARTER2

UNION

SELECT STORENAME,QUARTER3 AS SALES, 3 AS QUARTER

FROM SALES

GROUP BY STORENAME,QUARTER3

UNION

SELECT STORENAME,QUARTER4 AS SALES, 4 AS QUARTER

FROM SALES

GROUP BY STORENAME,QUARTER4

2、列转行:

1)导入源表:SALES2

2)导入目标表:SALES

3)创建Mapping,命名为mapping_2。

4)将源表和目标表拖拽入Mapping Designer。

5)添加表达式转换Expression Transformation,从SQ拖拽相应的port到expression中,

并在expression中添加相应的输出端口,以及相应的表达式条件。

6)添加聚合函数转换,并进行分组。

7)连接到目标表的对应的输出端口。

8)创建工作流并运行即可。

附SQL代码:

SELECT STORENAME,

MAX(CASE WHEN QUARTER=1 THEN SALES ELSE 0 END) QUARTER1, MAX(CASE WHEN QUARTER=2 THEN SALES ELSE 0 END) QUARTER2, MAX(CASE WHEN QUARTER=3 THEN SALES ELSE 0 END) QUARTER3, MAX(CASE WHEN QUARTER=4 THEN SALES ELSE 0 END) QUARTER4 FROM SALES2

GROUP BY STORENAME

ORDER BY STORENAME

相关主题
相关文档
最新文档