如何获取报告以查看共享数据源

时间:2011-10-25 19:57:29

标签: sql-server ssrs-2008 sql-server-2008-r2 reporting-services

我正在运行2008 R2

我有一整套报告,我必须加载到RS。这些是由第三方开发并发送给我们公司的。它们连接到共享数据源。我将报告上传到按功能分隔的文件夹中。问题是他们没有看到报告编写使用的数据源。我创建了一个共享数据源并将报告指向它。连接测试成功,但是当我运行报告时,我继续收到以下错误:

“报表服务器无法处理报表或共享数据集。报表服务器或SharePoint的共享数据源”dsMyObject“无效。浏览到服务器或站点并选择共享数据源。(rsInvalidDataReference)”< / p>

当我在嵌入式数据源中使用完全相同的凭据时,报表会运行,在我运行报表后,我可以将其更改回我创建的共享数据源,并且运行正常。

我的问题是这个过程效率太低我需要报告很多,还有更多服务器要滚动它,必须手动来回切换数据源才能使它工作。

我注意到,当我查看数据源列表时,我看到我在第一行创建的DS名称和下一行的位置(http:// [Server] / reports / [数据源文件夹])由供应商创建的DS在两行上都有DS的名称。这使我相信有一种方法可以将DS加载到SSRS中,并使用与供应商使用的相同名称来允许报告自动使用它们。我找不到任何告诉我如何做的事情所以我在这里问这个问题。如何获取预先编写的报告以查看我将报告部署到服务器的服务器上的共享数据源?

提前致谢,

8 个答案:

答案 0 :(得分:16)

我知道这是一个非常古老的问题,但我遇到过这个问题,因为过去两天我遇到了类似的问题。但是,根据我的经验,解决方案更简单 - 所以我会添加它,以防其他人在将来搜索此内容。

您需要先创建数据源,然后才能将报告部署到RS中。这就是我发生的事情:

1)我在添加数据源之前首先部署它们,但它们没有工作:既没有来自我正在处理的应用程序,也没有来自RS

2)然后,我创建了一个数据源,但对现有报告没有做任何事情。我能够配置其中的一些并将它们指向新的数据源,这是有效的。如果您想批量执行此操作,您可能会使用上面建议的RS实用程序或something like this,但我还没有尝试过这些。

3)我尝试将报告重新部署到RS中,但显然RS并没有覆盖因重新部署的报告仍然没有获取数据源而无法改变的项目

4)然后我删除了现有报告并重新部署 - 这修复了它,他们立即获取了数据源。

答案 1 :(得分:13)

这是SSRS的一大缺点。在SSRS中创建报告和数据源时,会在ReportServer数据库中为它们分配唯一标识符。上载报告时,它们无法识别与报告构建时具有相同名称的现有数据源。

解决此问题的一种方法是使用SSRS附带的rs.exe实用程序。它可用于批量任务,包括在报告上设置数据源元数据。有关更多技术信息,请参阅以下链接。

RS Utility

答案 2 :(得分:5)

使用共享数据源手动更新一个报告。在[ReportServer].[dbo].[DataSource]表中,记下该报告的“链接”值,然后只需更新Name列中包含数据源的重置

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

答案 3 :(得分:4)

我发现解决此问题的最简单方法是创建一个使用共享数据源的新报告。在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 :(得分:2)

在我的情况下,我必须单击SSRS中报告右侧的下拉箭头,选择“管理”,然后选择“数据源”,然后浏览到报告需要使用的共享数据源的位置

答案 5 :(得分:2)

感谢旧线程,但我试图找出SSRS是否可以报告它正在使用哪个共享数据源,因此我可以向SSRS报告添加警告,以防它在部署时仍指向错误的数据源。我想出的解决方案只有在你为Dev / UAT / Prod使用不同的服务器时才有效,但是你可以在你的tsql脚本中粘贴@@SERVERNAME

我已经把它变成了一个案例陈述,我可以在我的报告上打字

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

对我来说效果很好!

答案 6 :(得分:2)

绝对是SSRS的一大缺点。 这里发布的许多好的答案适合不同的场景,技能组合和工具。 我在Powershell上使用Class Sys.Net.WebServiceProxy添加另一个:

# 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)

说明:

主要思想是利用类Sys.Net.WebServiceProxy中的方法SetItemDataSources(x,y)将报表x上的数据源y.name设置为指向数据源引用y.item。 在我们的例子中,该报告称为TestReport,位于文件夹“/ Reports”上,它通过名称“DStest”引用数据源“/ Data Sources / DSTest”。 为了完成重定位,我们需要创建一个对数据源($ ds)的引用,我们首先需要通过从WebServiceProxy对象的命名空间($ proxy)派生它们来定义数据类型DataSource和DataSourceReference

答案 7 :(得分:1)

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