是否有可能(如果是-如何)从已发布到ReportServer的SSRS数据集中检索数据?
我有Azure报告服务设置,并发布了数据源,数据集和报告,工作得很好。
我想要什么-是能够访问"发布的数据集"-像某种XML API ?比如从浏览器中点击一些带有参数的URL,然后从该DataSet
您将遇到的问题是rsd (datasetFile)本身不是一个查询,因此发布ReportService2010的代理服务将为您提供数据,但您仍然必须处理XML分解。通过直接在SQL中查询'ReportServer' IMHO,从数据集中获取数据要容易得多。而不是从代理类中创建模型,通过调用这些类来获取数据,这样您就有了xml,您仍然需要查询以获取数据。
带有警告词的示例:(这可能只适用于我的数据集示例,而不适用于其他目录项):
use ReportServer
GO
Select
Path
, Name
, Content
, cast( cast(Content as varbinary(max)) as xml) as ContentAsXML
, cast(
cast(Content as varbinary(max))
as xml)
.query('declare namespace a="http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition";
/a:SharedDataSet/a:DataSet/a:Query/a:CommandText')
.value('.', 'varchar(max)') as QueryStatement
from dbo.Catalog
where type = 8
根据这家伙的写作:
http://bretstateham.com/extracting-ssrs-report-rdl-xml-from-the-reportserver-database/如果你决定你只是必须使用代理类,你将不得不记住调用名称空间,我用c#做了一个Xdocument方法来获取数据。没有数据集,但我做了数据源,这将是一个类似的方法。您主要是在foreach循环中为您想要的每个数据集执行此方法。请记住,2008年或2005年的名称空间将有所不同:
private List<string> GetDataSourceRefs(string aSourceLocation)
{
var xdoc = XDocument.Load(aSourceLocation);
// Need a namespace or else the xml elements will not be properly identified. Default below is for 2012 ONLY.
XNamespace ns = XNamespace.Get("http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition");
return xdoc.Descendants(ns + "DataSource")
.Elements(ns + "DataSourceReference")
.Select(x => x.Value)
.ToList();
}
使用ReportExecution2005代理类—您可以执行报告并获得XML格式的报告。我不确定,但我认为你也应该能够执行数据集。你可以在这里阅读更多信息:
使用TFS API和SSRS以编程方式生成报告