使用 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' - 作为您要删除的硬编码值。您尝试删除的值是硬编码的。
- 首先根据Col_1,Col_2.
对数据进行排序
- 然后使用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
之后使用聚合器 - 按端口分组将是 col1、col2。然后 col3 将是之前表达式中的 MAX(o_col3) 。 Agg 会将连接的 col3 标记为一列。
然后添加如下过滤器以检查重复行是否有 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
考虑 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' - 作为您要删除的硬编码值。您尝试删除的值是硬编码的。
- 首先根据Col_1,Col_2. 对数据进行排序
- 然后使用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
之后使用聚合器 - 按端口分组将是 col1、col2。然后 col3 将是之前表达式中的 MAX(o_col3) 。 Agg 会将连接的 col3 标记为一列。
然后添加如下过滤器以检查重复行是否有 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