Соответствие шаблону строки поиска Informatica - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица подстановки (загруженная из плоского файла пользователя) только с двумя столбцами, один из которых является столбцом соединения, а другой - желаемым выходом.

Мой столбец исходных данных A содержит образцы данных, например:

999-55555-000-400-9999

800-22222-123-777-2233

и так далее ... 500К записей.

Теперь таблица поиска выглядит следующим образом:

Столбец B || Колонка C

999-X-000-400-X || Джон

X-22222-X-777-X || Смит

Требование: если данные исходного столбца A соответствуют формату данных столбца B таблицы поиска, в качестве вывода будет возвращено значение из столбца C.

Как я могу добиться этого с помощью LKP и преобразования выражений (не используя Java, так как я плохо разбираюсь в этом). Если для таблицы LKP требуется дополнительный столбец, который можно добавить, когда я загружаю туда данные из плоского файла. Буду признателен, если кто-то может помочь в этом?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Я считаю, что вы можете выполнить этот поиск после некоторой подготовки ваших данных. После разделения полей вам не понадобится оператор LIKE, а только точное соответствие для подполей.

Для данных поиска измените столбец B на 5 столбцов:

B1 || B2  || B3  || B4  || B5 || Column C
999 || X || 000 || 400 || X || John
X || 22222 || X || 777 || X || Smith

Для входных данных сделайте аналогичное разбиение:

IN1 || IN2 || IN3 || IN4 || IN5
999 || 55555 || 000 || 400 || 9999
800 || 22222 || 123 || 777 || 2233

Теперь вам нужно будет использовать ... 5 Lookups, по одному на каждое подполе

Lkp1
Condition : IN1 = B1
Output : Match1_B1, Match1_B2, Match1_B3, Match1_B4, Match1_B5, Match1_Column_C

Lkp2
Condition : IN2 = B2
Output : Match2_B1, Match2_B2, Match2_B3, Match2_B4, Match2_B5, Match2_Column_C

И так далее на 5

Для первой строки вы получите:

Match1_B1 : 999
Match1_B2 : X
Match1_B3 : 000
Match1_B4 : 400
Match1_B5 : X
Match1_Column_C : John
Match2_B1 : NULL
Match2_B2 : NULL 
Match2_B3 : NULL
Match2_B4 : NULL
Match2_B5 : NULL
Match2_Column_C : NULL
Match3_B1 : 999
Match3_B2 : X
Match3_B3 : 000
Match3_B4 : 400
Match3_B5 : X
Match3_Column_C : John
Match4_B1 : 999
Match4_B2 : X
Match4_B3 : 000
Match4_B4 : 400
Match4_B5 : X
Match4_Column_C : John
Match5_B1 : NULL
Match5_B2 : NULL 
Match5_B3 : NULL
Match5_B4 : NULL
Match5_B5 : NULL
Match5_Column_C : NULL

Теперь в выражении вы связываете все поисковые запросы и проверяете, совпадают ли подполя:

IIF( (ISNULL(Match1_B1) OR Match1_B1 != 'X')
AND (ISNULL(Match2_B2) OR Match2_B2 != 'X')
AND (ISNULL(Match3_B3) OR Match3_B3 != 'X')
AND (ISNULL(Match4_B4) OR Match4_B4 != 'X')
AND (ISNULL(Match5_B5) OR Match5_B5 != 'X'),
    IIF(ISNULL(Match1_Column_C),
        IIF(ISNULL(Match2_Column_C),
            IIF(ISNULL(Match3_Column_C),
                IIF(ISNULL(Match4_Column_C),
                    Match5_Column_C,
                    Match4_Column_C
                ),
                Match3_Column_C
            ),
            Match2_Column_C
        ),
        Match1_Column_C
    )
)            

Надеюсь, это должно быть примерно так, как вы хотите!

0 голосов
/ 06 мая 2020

Вам нужно просто отметить столбец B и столбец A в качестве порта поиска в преобразовании поиска и столбец C как порт вывода.

Это все, что вам нужно сделать. Помните, что преобразование поиска работает как левое внешнее соединение в вашем наборе данных. Итак, если значение в столбце A совпадает с столбцом B, тогда будет возвращен столбец C, иначе вы получите null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...