根据我的earlier questions,当我的数据中包含可变数量的地址时,如何使用Informatica PowerCenter Designer转移数据。我想从我的数据中转发四个地址。这是源数据文件的结构:
+---------+--------------+-----------------+
| ADDR_ID | NAME | ADDRESS |
+---------+--------------+-----------------+
| 1 | John Smith | JohnsAddress1 |
| 1 | John Smith | JohnsAddress2 |
| 1 | John Smith | JohnsAddress3 |
| 2 | Adrian Smith | AdriansAddress1 |
| 2 | Adrian Smith | AdriansAddress2 |
| 3 | Ivar Smith | IvarAddress1 |
+---------+--------------+-----------------+
这应该是结果表:
+---------+--------------+-----------------+-----------------+---------------+----------+
| ADDR_ID | NAME | ADDRESS1 | ADDRESS2 | ADDRESS3 | ADDRESS4 |
+---------+--------------+-----------------+-----------------+---------------+----------+
| 1 | John Smith | JohnsAddress1 | JohnsAddress2 | JohnsAddress3 | NULL |
| 2 | Adrian Smith | AdriansAddress1 | AdriansAddress2 | NULL | NULL |
| 3 | Ivar Smith | IvarAddress1 | NULL | NULL | NULL |
+---------+--------------+-----------------+-----------------+---------------+----------+
我想我可以使用
消息来源 - > SOURCE_QUALIFIER - > SORTER - > AGGREGATOR - >表达 - >目标表
但是我应该在AGGREGATOR和EXPRESSION转换中使用哪种端口?
答案 0 :(得分:1)
试试这个:
消息来源 - > SOURCE_QUALIFIER - > RANK - > AGGREGATOR - > TARGET
在RANK转换中,按ADDR_ID分组并选择ADDRESS作为排名端口。在“属性”选项卡中,选择“排名数”为“4”。
在AGGREGATOR转换组中按ADDR_ID并使用以下输出端口表达式(RANKINDEX将由RANK转换生成):
ADDRESS1 = MAX(ADDRESS,RANKINDEX=1)
ADDRESS2 = MAX(ADDRESS,RANKINDEX=2)
ADDRESS3 = MAX(ADDRESS,RANKINDEX=3)
ADDRESS4 = MAX(ADDRESS,RANKINDEX=4)
答案 1 :(得分:1)
你应该使用以下内容:
Source->Expression->Aggregator->Target
在表达式中,添加一个变量端口:
v_count expr: IIF(ISNULL(v_COUNT) OR v_COUNT=3, 1, v_COUNT + 1)
OR
v_count expr: IIF(ADDR_ID=v_PREVIOUS_ADDR_ID, v_COUNT + 1, 1)
和3个输出端口:
o_addr1 expr: DECODE(TRUE, v_COUNT=1, ADDR_IN, NULL)
o_addr2 expr: DECODE(TRUE, v_COUNT=2, ADDR_IN, NULL)
o_addr3 expr: DECODE(TRUE, v_COUNT=3, ADDR_IN, NULL)
然后使用聚合器,按ID分组并始终选择Max, 例如
agg_addr1: expr: MAX(O_ADDR1)
agg_addr2: expr: MAX(O_ADDR2)
agg_addr3: expr: MAX(O_ADDR3)
如果需要更多非规范化端口,请添加其他端口并设置初始状态 相应的v_count变量。