Search code examples
informaticainformatica-powercenter

to pass data is more sequential way


I have five input fields as

  • I_ADDR_LINE_1
  • I_ADDR_LINE_2
  • I_ADDR_LINE_3
  • I_ADDR_LINE_4
  • I_ADDR_LINE_5

there can be data in them or not
there can be data in line 2 and 4
there are 5 records example :If data is coming in line 2 and line 4 then we have to send in line output line 1 and line 2

I have made 5 variable ports with flag 1 and 0
1 if data is there
0 if no data is there in that line

code I have used in one variable port for I_ADDR_LINE_1

IIF(
NOT ISNULL(I_ADDR_LINE_1_TX)
AND 
NOT IS_SPACES(I_ADDR_LINE_1_TX)
AND 
LENGTH(LTRIM(RTRIM(I_ADDR_LINE_1_TX)))<>0,1,0
)

Now if data is coming in rows 1,3,5 in output data should go sequentially i.e in row 1,2,3


Solution

  • If i understand correctly, I_ADDR_LINE_1, I_ADDR_LINE_2, I_ADDR_LINE_3, I_ADDR_LINE_4,I_ADDR_LINE_5 are columns in your input file/table. If you receive data for I_ADDR_LINE_1, I_ADDR_LINE_3 & I_ADDR_LINE_5 in your inpur file, you want to load it as I_ADDR_LINE_1,I_ADDR_LINE_2 & I_ADDR_LINE_3 in the output.

    Assuming my understanding is correct as mentioned above, the variable port logic you defined looks good and you should create 4 more variable ports for ADDR_LINE 2, 3,4 & 5 with flag values as 1/0. Finally you should try to identify to load this sequentially in the output. In the output variable, you should try to identify the sequence based on nested if else statement as mentioned below.

    OUT_VAR_ADDR_LINE_1 = 
    
    IIF(VAR_I_ADDR_LINE_1=1,I_ADDR_LINE_1,
    (IIF(var_I_ADDR_LINE_2=1,I_ADDR_LINE_2,
    (IIF(VAR_I_ADDR_LINE_3=1,I_ADDR_LINE_3,
    (IIF(VAR_I_ADDR_LINE_4=1,I_ADDR_LINE_4,
    IIF(VAR_I_ADDR_LINE_5=1,I_ADDR_LINE_5,
    NULL)))))))) 
    
    OUT_VAR_ADDR_LINE_2
    
    IIF(VAR_I_ADDR_LINE_2=1,(IIF(OUT_VAR_ADDR_LINE_1 <> I_ADDR_LINE_2),I_ADDR_LINE_2,
    (IIF(var_I_ADDR_LINE_3=1,(IIF(OUT_VAR_ADDR_LINE_1 <> I_ADDR_LINE_3),I_ADDR_LINE_3,
    (IIF(VAR_I_ADDR_LINE_4=1,(IIF(OUT_VAR_ADDR_LINE_1 <> I_ADDR_LINE_4),I_ADDR_LINE_4,
    (IIF(VAR_I_ADDR_LINE_5=1,(IIF(OUT_VAR_ADDR_LINE_1 <> I_ADDR_LINE_5),I_ADDR_LINE_5,
    NULL))))))))))) -- 4
    
    
    OUT_VAR_ADDR_LINE_3
    
    IIF(VAR_I_ADDR_LINE_3=1,(IIF(OUT_VAR_ADDR_LINE_2 <> I_ADDR_LINE_3),I_ADDR_LINE_3,
    (IIF(var_I_ADDR_LINE_4=1,(IIF(OUT_VAR_ADDR_LINE_2 <> I_ADDR_LINE_4),I_ADDR_LINE_4,
    (IIF(VAR_I_ADDR_LINE_5=1,(IIF(OUT_VAR_ADDR_LINE_2 <> I_ADDR_LINE_4),I_ADDR_LINE_5,
    NULL))))))))
    
    
    
    OUT_VAR_ADDR_LINE_4
    
    IIF(VAR_I_ADDR_LINE_4=1,(IIF(OUT_VAR_ADDR_LINE_3 <> I_ADDR_LINE_4),I_ADDR_LINE_4,
    (IIF(var_I_ADDR_LINE_5=1,(IIF(OUT_VAR_ADDR_LINE_3 <> I_ADDR_LINE_5),I_ADDR_LINE_5,
    NULL)))))
    
    OUT_VAR_ADDR_LINE_5
    
    IIF(VAR_I_ADDR_LINE_5=1,(IIF(OUT_VAR_ADDR_LINE_4 <> I_ADDR_LINE_5),I_ADDR_LINE_5,
    NULL))