Udostępnij za pośrednictwem


Службы отчетности SQL Server в Облаке

 Прошу прощения за долгое отсутствие. По договоренности с коллегами свои недавние статьи я публиковал в блоге Microsoft на хабре. Тем не менее, на мой взгляд, Technet и MSDN - более целевая и заинтересованная аудитория, поэтому, что могу, я постараюсь перепостить здесь, т.к. эксклюзивный контракт с хабром не подписывал и на правах автора могу решать, как распорядиться своими творческими потугами. Единственно, повлечет некоторые накладные расходы, т.к. верстка для публикации на разных сайтах отличается. Если будет сильно доставать, напишу конвертер.

 

Облачная платформа Windows Azure как модель PaaS включает в себя не только СУБД-сервис Windows Azure SQL Databases (известный под именем SQL Azure), но и сервис отчетности Windows Azure SQL Reporting. Как известно, одним из преимуществ облачного подхода (независимо от провайдера облачных услуг) выступают эластичность и pay-for-play, т.е. привлечение ресурсов по мере надобности и плата за реально потребленные ресурсы, что избавляет организацию от необходимости приобретать навороченный дорогущий сервак, который будет большую часть времени простаивать и нагружаться только при закрытии отчетного периода. "Тяжеловесные" отчеты являются хорошими кандидатами на перевод в Облако. Технологическим преимуществом облачной отчетности является ее функциональная совместимость с on-premise технологией. Для разработчика, знакомого с SQL Server Reporting Services, процесс создания отчетов для Облака не будет отличаться от традиционных отчетов.

Сделанный в предыдущей статье отчет является достаточно незамысловатым, но на его примере можно в общих чертах разобрать процесс миграции отчета в Облако. Для начала создадим облачный сервер отчетности. Заходим в портал управления Windows Azure старого образца. В том, что вышел в виде preview в начале июня 2012 г., ни Reporting, ни Data Sync еще не реализованы. Если вы поспешили согласиться на предложение попробовать новый портал, нажмите на зеленую кнопку Preview вверху и выберите Take me to the previous portal. Нажимаем Reporting слева внизу:

 

image001

Рис.1

 

Поскольку облачных серверов отчетности в текущей подписке еще нет, будет предложено создать новый SQL Azure Reporting Server:

 

image002 

Рис.2

 

Службы отчетности доступны во всех действующих облачных датацентрах Microsoft. Я создам его в западноевропейском центре (Амстердам), поскольку там же располагается облачный SQL Server, на котором будут храниться данные, на основе которых строится отчет, а трафик в пределах датацентра бесплатный. Как и в случае создания SQL Server, имя генерируется автоматически и изменению не подлежит.

 

image003

Рис.3

 

Также будет предложено задать имя и пароль администратора сервера:

 

image004

Рис.4

 

после чего сервер готов к принятию и выполнению отчетов.

 

image005

Рис.5

 

