【问题标题】:SSRS: Master-detail report with two datasourcesSSRS:具有两个数据源的主从报表
【发布时间】:2009-04-28 12:22:21
【问题描述】:

我有两个本地数据源可以推送到报告中。工作没问题。但是如何设置报告?一个数据源包含员工列表以及有关他们的信息。另一个包含每个员工的大量工作时间。

我想用一张表来列出员工名单,然后用另一个表来记录每个员工下面的工作时间(包括他们的工作时间)。

这甚至可能吗?我必须使用子报告吗?我是否必须将它们合并到一个数据源中? =/

【问题讨论】:

    标签: c# reporting-services report objectdatasource


    【解决方案1】:

    据我所知,如果不使用子报表,就不可能将一个数据集嵌套在另一个数据集中。

    这意味着您需要做以下两件事之一:

    1. 将两个数据源重构为一个数据源。例如,在员工和每个员工的工作时间之间执行联接。然后,您可以使用 Table 对象的分组属性以您想要的方式格式化列表。

    2. 如果连接两个数据源不可行,您可以使用子报表来完成您想要的操作。创建一个包含工作时间数据源的子报表,并为其提供当前员工的参数。按此参数过滤工作时间。

      在您的父报表中,您可以将子报表放在列表中,并将当前行的员工 ID 作为参数传递。

      请注意,使用子报表会涉及一些格式问题。在大多数情况下,我已经能够解决它们,但首选方法肯定是上面的第一名。

    【讨论】:

    • 但是如果我加入这些表,这些行中将会有很多重复的数据。这有关系吗?或者SSRS可以应付吗?如何将子报表添加到表中?我真的很想为第一个数据源使用表格,因为这样更容易使格式正确等。但是如何将子报表放在表格单元格中?你把他们加在一起吗?或者你是怎么做到的?
    【解决方案2】:

    添加新答案以确保已发送通知。

    使用子报表是最简单的方法。您可以简单地将子报表拖放到表格单元格上,它将填充该单元格的内容区域。右键单击子报表将允许您编辑子报表的参数。与 SSRS 中的大多数值一样,参数可以设置为使用表中字段的表达式。

    在子报表中,只需过滤您的结果以仅显示与作为参数传入的员工相关的记录。

    您可以采取的另一条路线是使用连接来合并您的两个数据源。这将为您提供如下数据:

    employee1 time1.1
    employee1 time1.2
    employee1 time1.3
    employee1 time1.4
    employee2 time2.1
    employee2 time2.2
    employee2 time2.3
    

    然后,您可以在重复的列(本示例中为员工)上创建一个组,并在这些列上启用 HideDuplicates 属性。结果将如下所示:

    employee1 time1.1
              time1.2
              time1.3
              time1.4
    employee2 time2.1
              time2.2
              time2.3
    

    【讨论】:

    • 但是,就像我在对另一个问题的评论中所问的那样,这样做时性能如何?我在想,当你加入这两个表时,你最终会得到一个非常大的表,其中包含大量重复数据。但另一方面,它将只有一个表格和一个报告要处理......而不是两个表格和一个重复无数次的子报告......
    • 试一试,然后发现:) 从您对问题的描述中,我怀疑连接数据的获取时间比单独获取两者要长得多。但如果额外的列异常大,这可能是个问题。
    • 嗯...也许我可以尝试加入他们。因为在表格中很好地获取子报告似乎有点棘手。列并没有那么大。只是常规的数字和日期以及一些文字。
    【解决方案3】:

    要设置多个数据源...您需要将两个单独的列表对象放入报表中。转到设计器,在工具箱中,您可以将新的“列表”放入其中。然后,你可以做另一个报告。将第二个列表链接到您通过辅助数据源实现的辅助数据集。

    这有点牵强,但基本思想是报表中的每个列表对象只能链接到一个数据源。

    【讨论】:

    • 嗯,我知道。但这只会导致两个列表一个接一个,不是吗?我需要第二个列表出现在第一个列表中的每个项目之后。并且只包含与该项目相关的那些元素...
    • 我相信,为了能够像这样链接它们,您需要将它们放在同一个数据源中。将两个数据源交织在一个列表对象中是行不通的,这确实是您将它们彼此分组时需要做的事情。
    【解决方案4】:

    在报表文档类中有一个名为“Database”的属性,它有一个表的集合。您可以在这些表中的每一个上使用“SetDataSource”,以便将单独的对象列表放入报告中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多