什么是滚动总和以及如何在 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 中实现它,我的要求如下?的主要内容,如果未能解决你的问题,请参考以下文章

Informatica基础系列(七)——常见问题、注意事项

在 C# 中,如何在数组中存储随机数等于某些总和的次数?

如何根据 groupby 计算 12 个月的滚动总和?

SQLite - 滚动平均/总和

如何调用在不同集成服务中运行的 informatica 工作流

Informatica参考