PowerCenter——Aggregator组件

一周新的开始~

整理笔记~

To be more better~

 

正文

Aggregator组件,功能是起到聚合作用的一个组件。

这是一个很常用的组件,在日常会在这里经常用到诸如:SUM,AVG,MAX等聚合运算。

 

Mapping

源 -> SQ -> Aggregator -> Target

 

对于功能并不难理解,大致实现的功能可以用如下SQL来表述:

    SELECT NAME,SUM(SALES)

    FROM T_EMP

    GROUP BY NAME

 

实现

实现Mapping,双击Aggregator组件,进入Edit Transformation界面。

在Ports选项界面,可以看到有个可以勾选GroupBy的地方,这边可以勾选你想要聚合的内容,例如上面的NAME。

建立一个数据端口SUM_SALES,设置其表达式为SUM(SALES)。

在Edit Transformation界面中的Aggregator Properties Tab界面中只需要关注一个Sorted Input。

当使用Sorted Input属性时,实现的功能逻辑类似于Joiner与Lookup,就是在Aggregator前面加了一个Sorter的组件。

这保证了Aggregator中的数据是有序的。

 

使用了Sorted Input属性,实现的Mapping类似于:

源 -> SQ -> SORTER -> AGGREGATOR -> TARGET

 

在Sorter组件中,选择的排序列必须与Aggregator中的GroupBy列一致或者包含,并在Aggregator组件的Properties Tab中选中Sorted Input属性。在Aggregator中使用Sorted Input会提升性能,但是也会消耗一定的资源。

 

 

条件聚合

Aggregator组件中与SQL中的SUM...GROUP BY有区别的。

Aggregator可以实现根据指定的条件下进行的汇总。

类似表达式可以表述为:SUM(SAL,SAL > 900)

 

使用Aggregator组件来进行行列转换

场景:一家企业,薪资组成包括基本工资,绩效工资,津贴,岗位工资4个类型。

应用系统DBA:

CREATE TABLE T_SAL

(

EMPNO    NUMBER(4),

INCOME_TYPE    NUMBER(4),

INCOME_AMOUNT    NUMBER(7,2)

)

 

数据仓库DBA:

CREATE TABLE T_SAL_DW

(

EMPNO    NUMBER(4),

BASE_SAL    NUMBER(7,2),

PERFORMANCE_SAL    NUMBER(7,2),

LEVEL_SAL    NUMBER(7,2),

OTHER_SAL    NUMBER(7,2)

)

 

设计编码表:

11 : 基本工资

22 : 绩效工资

33 : 岗位工资

44 : 津贴

 

设计的Mapping跟常规的一致:

源 -> SQ -> AGGREGATOR -> TARGET

 

区别在于,双击Aggregator组件,打开Ports Tab,在GroupBy字段,选择EMPNO。

工资的4个字段分别使用了如下表达式:

BASE_SAL    SUM(INCOME_AMOUNT,INCOME_TYPE = 11)

PERFORMANCE_SAL    SUM(INCOME_AMOUNT,INCOME_TYPE = 22)

LEVEL_SAL    SUM(INCOME_AMOUNT,INCOME_TYPE = 33)

OTHER_SAL    SUM(INCOME_AMOUNT,INCOME_TYPE = 44)

 

结果可以直接通过SQL语句查看即可:

SELECT * FROM T_SAL_DW

这是一个简单运用Aggregator组件行列转换的例子。

 

 

 

 

你可能感兴趣的:(BI)