如何在SSRS中添加分组聚合行组

时间:2015-04-27 18:18:53

标签: sql-server reporting-services

我对SSRS几乎一无所知,所以如果我使用错误的词汇,请原谅我。

我所工作的小组有一份志愿者机会清单。每个机会都需要指定数量的志愿者。该数据库记录了志愿者,他们自愿参加的机会以及志愿服务的状态:他们是否刚刚注册并需要联系,他们是否正在成为志愿者的某个地方,是否他们 志愿服务,或者他们是否已退出志愿服务。

某些志愿者机会(即需要与儿童接触并因此需要进行背景调查的机会)比其他机会拥有更多的志愿者状态。对于这些机会,共有14个州,其余为3个或4个。

我需要创建一个报告,显示每个机会的每个州的人数。当州大多数只有三个时,有15个专栏(14个需要志愿者)是不合理的。对于与儿童相关的机会,我想指定一个“其他”列,并在志愿者机会名称的左侧有一个扩展[+],这将扩展所有特定于儿童的状态及其相关计数。

现在的报告如下:

Current state of the report

我的背景是数据库/查询设计,所以我自然而然地用每个列的连接子查询编写了一个查询。我没有为每个“其他”状态创建一个额外的新子查询,而是假设我有一种方法可以让一个子查询加入志愿者状态,并让SSRS完成其余的工作。 (我可能在这里对SSRS的功能有误。)

我建议的查询看起来像这样:

SELECT vo.name, vo.volunteers_needed, vm.status, vm.status_count
FROM tbl_volunteer_opportunity vo
JOIN (SELECT volunteer_opp_id, status, COUNT(*) "status_count"
      FROM tbl_volunteer_opportunity_member
      GROUP BY volunteer_opp_id, status) vm ON vo.volunteer_opp_id = vm.volunteer_op_id

我现在需要创建一个tablix和/或数据源来为ConnectedIn ProcessNo Contact以及Other值的聚合创建列,然后为每个Other状态的扩展做别的

我不确定如何做其中任何一件事。

1 个答案:

答案 0 :(得分:1)

假设您有一个以下列格式返回数据的查询:

+-------------+--------------------+-------------+-------+
| ProfileName |       Status       | StatusGroup | Count |
+-------------+--------------------+-------------+-------+
| A           | Needed             | Needed      |     5 |
| A           | Connected          | Connected   |     3 |
| A           | In Process         | In Process  |     5 |
| A           | No Contact         | No Contact  |     2 |
| A           | Other status       | Other       |     3 |
| A           | Another status     | Other       |     6 |
| A           | Yet another status | Other       |     2 |
+-------------+--------------------+-------------+-------+

然后,您创建一个Tablix,它使用ProfileName作为行分组,StatusGroup作为列组。 tablix在设计器中将如下所示:

                  +-----------------+
                  | [StatusGroup]   |
+-----------------+-----------------+
| [ProfileName]   | [Sum(Count)]    |
+-----------------+-----------------+

然后,您可以在右侧添加一个totel列,并使用交互式展开/折叠功能向列组添加其他级别(将“其他”StatusGroup展开为各个状态)。使用SSRS表达式,您应该能够隐藏StatusGroup的列标题上不是“Other”的展开/折叠按钮。

希望这足以让你开始。