Облачные отчеты создаются теми же инструментами (Report Designer в составе SSDT, Report Builder, что и локальные. Главная особенность состоит в том, что источником данных для него должна выступать Windows Azure SQL Database (SQL Azure), тогда как локальный отчет поддерживает массу встроенных и конфигурируемых источников данных:

 

image006

Рис.6

 

Как мы видим, среди них присутствует SQL Azure, что позволяет реализовать гибридный, или, если угодно, промежуточный сценарий, когда отчет выполняется на локальном сервере отчетности, используя при этом данные из Облака.

Несмотря на значительное пересечение по функциональности облачного и on-premise SQL Server, если данные берутся из SQL Azure, в качестве источника надлежит указывать SQL Azure, а не SQL Server. В противном случае при деплойменте получится ошибка

An error has occurred during report processing. Tracing ID is: f8806086-edd3-4a68-89b6-26bd33504f82. (rsProcessingAborted)

The execution failed for the shared data set 'DataSet1'. (rsDataSetExecutionError)

An attempt has been made to use a data extension 'SQL' that is either not registered for this report server or is not supported in this edition of Reporting Services. (rsDataExtensionNotFound)

 

Для начала данные, на основе которых строится отчет, следует из локальной базы перенести в SQL Azure. Это можно сделать, используя массу способов, из которых мы разбирали пять: bcp, SSIS, DACPAC, BACPAC, SQL Azure Data Sync, и их комбинаций.

Я выбираю для простоты способ Deploy Database to SQL Azure, который выполняет экспорт локальной базы в BACPAC и тут же импортит его на заданный сервер SQL Azure:

 

image007

Рис.7

 

image008

Рис.8

 

После того, как данные переехали в Облако, соединение DataSource1 в отчете нужно переделать с локального SQL Server на облачный:

 

image009

Рис.9

 

Теперь локальный отчет будет выполняться над облачными данными, как ранее над локальными. Если вдруг выскочит ошибка, что соединение с сервером было успешно установлено, но certificate's CN name does not match the passed value, добавьте в строку соединения Рис.9 ;TrustServerCertificate=True.

Перенесем отчет с локального Report Server в Облако. Самый простой способ это сделать - продеплоить его непосредственно из инструмента разработки, в данном случае, SSDT. В свойствах проекта (Project -> <имя проекта> Properties) в качестве Target Server Url указываем имя облачного сервера отчетности, которое мы видели в Azure Management Portal (Рис.5). Как обычно, задаем названия папок, куда будут помещаться общие источники данных и датасеты. Меняем свойства OverwriteDatasets и OverwriteDatasources на true. В противном случае, если датасет/источник данных с таким именем уже существует в этой папке, он не будет продеплоен:

------ Deploy started: Project: Report Project1, Configuration: Debug ------

Deploying to https://iijsstvk71.reporting.windows.net/ReportServer

Deploying data source '/Data Sources/DataSource1'.

Warning : Cannot deploy data source DataSource1 to the server because it already exists and OverwriteDataSources is not specified.

Deploying data set '/Datasets/DataSet1'.

Warning : Cannot deploy dataset DataSet1 to the server because it already exists and OverwriteDatasets is not specified.

 

image010

Рис.10

 

В строке меню SSDT перемещаемся на пункт Build и выбираем Deploy <имя проекта>.

 

image011

Рис.11

 

Идем в Azure Portal -> Reporting и замечаем, что по сравнению с Рис.5 на сервере отчетности образовались папки Data Sources, Datasets и Report Project1, как было заказано на Рис.10.

 

image012

Рис.12

 

Заходим в папку Report Project1, где наблюдаем свежепродеплоенный отчет:

 

image013

Рис.13

 

Обратите внимание на кнопку Upload в верхнем меню. Она позволяет продеплоить отчет «вручную», т.е. не обязательно для этого прибегать к SSDT/Report Builder. Источник данных можно также создать непосредственно на портале – кнопка меню Create Data Source. Кликаем на отчет, вводим логин и пароль для авторизации на сервере отчетов:

 

image014

Рис.14

 

Далее будет предложено ввести учетную запись, от имени которой Report Server обратится к источнику данных:

 

image015

Рис.15

 

и после ее ввода получаем уже знакомый отчет в облачном исполнении:

 

image016

Рис.16

 

Пользователи могут обращаться к отчету непосредственно по url, который мы видим в адресной строке, например, https://iijsstvk71.reporting.windows.net/ReportServer/Pages/ReportViewer.aspx?/Report%20Project1/Report1. Чтобы избежать постоянного ввода учетной записи, под которой сервер Azure Reporting ходит к SQL Azure, ее можно заперсистить в свойствах источника данных. Для этого на Рис.12 заходим в папку Data Sources, кликаем на Data Source1, отмечаем, что Credentials будут stored securely in the report server и вводим их. В этом случае окно Рис.15 выдаваться не будет.

 

image017

Рис.17

 

Если вы используете ReportViewer Control, вы можете также избежать явного ввода учетной записи Рис.14 для доступа к серверу Azure Reporting при помощи authentication cookie, как показано здесь.

 

Примечание.

Начиная с 1 августа 2012 г., Windows Azure SQL Reporting, находившийся в стадии бесплатного preview, будет доступен в режиме коммерческой эксплуатации, в связи с чем предлагают решить, что делать с ранее созданными серверами: удалить или перевести на платную основу.

 

image018

Рис.18

 

Ознакомиться с расценками можно при помощи калькулятора.

 

image019

Рис.19

 

Алексей Шуленин

Comments

  • Anonymous
    January 01, 2003
    Да, да, согласна :)