*.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> 的必需元素。

RDL File XML schema