1

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

我有 Azure 报告服务设置,并发布了一个数据源、数据集和一个运行良好的报告。

我想要的是能够访问那个“已发布的数据集”——就像某种 XML API 一样?假设使用浏览器中的参数点击某个 URL,并使用来自该 DataSet 的数据获取 XML 结果

4

2 回答 2

3

您将遇到的问题是 rsd(datasetFile)本身并不多,而是一个查询,因此发布 ReportService2010 的代理服务将为您获取数据,但您仍然必须处理 XML 粉碎。通过直接在 SQL 中查询“ReportServer”恕我直言,从数据集中获取数据要容易得多。不是从代理类中创建模型,而是从调用这些类中获取数据,然后您仍然需要查询 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();
        }
于 2013-05-29T19:06:09.770 回答
0

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

使用 TFS API 和 SSRS 以编程方式生成报告

于 2013-05-29T15:30:12.020 回答