从SSRS数据集获取数据



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

我有Azure报告服务设置,并发布了数据源,数据集和报告,工作得很好。

我想要什么-是能够访问"发布的数据集"-像某种XML API ?比如从浏览器中点击一些带有参数的URL,然后从该DataSet

中获得一个带有Data的XML结果

您将遇到的问题是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以编程方式生成报告

最新更新