2009-05-11 7 views
4

Нам нужно иметь возможность динамически изменять источник данных для отчета, созданного/управляемого в построителе отчетов. В основном это одна и та же структура БД, но каждый клиент имеет свою собственную БД, поэтому в зависимости от параметра для ClientID, который ему требуется, динамически переходить к соответствующей БД.SQL Server 2005 Report Builder Как динамически изменять источник данных?

У кого-нибудь есть хорошие решения для этого?

ответ

1

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

CREATE PROCEDURE ProcedureName 
    -- Add the parameters for the stored procedure here 
    @clientName nvarchar(100) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 

declare @sql nvarchar(max) 

set @sql='select * from ' + @clientName + '.dbo.Products' 

exec(@sql) 


END 
GO 
+0

Вам нужно будет предположить, что разные клиентские базы данных работают на одном экземпляре SQL Server, чтобы это работало. – Eppz

+0

Я думаю, что проблема в работе с «построителем отчетов» требует использования сгенерированной «Модели». Мы хотели, чтобы Report Builder сообщал пользователям построителя, но может быть недоступен, если мы не сможем изменить базовое соединение, поскольку модель также подключена к нему ... по крайней мере, похоже. –

+0

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

1

Это похоже на проблему развертывания моделей отчетов на сервере. Вы можете решить, что (я думаю) вам нужно, приняв архитектуру, подобную той, которая описана ниже.

  • Создайте папку для каждого клиента на сервере отчетов. Настройте разрешения соответствующим образом, чтобы клиенты не могли запускать отчеты друг друга. Поместите папку в эту папку под названием «Источники данных» или некоторые из них и поместите все источники данных в эту папку. Это означает, что любой инструмент, который программно восстанавливает источники данных, точно знает, где источник данных живет относительно отчета. Обратите внимание, что источники данных также должны иметь конкретные, предсказуемые имена.

  • Напишите небольшое приложение .net, чтобы развернуть отчеты, источники данных и модели отчетов. Это проще, чем кажется, поскольку SSRS экспортирует довольно простой веб-сервис для этого.

  • IronPython - отличный способ поэкспериментировать с этим веб-сервисом и выяснить, как его управлять. Для этого вам нужно использовать генератор обертки WSDL (WSDL.EXE IIRC) и создать некоторые C#-заглушки. Скомпилируйте заглушки и зарегистрируйте библиотеку с помощью IronPython. Затем используйте интерактивную оболочку для экспериментов с API веб-сервисов. Перепишите на C#, если вы считаете, что он склонен.

  • Существует также инструмент в комплекте с SSRS под названием rs.exe, который берет файл VB.net, вершины и хвосты его и компилирует результат, поэтому вы можете использовать VB.net для написания сценариев, которые работают с сервером отчетов.

Это приложение .net будет развертывать отчеты и подключать источники данных. Установите его так, чтобы он мог развертываться в любой папке. Когда вы настраиваете клиента, настройте свои источники данных в папке «Источники данных», которую вы создали при создании своей папки. Вы можете программно развернуть файл отчета и подключить к нему источник данных в нескольких строках кода. Разверните отчеты в папке клиента.

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

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

Развертывание моделей отчетов аналогично, но имеет дополнительный поворот. Одним из свойств модели отчета является список отчетов, которые зависят от него.Вам нужно будет захватить этот список (опять же, это просто сделать программно) и повторно подключить отчеты к источнику данных (модель отчета : источник данных для этих отчетов).

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