SSRS:包含两个数据源的主详细报告

时间:2009-04-28 12:22:22

标签: c# reporting-services report objectdatasource

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

我想在员工名单中使用一张表格,然后在每位员工的工作时间内(另外还有工作时间表)。

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

4 个答案:

答案 0 :(得分:5)

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

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

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

  2. 如果加入这两个数据源不切实际,您可以使用子报表来完成您想要的任务。创建包含工作时间数据源的子报表,并为当前员工提供参数。按此参数过滤工作时间。

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

    请注意,使用子报表涉及一些格式怪癖。在大多数情况下,我已经能够解决这些问题,但首选的方法绝对是上面的第一。

答案 1 :(得分:5)

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

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

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

您可以采用的另一种方法是使用连接合并两个数据源。这将为您提供如下数据:

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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