使用 Informatica PowerCenter 比较 table 中记录之间的值

Comparing values between records in a table using Informatica PowerCenter

考虑 table 在数据库中包含以下记录:

>>> Table A:
Col_1  Col_2  Col_3
GGG     123    -
GGG     123    X
GGG     123    Y
KKK     786    X
MMM     999    Y
DDD     456    X
DDD     456    U

只要我们在 col_1 和 col_2 中有匹配值的记录,并且在 col_3 中有值 X 和 Y,则必须删除具有 X 和 Y 的记录。在其他情况下,我们应该保留记录。 例如在上面的 table 中,输出应该是这样的:

>>> Output_Table:
    Col_1  Col_2  Col_3
    GGG     123    -
    KKK     786    X
    MMM     999    Y
    DDD     456    X
    DDD     456    U

如何实现这个场景(使用表达式转换、变量端口、查找等...)?任何帮助将不胜感激。

可以有多种情况。我不确定您的问题是否与您描述的完全一样,但我会根据您的问题进行回答。

假设 Col_3 可以有 'X'、'Y' - 作为您要删除的硬编码值。您尝试删除的值是硬编码的。

  1. 首先根据Col_1,Col_2.
  2. 对数据进行排序
  3. 然后使用EXP转换,创建如下7个端口。在这里,我们将比较一行与其前一行,看看它们是否相同。如果相同,则将 col3 合并为一列。
col1
col2
in_col3
v_col3= iif(v_prev_col1=col1 and v_prev_col2=col2,col3,v_col3||''||col3)
v_prev_col1=col1
v_prev_col2=col2
o_col3=v_col3
  1. 之后使用聚合器 - 按端口分组将是 col1、col2。然后 col3 将是之前表达式中的 MAX(o_col3) 。 Agg 会将连接的 col3 标记为一列。

  2. 然后添加如下过滤器以检查重复行是否有 XY 或 YX。

iif(max_col3='XY' or reverse(max_col3)='XY',FALSE,TRUE)  -- You can place any hardcode values here.

编辑: 5. 现在,如果您想获取不包括 XY 组合的原始数据(如评论中的数据),请使用连接器。 现在使用连接器,连接步骤 4 的输出和步骤 1 的输出。这将是 Col_1、Col_2 上的正常连接。 joiner 的输出将没有 XY 组合。

整个映射应该是这样的

           |->2.EXP-->3.AGG-->4.FIL--|  
-->1.SRT ->|------------------------>|->5.JNR--...--> TGT