Можно ли указать источник данных при выполнении отчета SSRS через веб-сервис? - PullRequest
6 голосов
/ 27 июля 2010

У меня есть один сервер, на котором размещены наши базы данных производства и разработки. Он работает под управлением SQL Server 2008 (не R2) со службами отчетов SQL Server.

Я развертываю проект служб отчетов VS 2008 на сервере для предоставления отчетов. Все отчеты используют один общий источник данных, в настоящее время указывающий на производственную базу данных.

Фоновая служба в другом месте создает отчеты в формате PDF через интерфейс веб-службы для SSRS.

Мой вопрос: , учитывая эту среду, можно ли программным образом изменить источник данных, который будет использоваться во время выполнения через веб-сервис, чтобы в отчете использовалась база данных dev или production? *

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

Единственное «простое» решение, которое я вижу, - это установить еще один экземпляр сервера отчетов, что кажется мне излишним. Я собираюсь сделать это, если у меня нет хитрого ответа для меня!

Ответы [ 3 ]

8 голосов
/ 31 июля 2010

Да, попробуйте это:

  1. Создайте два параметра отчета «Сервер» и «База данных» (вам, вероятно, следует создать значение по умолчанию, чтобы отчет запускался по умолчанию)
  2. определить источник данных как выражение следующим образом:

    = "источник данных =" & Параметры! Server.Value & "; исходный каталог =" & Параметры! Database.Value

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

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

Вы также можете передавать параметры через строку URL, например, так:

http://server/reportserver?/dir/Report&rs:Command=Render&Server=VALUE1&Database=VALUE2

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

4 голосов
/ 28 июля 2010

Редактировать - еще одно предложение

Пусть источник данных в Visual Studio указывает на базу данных разработки. Иметь развернутую точку источника данных в производственной базе данных. Установите источник данных, чтобы не перезаписывать существующие источники данных при развертывании. Это означает, что вся разработка в VS будет осуществляться против базы данных разработки, но при развертывании отчета он будет использовать ранее развернутый источник данных, который указывает на производственную базу данных.

Оригинальное предложение

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

Сила служб Reporting Services заключается в том, что все является выражением, а SQL для набора данных не отличается. Что мы делаем, это модифицируем SQL для использования базы данных, выбранной пользователем.

Он настроен следующим образом: На Sql Server в общей базе данных мы создаем таблицу с именем DatabaseLookup, которая имеет поля DatabaseLabel (отображаемое имя) и DatabaseName (фактическое имя базы данных) плюс INT SortOrder, чтобы мы могли упорядочивать базы данных последовательно в обратном порядке при создании нового один. В службах Reporting Services мы создаем источник данных, который указывает на нашу общую базу данных, и новый набор данных под названием Базы данных, который использует этот источник данных:

SELECT DatabaseLabel, DatabaseName
FROM DatabaseLookup
ORDER BY SortOrder

Параметр настроен под названием База данных, в которой используется набор данных Базы данных с полем Значение = Имя_базы_данных и поле Метка = DatabaseLabel, а по умолчанию это незапрашиваемая база данных.

Теперь мы модифицируем SQL для нашей основной таблицы отчета в выражение. Допустим, наш SQL выглядит так:

SELECT SomeField, OtherField
FROM SomeTable

Мы превращаем это в вычисляемое выражение, вот так:

="SELECT SomeField, OtherField "
&"FROM " & Parameters!Database.Value & ".dbo.SomeTable "

Метка выбранной базы данных также включена в заголовок мелким шрифтом, чтобы люди знали, на какие данные они смотрят.

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

0 голосов
/ 29 июля 2010

Мой текущий ответ (который меня не устраивает) - иметь 2 проекта VS 2008, содержащих отчеты.Один для отчетов о разработке и один для производства.Каждый использует свой источник данных и развертывается в одном экземпляре SSRS в / Reports / Development и /Reports/Production.

Отчеты разрабатываются / изменяются в проекте Dev и затем копируются в Production и имя источника данныхизменено, как только будет готово.

Я ненавижу это решение, но оно не может изменить источник данных при выполнении через веб-сервис и, как побочный эффект, позволяет мне помещать отчеты во время развертывания в разныепапки, которые невозможны из одного проекта VS.

Я до сих пор не считаю это ответом, 0 баллов за мою работу!:)

...