带聚合器的序列生成器

时间:2015-11-27 00:58:24

标签: informatica

数据正在通过聚合器转换传递,并按客户帐号进行分组,以确保我有不同的值。然后将其传递给表达式转换。我有一个链接到表达式转换的序列生成器转换 - 它从不接触聚合器。表达式中的变量用序列号填充。

我遇到的问题是变量的值超出了序列号 - 例如,如果有499行,则变量的值为501.就像分配给变量的值一样忽略分组并返回非独特的计数。

知道这里发生了什么吗?

编辑:有关如何完成此操作的更多信息。 (无法截图,因为它太大了。)

流量1列出了帐号,服务号码和目标系统,并使用路由器按目标系统将它们分类为平面文件。

123456|0299999999|SYSA
123456|0299999999|SYSB
123457|0299999998|SYSA
123457|0299999998|SYSB
123457|0299999997|SYSA
123457|0299999997|SYSB

有些系统不需要服务号,有些则不需要。对于那些做的人来说,通过表达式转换来路由它们是一个简单的练习,使用序列号设置变量。因此,SYSA所需的输出如下所示:

123456|0299999999|SYSA
123457|0299999998|SYSA
123457|0299999997|SYSA

表达式转换使用:

设置变量
SETVARIABLE($$SYSA, SEQUENCE_NO)

在第二个流程中,我构建了头文件和尾部文件。对于预告片记录计数,我只需输出$$SYSA的当前值,如下所示:

SETVARIABLE($$SYSA, NULL)

我使用目标加载计划仅在第一次完成后执行第二个流程。

我可以证明以这种方式使用变量是有效的,因为工作流每次输出正确的值 - 我可以改变源数据增加或减少行数,以及$$SYSA中的值输出第二次流程第一次是正确的(即它不能是持久值)。

如果目标系统只需要不同的帐号而没有服务号,那么这种情况就会失败。 SYSB所需的输出为:

123456|SYSB
123457|SYSB

即SYSB的第三行被丢弃,因为帐号不是唯一的。我试图通过在路由器和表达式之间放置聚合器并按帐号分组来实现此目的。但是,在这种情况下,$$SYSB变量未正确分配。

1 个答案:

答案 0 :(得分:0)

如果变量值高于存储库中存储的持久值,则Informatica只会更新变量的值。因此,如果成功运行将值501保留到存储库,则会在下一次运行开始时再次拾取该值,并且只有在新值更高时才会覆盖该值。我通过在参数文件中声明起始值为0来解决这个问题。