代码之家  ›  专栏  ›  技术社区  ›  Juliet

使用SQL Server Reporting Services将数据集传递到子报表

  •  1
  • Juliet  · 技术社区  · 16 年前

    我正在使用SQL Server Reporting Services和Visual Studio附带的报表设计器。我有一个 真大 报告。它实际上非常大,以致于Visual Studio挂起(有时一次挂几个小时),或者在我进行更改时崩溃。

    为了解决这个问题,我几乎无能为力,所以我决定把报告的下半部分改成一个子报告。所以,我从一个巨大的、无响应的报告开始,到两个小的、可管理的报告结束——令人惊讶的是,这确实有效。

    一个问题:我的子报表使用与主报表相同的数据。现在,它通过重新查询数据库来填充其数据集。对数据库的额外往返会导致生成报告花费两倍的时间;从45分钟增加到1 1/2小时。

    我希望避免再次访问数据库,而是在两个报表中使用相同的数据集。

    如何在报表和子报表之间共享或传递数据集?

    6 回复  |  直到 13 年前
        1
  •  0
  •   CodeRedick    16 年前

    我敢肯定你做不到。你最好是想办法重新设计报告,使它不那么大…更不用说导出到Excel时子报表的各种问题了。

        2
  •  3
  •   Saw    13 年前

    我认为这可以帮助你: http://www.gotreportviewer.com/subreports/index.html

    为子报表提供数据-子报表处理事件 为必须处理的子报表提供数据 子报表处理事件。请注意,此事件位于LocalReport上 对象。您可以添加这样的事件处理程序:

    private void MainForm_Load(object sender, EventArgs e)
    {
        this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(MySubreportEventHandler);
    }
    

    下面是事件处理程序的示例。在这个例子中 LoadSalesData被定义为返回数据表。

    void MySubreportEventHandler(object sender, SubreportProcessingEventArgs e)
    {
        e.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));
    }
    

    如果报表有多个子报表,则可以查看报表路径 SubreportProcessingEventArgs的属性,并为 对应的子报表。您可能还需要检查 SubreportProcessingEventArgs的参数属性,仅返回 与子报表参数对应的数据子集,如 这里提到的。

        3
  •  0
  •   Chris Latta    16 年前

    我有几个报告说,SQL非常复杂,当我试图编辑它时,它会锁定Visual Studio。在这些报告中,我直接进入代码视图并直接编辑XML,这是可行的。当Visual Studio神秘地使列比我设置的略宽时,我也会这样做。但是,如果您编辑的报表布局太多,我怀疑您是否愿意沿着这条路径前进。

    不是在报表中运行查询,而是可以使用两个报表都使用的存储过程来构建表吗?第一个报表运行存储过程来构建表,然后两个报表只查询报表。如果报告可以由多个用户运行,请注意并发问题。

        4
  •  0
  •   V'rasana Oannes    16 年前

    是否尝试在两个列表都使用相同数据集的列表中使用列表,然后筛选内部列表以仅显示链接到外部列表的记录?

    就执行时间而言,45分钟一开始似乎是一段很长的时间。我假设您已经对执行计划做了一些分析,以验证您的查询或存储过程是否使用了有意义的索引?

    希望这有帮助,

    比尔

        5
  •  0
  •   Duncan    15 年前

    您可以使用一个虚拟参数:

    i.在主报表“mydata”中创建一个参数并勾选“internal”

    二。将“mydata”的默认值设置为数据集

    三、用表达式设置子报表参数

    =Parameters!MyData.Value
    

    希望这有帮助, 邓肯

        6
  •  0
  •   Jason    15 年前

    如果创建一个表,则可以合并“详细信息”行的所有单元格,并将子报表作为内容。然后将子报表的参数设置为要对其运行子报表的字段。

    杰森