当*.rdl文件是机密文件时,我如何确定子报表的来源
本文关键字:文件 何确定 报表 rdl 机密 | 更新日期: 2023-09-27 18:27:09
我正在使用SQL Server报表生成器中创建的报表所使用的相同数据源生成电子表格。我下载了报告的*.rdl文件,并使用它生成的三个数据集,其中两个来自简单查询,一个来自复杂的存储过程。
*.rdl文件和MS SQL Server报表生成器中的项目都向我表明,只有这两个查询和存储过程与此报表明显相关。
我成功地获得了所有这些数据——这两个查询提供了我用来填充组合框的值,而存储过程返回了我在报告的"摘要"部分中使用的几个字段。
然而,我可以从SSRS(网页)或直接从报表生成器生成的遗留报表也可以在"摘要"部分下方打印"详细信息"部分。
我不知道这些数据来自哪里——*.rdl文件只包含对"子报表"的引用作为线索:
<Subreport Name="subreport1">
<Parameters>
<Parameter Name="BegDate">
<Value>=Parameters!BegDate.Value</Value>
</Parameter>
<Parameter Name="EndDate">
<Value>=Parameters!EndDate.Value</Value>
</Parameter>
<Parameter Name="Member">
<Value>=Parameters!Member.Value</Value>
</Parameter>
<Parameter Name="Unit">
<Value>=Parameters!Unit.Value</Value>
</Parameter>
<Parameter Name="Type">
<Value>=Fields!T.Value</Value>
</Parameter>
</Parameters>
. . .
我不提供"Type"参数——我使用其他四个参数获得"Summary"数据。并且子报表中显示的值不会出现在*.rdl文件中。这些可能是从哪里来的?
我以这种方式查找存储过程的返回值:
string[] columnNames = dtPriceComplianceResults.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
if (columnNames.Length > 5)
{
MessageBox.Show("more than 5");
// TODO: If there are more fields, use these to generate the "Details" section of the report
}
但它从来没有超过用于填充报告/电子表格的"摘要"部分的几个字段。
如果我给"Type"参数提供一个值,我可能会得到更多的数据吗?即便如此,*.rdl文件中似乎没有引用该子报表的数据源,这让我非常烦恼/困惑。
更新
是否可能在*.rdl文件中为用户权限提供了"Type"参数?(我现在在家,无法查看,但我想知道这是否是*.rdl文件的常见模式,或者至少是可能的模式)。
如果是这样,那么Type参数可能会返回这些附加字段。
rdl
中的<Subreport>
元素有一个必需的<ReportName>
子元素。
如果查看该元素的值,它应该有一个子报表的路径(根据SSRS服务器上的伪文件夹)。您应该能够转到SSRS服务器上的该路径,并像下载主报表一样下载子报表的RDL
文件。
我创建了一些测试报告和子报告来检查这一点。然后我在网上搜索了一些文档——它不是所以是秘密的,但也不那么容易找到。
RDL
文件XML的模式清楚地表明<ReportName>
是<Subreport>
所必需的元素。
RDL文件XML模式