什么是滚动总和以及如何在Informatica中实现它,我的要求如下?

时间:2013-09-02 02:22:22

标签: informatica informatica-powercenter

有人可以告诉我什么是滚动总和以及如何在Informatica中实现它?

我的要求如下:(由客户提供)

ETI_DUR:     SUM(AGENT_EXPNCD_DIM.EXCEPTION_CD ='SYS / BLDG发生ETI',然后IEX_AGENT_DEXPN.SCD_DURATION ELSE 0 END)

ETI_30_DAY:     ROLLING SUM(情况下(SYSDATE-IEX_AGENT_DEXPN.ROW_DT)< = 30 AND AGENT_EXPNCD_DIM.EXCEPTION_CD ='SYS / BLDG ISSUES ETI'     那么IEX_AGENT_DEXPN.SCD_DURATION ELSE 0 END)

ETI_30_DAY_OVRG:     ETI_DUR时的情况> 0那么     案件     当滚动(ETI_DUR_30_DAY最后29天)在0和600之间以及ROLLINGSUM(ETI_DUR_30_DAY最后29天)+ ETI_DUR> 600那么ROLLINGSUM(ETI_DUR_30_DAY最后30天) - 600     ROLLINGSUM(ETI_DUR_30_DAY最后29天)> 600那么ETI_DUR     ELSE 0 END     ELSE 0 END

我已在Informatica中实现了以下内容。

表达式转换:

o_ETI_DUR - IIF(UPPER(EXCEPTION_CD_AGENT_EXPNDIM)='SYS / BLDG ISSUES ETI',SCD_DURATION,0)

o_ETI_29_DAY - IIF(DATE_DIFF(TRUNC(SYSDATE),截断(SCHD_DATE),'DD')< = 29 AND UPPER(EXCEPTION_CD_AGENT_EXPNDIM)='SYS / BLDG ISSUES ETI',SCD_DURATION ,0)

o_ETI_30_DAY - IIF(DATE_DIFF(TRUNC(SYSDATE),trunc(SCHD_DATE),'DD')< = 30 AND UPPER(EXCEPTION_CD_AGENT_EXPNDIM)='SYS / BLDG ISSUES ETI',SCD_DURATION ,0)

聚合转换:

o_ETI_30_DAY_OVRG:     IIF(sum(i_ETI_DUR)> 0,     IIF((sum(i_ETI_29_DAY)> = 0并且sum(i_ETI_29_DAY)< = 600)和(sum(i_ETI_29_DAY)+ sum(i_ETI_DUR))> 600,      sum(i_ETI_30_DAY) - 600,     IIF(总和(i_ETI_29_DAY)在600,总和(i_ETI_DUR),0)),0)

但是没有用。尽快帮助。

非常感谢....!

3 个答案:

答案 0 :(得分:1)

滚动总和只是固定持续时间内某些数量的总和。例如,您每天可以计算过去30天的费用总和。

我猜你可以使用聚合器来计算ETI_DUR,ETI_30_DAY和ETI_29_DAY。之后,在表达式中,您可以实现ETI_30_DAY_OVRG的逻辑。请注意,您不能在聚合器中编写类似的IIF表达式。输出端口必须使用聚合函数。

答案 1 :(得分:1)

这是一个滚动的例子:

count, rolling_sum
1,1
2,3
5,8
1,9
1,10

基本上它是前面列出的值的总和。要在Informatica中实现它,请使用“局部变量”(表达式转换中的变量端口),如下所示:

输入端口:count
变量端口:v_sum_count = v_sum_count + count
输出端口:rolling_sum = v_sum_count

答案 2 :(得分:1)

我们在表达式转换中的数值函数中定义了一个移动和函数:

MOVINGSUM(n as numeric, i as integer, [where as expression]).

请检查是否有帮助。