从SSRS数据集中获取数据

时间:2013-05-29 15:22:56

标签: reporting-services

是否可以(如果是 - 如何)从已发布到ReportServer的SSRS数据集中检索数据?

我有Azure报告服务设置,并发布了一个DataSource,DataSet和一个完全正常工作的报告。

我想要的是 - 能够访问“已发布的DataSet” - 就像某种XML API一样? 比如使用来自浏览器的params访问某个URL,并使用该DataSet中的Data获取XML结果

2 个答案:

答案 0 :(得分:2)

您将遇到的问题是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年你的NAMESPACE会有所不同:

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();
        }

答案 1 :(得分:0)

使用ReportExecution2005代理类 - 您可以执行报告并以XML格式获取它。我不确定,但我认为你也应该能够执行数据集。你可以在这里阅读更多相关信息:

Generate reports programmatically using the TFS API and SSRS