|  | 
| ETL-процесс с использованием веб-сервисов в Integration Services 2012Источник: habrahabr Alex509 Запасаем впрокИногда в процессе работы бывают нужны данные из веб-сервисов, тем более SOAP соединения сегодня практически стандарт. ETL-процесс (Extract - Transform - Load) это термин из Business Intelligence и описывает процесс сбора и трансформации данных для создания аналитической базы данных (например хранилища данных). SOAP протокол обмена данных и веб-сервисы описываемые WSDL - распространенные окна в мир практически всех ERP систем, многих онлайн порталов и финансовых организаций. Попробую описать пошагово ETL процесс с помощью одного из мощнейших инструментов в классе - MS Integration Services. Итак, рассмотрим тестовую задачу. 
 ЗадачаНеобходимо собрать данные о курсах валют по отношению к рублю на каждую дату прошлого года и загрузить их в таблицу для последующего анализа. Центробанк России предоставляет историчекие данные - в виде веб сервисов с неплохим описанием.  Создаем проектДля начала создадим проект в Business Intelligence Development Studio (А с недавних пор - SQL Server Data Tools) Во тулбоксе есть элемент Web-service-task, его мы и перенесем на рабочую область.  В строке HttpConnection создадим новое соединение - выбрав NewConnection  WSDL - файл доступен там-же, вот он www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL Все, переходим во вкладку Input 
 Тут можно выбрать среди сервисов и их методов - поставляемых провайдером.  
 Запустим процесс - дело пошло. Файл создается - курсы валют выгялядят как курсы валют.  В BI-студии есть XML-Source коннектор - он выдает нулевой результат при попытке натравить его на такой файл. (Схему считывает). Поставим после Web Service Task - Skript Task. 
 Workaround
 Скрытый текст Скрипт на C#, можно использовать весь инструментарий .net платформы и 2012 VisualStudio.  На выходе чистый XML - благодаря acceptChanges(); 
 Reconsidering the BeginningНеплохо было бы брать диапазон дат - и получать для каждой курсы валют, а потом записывать, дополнив курсы полем дата, в базу данных. Для начала создадим временное измерение, оно пригодится и еще не раз - в каждом хранилище данных. Я создаю своей вариацией подсмотенного в сети скрипта, вот он. 
 Скрытый текст Перенесем на рабочую область новый элемент 
 
 Базу TEST и OLE DB соединение localhost.TEST создали попутно. Как заставить процесс брать каждую дату из результата и передавать ее на WebServiceTask. С помощью переменных. 
 ПеременныеПравый щелчок на рабочей области - Variables. Или меню View - Other Windows - Variables. Это очень мощный инструмент, но мы упомянем его лишь вскользь, без него SSIS не могут и половины заявленного.  
 Теперь добавим последовательно к SQL-Task Foreach Loop Container.  Вот так он настраивается Созданая нами переменная Date типа Date - будет доступна внутри контейнера - так мы передадим актуальную для записи дату. Вот что мы положим в контейнер 
 Посмотрим что за DataFlow следует за нашим скриптом - там все просто. Читаем XML с помощью XML - Source,  
 В элементе Derived Column - вставляем нашу переменную Date - для записи в базу. Вот такой результат получается  |