*.rdl文件隐秘,如何判断子报表的来源?
How can I determine the source of the subreport when the *.rdl file is secretive?
我正在使用在 SQL Server Report Builder 中创建的报告使用的相同数据源生成电子表格。我下载了报告的 *.rdl 文件,并使用它生成的三个数据集,两个来自简单查询,一个来自复杂存储过程。
MS SQL Server Report Builder 中的 *.rdl 文件和项目都显示只有这两个查询和存储过程显然与此报告有关。
我成功获取了所有这些数据 - 两个查询提供了我用来填充组合框的值,以及存储过程 returns 我在报告的 "Summary" 部分中使用的几个字段。
但是,我可以从 SSRS(网页)或直接从 Report Builder 生成的遗留报告还打印了 "Summary" 部分下方的 "Detail" 部分。
我不知道这些数据来自哪里 - *.rdl 文件仅包含对 "subreport" 的引用作为线索:
<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
}
...但它永远不会超过用于填充 report/spreadsheet.
的 "Summary" 部分的几个字段
如果我为 "Type" 参数提供一个值,是否有可能获得更多数据?即使是这样,对我来说,vexing/perplexing 似乎在 *.rdl 文件中没有引用此子报表的数据源。
更新
是否可以在*.rdl文件中为用户权限提供"Type"参数? (我现在在家,无法查看它,但我想知道这是否是 *.rdl 文件的常见模式,或者至少是可能的模式)。
如果是这样,可能 Type 参数提供了 returns 那些额外的字段。
rdl
中的 <Subreport>
元素具有必需的子元素 <ReportName>
。
如果您查看该元素的值,它应该有一个到子报表的路径(根据 SSRS 服务器上的伪文件夹)。您应该能够转到 SSRS 服务器上的该路径,并以与主报表相同的方式下载子报表的 RDL
文件。
我创建了一些测试报告和子报告来检查这一点。然后我做了一些挖掘以在网上找到文档——它不是 so 神秘的,但它也不是那么容易找到。
RDL
文件 XML 的架构清楚地表明 <ReportName>
是 <Subreport>
的必需元素。
我正在使用在 SQL Server Report Builder 中创建的报告使用的相同数据源生成电子表格。我下载了报告的 *.rdl 文件,并使用它生成的三个数据集,两个来自简单查询,一个来自复杂存储过程。
MS SQL Server Report Builder 中的 *.rdl 文件和项目都显示只有这两个查询和存储过程显然与此报告有关。
我成功获取了所有这些数据 - 两个查询提供了我用来填充组合框的值,以及存储过程 returns 我在报告的 "Summary" 部分中使用的几个字段。
但是,我可以从 SSRS(网页)或直接从 Report Builder 生成的遗留报告还打印了 "Summary" 部分下方的 "Detail" 部分。
我不知道这些数据来自哪里 - *.rdl 文件仅包含对 "subreport" 的引用作为线索:
<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
}
...但它永远不会超过用于填充 report/spreadsheet.
的 "Summary" 部分的几个字段如果我为 "Type" 参数提供一个值,是否有可能获得更多数据?即使是这样,对我来说,vexing/perplexing 似乎在 *.rdl 文件中没有引用此子报表的数据源。
更新
是否可以在*.rdl文件中为用户权限提供"Type"参数? (我现在在家,无法查看它,但我想知道这是否是 *.rdl 文件的常见模式,或者至少是可能的模式)。
如果是这样,可能 Type 参数提供了 returns 那些额外的字段。
rdl
中的 <Subreport>
元素具有必需的子元素 <ReportName>
。
如果您查看该元素的值,它应该有一个到子报表的路径(根据 SSRS 服务器上的伪文件夹)。您应该能够转到 SSRS 服务器上的该路径,并以与主报表相同的方式下载子报表的 RDL
文件。
我创建了一些测试报告和子报告来检查这一点。然后我做了一些挖掘以在网上找到文档——它不是 so 神秘的,但它也不是那么容易找到。
RDL
文件 XML 的架构清楚地表明 <ReportName>
是 <Subreport>
的必需元素。