是否可以(如果是 - 如何)从已发布到 ReportServer 的 SSRS 数据集中检索数据?
我有 Azure 报告服务设置,并发布了一个数据源、数据集和一个运行良好的报告。
我想要的是能够访问那个“已发布的数据集”——就像某种 XML API 一样?假设使用浏览器中的参数点击某个 URL,并使用来自该 DataSet 的数据获取 XML 结果
是否可以(如果是 - 如何)从已发布到 ReportServer 的 SSRS 数据集中检索数据?
我有 Azure 报告服务设置,并发布了一个数据源、数据集和一个运行良好的报告。
我想要的是能够访问那个“已发布的数据集”——就像某种 XML API 一样?假设使用浏览器中的参数点击某个 URL,并使用来自该 DataSet 的数据获取 XML 结果
您将遇到的问题是 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();
}
使用 ReportExecution2005 代理类 - 您可以执行报告并以 XML 格式获取它。我不确定,但我认为您也应该能够执行数据集。你可以在这里读更多关于它的内容: