什么是滚动总和以及如何在 Informatica 中实现它,我的要求如下?
Posted
技术标签:
【中文标题】什么是滚动总和以及如何在 Informatica 中实现它,我的要求如下?【英文标题】:What is rolling sum and how to impliment it in Informatica and my requirement is as follows? 【发布时间】:2013-09-02 02:22:21 【问题描述】:谁能告诉我什么是滚动求和以及如何在 Informatica 中实现它?
我的要求如下:(由客户提供)
ETI_DUR: SUM(CASE WHEN AGENT_EXPNCD_DIM.EXCEPTION_CD='SYS/BLDG ISSUES ETI' THEN IEX_AGENT_DEXPN.SCD_DURATION ELSE 0 END)
ETI_30_DAY: ROLLING SUM(CASE WHEN (SYSDATE-IEX_AGENT_DEXPN.ROW_DT)
ETI_30_DAY_OVRG: 当 ETI_DUR > 0 时的情况 案子 当 ROLLINGSUM(过去 29 天的 ETI_DUR_30_DAY)在 0 和 600 之间且 ROLLINGSUM(过去 29 天的 ETI_DUR_30_DAY)+ ETI_DUR > 600 然后 ROLLINGSUM(过去 30 天的 ETI_DUR_30_DAY)- 600 当 ROLLINGSUM(过去 29 天的 ETI_DUR_30_DAY)> 600 THEN ETI_DUR 否则 0 结束 否则 0 结束
我在 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),trunc(SCHD_DATE),'DD')
o_ETI_30_DAY -- IIF(DATE_DIFF(TRUNC(SYSDATE),trunc(SCHD_DATE),'DD')
聚合器转换:
o_ETI_30_DAY_OVRG: IIF(总和(i_ETI_DUR)> 0, IIF((sum(i_ETI_29_DAY)>=0 and sum(i_ETI_29_DAY) 600, 总和(i_ETI_30_DAY) - 600, IIF(sum(i_ETI_29_DAY)>600,sum(i_ETI_DUR),0)),0)
但是不工作。请尽快帮助。
非常感谢....!
【问题讨论】:
你有什么问题?什么是滚动总和或如何实现所有这些要求? 【参考方案1】:滚动总和只是固定时间段内某个金额的总和。例如,您可以每天计算过去 30 天的费用总和。
我猜您可以使用聚合器来计算 ETI_DUR、ETI_30_DAY 和 ETI_29_DAY。之后,您可以在表达式中实现 ETI_30_DAY_OVRG 的逻辑。请注意,您不能在聚合器中编写这样的 IIF 表达式。输出端口必须使用聚合函数。
【讨论】:
【参考方案2】:这是一个滚动求和的例子:
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
【讨论】:
【参考方案3】:我们在表达式转换中的数值函数中定义了一个移动和函数:
MOVINGSUM(n as numeric, i as integer, [where as expression]).
请检查是否有帮助。
【讨论】:
请格式化您的答案并提供更多详细信息,并阅读常见问题解答以合适的方式给出答案以上是关于什么是滚动总和以及如何在 Informatica 中实现它,我的要求如下?的主要内容,如果未能解决你的问题,请参考以下文章