SSIS, Работа со строками, которые зависят от других строк - PullRequest
1 голос
/ 25 октября 2010

Это довольно странная проблема, я не совсем знал, как ее назвать. У меня проблема с некоторыми строками данных в задаче служб SSIS, которые необходимо изменить в зависимости от других строк.

Name  Location  IsMultiple
Bob   England
Jim   Wales
John  Scotland
Jane  England

Упрощенный набор данных с некоторыми именами, их местоположениями и столбцом IsMultiple, который необходимо обновить, чтобы показать, какие строки имеют общие местоположения. (Строки Боба и Джейн помечаются как «True» в приведенном выше примере).

В моей ситуации гораздо более сложная логика, поэтому решения, использующие sql, не подойдут.

Вначале я думал использовать асинхронную задачу сценария, взять все строки данных, проанализировать их, а затем вывести их все после ввода самой последней строки. Единственный способ, которым я мог придумать, это вызвать создание строки в фазе PostExecute, которая не работала.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 25 октября 2010

Для решений SSIS на ум приходит несколько вариантов. При обоих вариантах вам понадобятся данные, отсортированные по местоположению. Если вы можете сделать это в своем источнике SQL, это было бы лучше всего. В противном случае у вас есть компонент Sort.

Используя отсортированные данные в качестве входных данных, вы можете использовать компонент Script, который сравнивает значения соседних строк, чтобы определить, существует ли несколько местоположений.

Другой вариант - разделить ваш путь к данным на две части. Сделайте это, добавив компонент Multicast. Первый путь будет вашим основным, который у вас есть. Во втором задании добавьте преобразование Aggregate после компонента Multicast. Отредактируйте агрегат и выберите «Расположение как операция по группам». Выберите (*) как считать все. Выходными данными будут строки с количеством мест.

После агрегирования добавьте компонент Merge Join и выберите в качестве входных данных первый и второй пути данных. Ключи соединения должны быть в столбце Расположение каждого пути. Все входы из пути 1 должны быть выходами и включать в себя счет из пути 2 в качестве выхода.

В производном столбце измените столбец isMultiple с помощью выражения, которое выражает «Если число больше 1, тогда true, иначе false».

1 голос
/ 25 октября 2010

Если возможно, я мог бы рекомендовать делать это с чистым SQL в задаче SQL в вашем потоке управления перед потоком данных. Простой UPDATE запрос, где вы GROUP BY определяете местоположение и делаете HAVING COUNT для всего, что больше 1, должно быть в состоянии сделать это. Но если это упрощенная версия, это может оказаться невозможным.

Если данные недоступны до тех пор, пока поток данных не будет завершен, вы можете поместить задачу SQL после потока данных в поток управления.

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