有人可以告诉我什么是滚动总和以及如何在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)
但是没有用。尽快帮助。
非常感谢....!
答案 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]).
请检查是否有帮助。