SSRS总计报告中的数据总和

时间:2013-04-17 15:18:03

标签: sql-server-2008 ssrs-2008 reporting-services

我正在尝试做一个合理简单的报告,但我是新手并努力奋斗。

我有两个表,属性和事件。

在属性表中,我有一个ID,属性的名称(名称)和房间数(NoOfRooms)。

在事件表中,我有ID,与之相关的属性(PropertyID),DateOpened,DateClosed和Status。

在报告中,我设法让它向我展示每个物业的事故数量,然后显示每个床位的事件数量。

然而,在摘要中,我希望它做的是总计那个月的所有事件,我已经完成了。但是然后把这个数字除以床的总数。

问题出现的地方是它多次加起床的数量。

因此,如果数据如下所示:

Property Name   IncidentID      No of Beds
Property1       1               100
Property1       2               100
Property2       3               200
Property2       4               200
Property2       5               200

我明白了:

Propery Name    No Of Incidents      Incidents / Bed
Property1       2                    0.02
Property2       3                    01015

但我不能让它显示应该是的摘要:

No of Incidents          Incidents / Bed
5                        5/300 = 0.016666667

我有没有发生的事情,这只是最后的事件/床,它认识到只有300张床,而不是800张床。

1 个答案:

答案 0 :(得分:0)

我认为您可能很难在报告级别这样做。

我会通过扩展基础数据集来解决这个问题:

Property Name   IncidentID      No of Beds  Total Beds
Property1       1               100         300
Property1       2               100         300
Property2       3               200         300
Property2       4               200         300
Property2       5               200         300

如果你只是从数据库中提取它,那么SQL应该不会太困难,后续的报告级代码也应该相当简单。

最终,SSSRS与这些类型的聚合进行斗争,在这些聚合中,您在群组级别聚合(采用不同的 No Of Beds 值),然后在更高级别应用另一个聚合(不同的总和) No Of Beds 值。)

SSRS 2008 R2确实提供了聚合选项的聚合,因此如果您使用的是2008 R2,则可以使用以下表达式来执行此操作:

=CountRows() / Sum(Max(Fields!NoOfBeds.Value, "PropertyName"))

其中 PropertyName 是该组的名称。

但是对于2008年,您最好只将 Total Beds 添加到数据集级别。

此外,用户@Tom Jenkin提出了一个很好的观点;如果您只对属性级详细信息感兴趣,可以将数据集更改为已经汇总,例如如果它是由SQL语句生成的,则使用GROUP BY仅为上述数据返回两行;这也是合适的。

评论后修改:

我根据您的示例数据集创建了一份报告:

enter image description here

enter image description here

您可以看到已创建一个名为 PropertyName 的行组。

Total Beds 的表达式为=Sum(Max(Fields!NoOfBeds.Value, "PropertyName"))

最终百分比的表达式为

=CountRows() / Sum(Max(Fields!NoOfBeds.Value, "PropertyName"))

如上所述。

这是给出了所需的结果:

enter image description here