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

Я запускаю 2008 R2

У меня есть целый набор отчетов, которые я должен загрузить в RS. Они были разработаны и отправлены нашей компанией третьей стороной. Они подключаются к общему источнику данных. Я загрузил отчеты в папки, которые отделяли их по функциям. Проблема заключается в том, что они не видят источник данных, который отчеты записывают для использования. Я создал общий источник данных и указал на него отчет. Соединение успешно протестировано, но когда я запустил отчет, я продолжал получать следующую ошибку:

"Сервер отчетов не может обрабатывать отчет или общий набор данных. Недопустимый общий источник данных" dsMyObject "для сервера отчетов или SharePoint. Перейдите на сервер или сайт и выберите общий источник данных. (RsInvalidDataReference)"

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

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

Я заметил, что когда я просматриваю список источников данных, я вижу те, которые я создал с именем DS в первой строке, и местоположение на следующем (http://[Сервер]/отчеты/[Папка источника данных ]), а DS, созданный поставщиком, имеет имя DS на обеих линиях. Это заставляет меня думать, что есть способ загрузить DS в SSRS с тем же именем, которое поставщик использовал таким образом, чтобы отчеты автоматически использовали их. Я не могу найти что-нибудь, что подскажет мне, как это сделать, поэтому я задаю этот вопрос здесь. Как получить предварительно записанные отчеты, чтобы увидеть общий источник данных на сервере, на котором я развертываю отчеты?

Заранее спасибо,

Ответ 1

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

Один из способов - использовать утилиту rs.exe, которая поставляется с SSRS. Он может использоваться для массовых задач, включая установку метаданных источника данных в отчетах. См. Ссылку ниже для получения дополнительной технической информации.

Утилита RS

Ответ 2

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

Перед развертыванием отчетов в RS необходимо создать источник данных. Вот что случилось для меня:

1) Я сначала развернул их перед добавлением источника данных, и они не работали: ни из приложения, в котором я работаю, ни из RS

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

3) Я попытался перераспределить отчеты в RS, однако, по-видимому, RS не перезаписывает элементы, которые не изменились, поскольку повторно развернутые отчеты все еще не забирали источник данных

4) Затем я удалил существующие отчеты и перераспределил - это исправило это, и они сразу же взяли источник данных.

Ответ 3

Я нашел самый простой способ разрешить это: просто создать новый отчет, который использует общий источник данных. В SSRS2012/VS2010 первая страница мастера запрашивает, следует ли использовать "Общий источник данных" или создать "Новый источник данных". Принимая первый вариант (и продолжая создавать фиктивный отчет и сохраняя его), получается RDL, содержащий раздел между секцией и секцией, примерно так:

  <DataSources>
    <DataSource Name="shared_datasource_name">
      <DataSourceReference>shared_datasource_name</DataSourceReference>
      <rd:SecurityType>None</rd:SecurityType>
      <rd:DataSourceID>f00b5045-1a8c-44be-952b-cca1ce9c57d6</rd:DataSourceID>
    </DataSource>
  </DataSources>

Я просто скопировал этот раздел в мой запланированный отчет RDL в том же месте. Он с радостью использует этот источник данных во время предварительного просмотра и при повторном развертывании.

Ответ 4

Обновите один отчет вручную с помощью общего источника данных. В [ReportServer].[dbo].[DataSource] обратите внимание на значение "Ссылка" для этого отчета, а затем просто обновите сброс, который имеет источник данных в столбце " Name

update [ReportServer].[dbo].[DataSource]
set Link = '01B758F2-B597-43BE-A90F-416DF3CDA396'
where Name = 'PNLDS'
and Link is NULL

Ответ 5

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

Ответ 6

Оцените старый поток, но я пытался найти, может ли SSRS сообщить о том, какой общий источник данных он использует, поэтому я мог бы добавить предупреждение в отчет SSRS, если он все еще указывает на неправильный источник данных при развертывании. Решение, к которому я пришел, по общему признанию, работает только в том случае, если вы используете разные серверы для Dev/UAT/Prod, но вы можете использовать @@SERVERNAME в своем сценарии tsql.

Я сделал это в заявлении, в котором я могу запечатлеть свои отчеты

select case @@SERVERNAME when 'Prodserver' then '' 
else 'WARNING: This report is not looking at production data!' end as ServerWarning

Хорошо работает для меня!

Ответ 7

Определенно большой недостаток SSRS. Здесь написано много хороших ответов, которые соответствуют различным сценариям, наборам навыков и инструментам. Я добавляю еще один, используя класс Sys.Net.WebServiceProxy на Powershell:

# Create WebServiceproxy object
[string] $WebServiceUri="http://localhost/ReportServer/ReportService2010.asmx?wsdl"
$proxy=New-WebServiceProxy -uri $WebServiceUri -UseDefaultCredentails

# Define required data types (DataSource and DataSourceReference) and instantiate
$typeds=($proxy.gettype().namespace) + '.DataSource'
$ds=new-object -TypeName $typeds

$typedsref=($proxy.gettype().namespace) + '.DataSourceReference'
$reference=new-object -TypeName $typedsref

# Set data source object with reference and name
$reference.Reference="/Data Sources/DStest" # path/name of the data source
$ds.Item=$reference
$ds.Name="DStest" # name of the data source on the report

# Repoint data source on report
$ReportPath="/Reports/TestReport" # path/name of the report
$proxy.SetItemDataSources($ReportPath, $ds)

Объяснение:

Основная идея заключается в использовании метода SetItemDataSources (x, y) из класса Sys.Net.WebServiceProxy для установки источника данных y.name в отчете x для указания ссылки на источник данных y.item. В нашем случае отчет называется TestReport, расположенный в папке "/Reports", которая ссылается на источник данных "/Источники данных /DSTest" под названием "DStest". Чтобы выполнить повторное назначение, нам нужно создать ссылку на сущность данных ($ ds), для которой нам сначала нужно было определить типы данных DataSource и DataSourceReference, выведя их из пространства имен объекта WebServiceProxy ($ proxy)

Ответ 8

I was able to bulk update and fix the problem by updating the data source link using the T-SQL below.
begin tran
update dbo.DataSource
set Link = c.ItemID 
from dbo.DataSource ds 
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
where ds.link is null

select ds.Link oldlink, c.ItemID 
from dbo.DataSource ds 
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
--where ds.link is null


select *
from dbo.DataSource ds 
where ds.link is null

rollback tran
-- commit tran 
http://tsqlblog.blogspot.co.uk/2011/05/rsinvaliddatasourcereference-on.html