【问题标题】:Sequence generation based on a condition in informatica powercenter基于 informatica powercenter 中条件的序列生成
【发布时间】:2021-09-08 07:19:37
【问题描述】:

我需要根据一列中的数据创建一个序列,示例表如下:

要提供的序列是这样的,如果 group = bfd then new_id = id + sequence in if group = klm or kln then new_id = id + sequence in

输出应该是这样的:

我尝试使用 2 个序列生成器,首先从 0 开始并以 1 递增。 秒从 200 开始递增 1,然后在表达式转换中使用 IIF seq_1 = 从序列生成器 1 附加 NEXTVAL seq_2 = 从序列生成器 2 中附加 NEXTVAL

new_id = TO_INTEGER (IIF(group ='bfd', id || seq_1, IIF(组='klm'或组='kln',id || seq_2) )
)

但是上面的逻辑给出的输出如下..

只需要为提到的组生成序列..

有没有办法在 informatica 中实现这一点。使用 UDF 或修改我现有的任何逻辑

感谢您的帮助!

【问题讨论】:

    标签: informatica informatica-powercenter informatica-cloud


    【解决方案1】:

    这是 seq gen 的正常行为。您需要使用排序器和表达式转换来执行此操作。

    1. 使用排序器对group上的数据进行排序。
    2. 使用表达式转换。创建如下所示的端口。 io = 输入/输出端口,v - 可变端口,o- 仅输出端口。
    io_id=id
    io_group=group
    v_prev_seq1= IIF( io_group ='bfd', IIF(isnull (v_seq1),-1, v_seq1))
    v_prev_seq2= IIF( io_group ='klm' or group ='kln', IIF(isnull (v_seq2),199, v_seq2))
    v_seq1= IIF(NOT ISNULL(v_prev_seq1),v_prev_seq1+1,0)
    v_seq2=IIF(NOT ISNULL(v_prev_seq2),v_prev_seq2+1,200)
    o_new_id = 
    IIF( io_group ='bfd', id || v_seq1, IIF( group = 'klm' or group ='kln', id || v_seq2)) 
    

    将 io_id,io_group,o_new_id 链接到您的目标。
    说明 -
    v_prev_seq1 - 在 bfd 的情况下,这将在开始时为 -1。然后,当第一行到来时,v_seq1 的值将为 0。然后对于下一个 bfd,它将增加 1。对于非 bfd 组,这将不会增加或为空。
    同样,v_prev_seq2 和 v_seq2 只有在 group 是 kln 或 klm 时才会增加。

    请注意,您的预期输出在 new_id 列中有一个下划线 _,但在您的代码中它不存在。我也忽略了这一点 - 如果需要,请添加。

    【讨论】:

    • 我尝试了上述解决方案...这可能是潜在的解决方案,但对于其他组,序列不是从 200 开始......输出如下...... id |集团 | new_id 101| bfd | 101_1 123| bfd | 123_2 102|荷航 | 102_2 693|荷航 | 693_3 563|九龙 | 563_4 我尝试了更多数据... KLM 和 KLN 的序列出于某种原因从 2 开始!
    • 您能否以详细模式运行包含 10 条记录的会话并附上会话日志或检查它在哪里不起作用?
    • 是的,会尝试从日志中找出答案。我会附在此处。谢谢您的帮助!
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多