informatica显示基于2个属性的最新状态

时间:2015-02-08 08:37:48

标签: sql database oracle etl informatica

我需要根据2个属性(LAST_UPDATE和STAUS)显示最新状态 我怎么能在informatica中做到这一点?来源是平面文件

示例:

NUMBER --------------------LAST_UPDATE ----------------- STATUS  
-----1 -----------------------01/26/2015  ----------------------   CREATED                  
-----1 ----------------------   01/27/2015  ------------------UNDER_PROCCESS                           
-----1----------------------    01/28/2015  ---------------------COMPLETED  
 -----2---------------------- 01/28/2015 ------------------ CREATED  
-----3---------------------- 01/28/2015 --------------------- UNDER_PROCCESS

结果应为

NUMBER --------------------LAST_UPDATE ------------- STATUS  ---------------LAST_STAUS  
-----1 -----------------------01/26/2015  ----------------------   CREATED -----------COMPLETED                 
-----1 ----------------------   01/27/2015  -----------------UNDER_PROCCESS ---- COMPLETED                           
-----1----------------------    01/28/2015  ---------------------COMPLETED ----------COMPLETED  
 -----2---------------------- 01/28/2015 ------------------ CREATED  ---------------- CREATED  
-----3---------------------- 01/28/2015 -------------UNDER_PROCCESS --UNDER_PROCCESS                           

1 个答案:

答案 0 :(得分:0)

您可以使用聚合器转换,也可以使用变量端口在表达式转换中进行转换。

使用聚合器

  1. 在分拣机转换中,按NUMBER和LAST_UPDATE按升序排序
  2. 在NUMBER上的聚合器组中。 (可选)使用LAST功能获取最新状态。默认情况下,Aggregator将输出STATUS的最后一行的值。
  3. 使用joiner加入Aggregator和Sorter的输出。

    SQ ----> Sorter -----> Agg----> Joiner ----> Target
               |_____________________^
    
  4. 使用表达式

    1. 按NUMBER(升序)和LAST_UPDATE(降序)
    2. 对数据进行排序
    3. 在表达式转换中:

      NUMBER (i/o)
      LAST_UPDATE (i/o)
      STATUS (i/o)
      v_LAST_STATUS (v) = IIF(STATUS<>v_PREV_STATUS, STATUS,v_PREV_STATUS)
      LAST_STATUS (o) = v_LAST_STATUS
      v_PREV_STATUS (v) = STATUS
      

      确保端口顺序正确。