Scenario 9: How to achieve target below?
(Source)
ID | COUNTRY
101 | INDIA
102 | NEPAL
101 | AMERICA
103 | AFRICA
102 | JAPAN
103 | CHINA
(Target)
SID|ID|COUNTRY
1|101| INDIA
2|101| AMERICA
1|102| NEPAL
2|102| JAPAN
1|103| AFRICA
2|103| CHINA
Theory/Analysis
As I have said in the heading we have to assign a unique ID for each and every group of records. Ok, got it Once again we need to compare current records and previous record if matched then increased SID otherwise start SID with 1. So, we have to use once again Expression Transformation and Variable Port. I am in love with these two :-)
Practically
Step 1: As usual Drag and Drop your Source to Mapping Designer.
Step 2:
Sorter
Sort the data based upon ID
ID key (Checked)
Note: If your Source is relational table you can sort it by overriding Sql.
Step 3:
Expression
Create Six Ports
New_SID (Variable Port)= 1
ID_COMPARE (Variable Port) = IIF(ID!=OLD_ID,ID,OLD_ID)
ID_CREATE (Variable Port) = IIF(ID=OLD_ID,OLD_SID+1,NEW_SID)
OLD_ID (Variable Port) = ID_COMPARE
OLD_SID (Variable Port) = ID_CREATE
SID (Output Port) = ID_CREATE
Note: Please follow order above of ports otherwise you won't be getting expected output.
Step 4: Connect to Target
BINGO!!!
Feel free to post your doubt in comment section.
Due to limitation, I can't attach exported .xml file which you can Import in your repository and see or analyse. (Feel free to mail me if you need .xml file with Scenario number and Question.)
If you like the approach and solution feel free to share with others.
Thanks.
hpandey.harsh@gmail.com
(Source)
ID | COUNTRY
101 | INDIA
102 | NEPAL
101 | AMERICA
103 | AFRICA
102 | JAPAN
103 | CHINA
(Target)
SID|ID|COUNTRY
1|101| INDIA
2|101| AMERICA
1|102| NEPAL
2|102| JAPAN
1|103| AFRICA
2|103| CHINA
Theory/Analysis
As I have said in the heading we have to assign a unique ID for each and every group of records. Ok, got it Once again we need to compare current records and previous record if matched then increased SID otherwise start SID with 1. So, we have to use once again Expression Transformation and Variable Port. I am in love with these two :-)
Practically
Step 1: As usual Drag and Drop your Source to Mapping Designer.
Step 2:
Sorter
Sort the data based upon ID
ID key (Checked)
Note: If your Source is relational table you can sort it by overriding Sql.
Step 3:
Expression
Create Six Ports
New_SID (Variable Port)= 1
ID_COMPARE (Variable Port) = IIF(ID!=OLD_ID,ID,OLD_ID)
ID_CREATE (Variable Port) = IIF(ID=OLD_ID,OLD_SID+1,NEW_SID)
OLD_ID (Variable Port) = ID_COMPARE
OLD_SID (Variable Port) = ID_CREATE
SID (Output Port) = ID_CREATE
Note: Please follow order above of ports otherwise you won't be getting expected output.
Step 4: Connect to Target
BINGO!!!
Feel free to post your doubt in comment section.
Due to limitation, I can't attach exported .xml file which you can Import in your repository and see or analyse. (Feel free to mail me if you need .xml file with Scenario number and Question.)
If you like the approach and solution feel free to share with others.
Thanks.
hpandey.harsh@gmail.com
Hi,
ReplyDeleteI used another approch but not have the same result.
I created 4 variables like this:
v_Compteur_ID (variable port) = v_Old_Compteur+1
v_Old_Compteur (variable port) = IIF(v_Old_ID!=v_Current_ID,0,v_CompteurID)
v_Old_ID (variable port) = v_Current_ID
v_Current_ID (variable port) = ID
Out_SID (Output port) = v_Compteur_ID
Source files
---
ID | COUNTRY
101 | INDIA
102 | NEPAL
101 | AMERICA
103 | AFRICA
102 | JAPAN
103 | CHINA
104 | GERMAN
104 | USA
103 | ENGLAND
106 | FRANCE
104 | NIGER
105 | MALI
105 | ITALY
---
My target out file is :
-----
#SID|ID|COUNTRY
1|101| INDIA
2|101| AMERICA
1|102| NEPAL
2|102| JAPAN
1|103| AFRICA
2|103| CHINA
1|103| ENGLAND
2|104| GERMAN
3|104| USA
1|104| NIGER
2|105| MALI
3|105| ITALY
1|106| FRANCE
----
Thank you in advance for your return
ya it goo
ReplyDelete