Это похоже на проблему развертывания моделей отчетов на сервере. Вы можете достичь того, что (я думаю) вам нужно, приняв архитектуру, подобную описанной ниже.
Создать папку для каждого клиента на сервере отчетов. Установите соответствующие разрешения, чтобы клиенты не могли запускать отчеты друг друга. Поместите папку в эту папку под названием «Источники данных» или что-то подобное и поместите все источники данных отчетов в эту папку. Это означает, что любой инструмент, который программно переподключает источники данных, точно знает, где находится источник данных относительно отчета. Обратите внимание, что источники данных также должны иметь конкретные, предсказуемые имена.
Напишите небольшое приложение .net для развертывания отчетов, источников данных и моделей отчетов. Это проще, чем кажется, поскольку SSRS экспортирует довольно простой веб-сервис для этого.
IronPython - неплохой способ поэкспериментировать с этим веб-сервисом и выяснить, как им управлять. Для этого вам нужно использовать генератор оболочки WSDL (WSDL.EXE IIRC) и сделать несколько заглушек на C #. Скомпилируйте заглушки и зарегистрируйте библиотеку с помощью IronPython. Затем используйте интерактивную оболочку для экспериментов с API веб-сервисов. Перепишите в C #, если вы чувствуете, что склонны.
Существует также инструмент, связанный с SSRS, который называется rs.exe, который берет файл VB.net, обрабатывает его и компилирует его, чтобы вы могли использовать VB.net для написания скриптов, которые работают с сервером отчетов. .
Это приложение .net будет развертывать отчеты и подключать источники данных. Настройте его так, чтобы он мог развертываться в любой заданной папке. Когда вы настраиваете клиента, настройте его источники данных в папке «Источники данных», которую вы настраивали при создании их папки. Вы можете программно развернуть файл отчета и подключить к нему источник данных в несколько строк кода. Разверните отчеты в папке клиента.
Параметризованный именем сервера и каталогом из командной строки, приложение может развернуть отчет и подключить свои источники данных к тому, который находится в папке «Источники данных». Ссылки на источники данных в отчетах могут иметь относительные пути, поэтому отчеты могут быть в блаженном неведении об их положении в иерархии.
Оберните его в пакетный файл или используйте другие средства для автоматического развертывания всего набора отчетов. В качестве бонуса это облегчает развертывание в тестовых средах. За дополнительные бонусные баллы вы можете расширить приложение, чтобы оно могло просматривать произвольные каталоги под корнем вашего клиента и загружать найденные там отчеты.
Развертывание моделей отчетов аналогично, но имеет дополнительные особенности. Одним из свойств модели отчетов является список отчетов, которые зависят от него. Вам нужно будет захватить этот список (опять же, это просто сделать программно) и повторно подключить отчеты к источнику данных (модель отчета является источником данных для этих отчетов).
Это позволяет вам развернуть (или клонировать, если вы реализовали функцию загрузки) любой набор отчетов и программно развернуть их в каталоге на сервере, который является специфическим для клиента. Это также дает вам простую модель безопасности, поскольку вы можете защитить доступ к отчетам через корневой каталог клиента.