Как получить отчеты, чтобы увидеть общие источники данных - PullRequest
17 голосов
/ 25 октября 2011

Я бегу 2008 R2

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

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

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

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

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

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

Ответы [ 8 ]

16 голосов
/ 17 апреля 2014

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

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

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

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

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

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

13 голосов
/ 26 октября 2011

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

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

RS Utility

5 голосов
/ 18 ноября 2015

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

update [ReportServer].[dbo].[DataSource]
set Link = '01B758F2-B597-43BE-A90F-416DF3CDA396'
where Name = 'PNLDS'
and Link is NULL
4 голосов
/ 30 июня 2015

Я обнаружил, что самый простой способ решить эту проблему - просто создать новый отчет, который использует общий источник данных. В 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 моего отчета в том же месте. Он с радостью использует этот источник данных во время предварительного просмотра и при повторном развертывании.

2 голосов
/ 15 февраля 2017

Определенно большой недостаток 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», которая ссылается на источник данных «/ Data Sources / DSTest» с именем «DStest».Чтобы выполнить повторное сопоставление, нам нужно создать ссылку на источник данных ($ ds), для которого нам сначала нужно было определить типы данных DataSource и DataSourceReference, выведя их из пространства имен объекта WebServiceProxy ($ proxy)

2 голосов
/ 21 декабря 2016

Оцените старый поток, но я пытался выяснить, может ли 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

Мне достаточно хорошо работает!

2 голосов
/ 18 января 2016

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

1 голос
/ 27 апреля 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...