Sql server 2008 SSRS中总计报告中的数据总和

Sql server 2008 SSRS中总计报告中的数据总和,sql-server-2008,ssrs-2008,reporting-services,Sql Server 2008,Ssrs 2008,Reporting Services,我试图做一个合理简单的报告,但我对这一点还不熟悉,而且很挣扎 我有两张桌子,属性和事件 在Properties表中,我有一个ID、属性名称(Name)和房间数(noofroms) 在事件表中,我有ID、与之相关的属性(PropertyID)、DateOpen、DateClosed和Status 在报告中,我设法让它显示每个酒店的事故数量,然后是每个床位关闭的事故数量 然而,在总结中,我希望它做的是汇总当月的所有事件,我已经做了。然后将这个数字除以床位总数 问题是,所有的床位数都要加上好几倍 因此

我试图做一个合理简单的报告,但我对这一点还不熟悉,而且很挣扎

我有两张桌子,属性和事件

在Properties表中,我有一个ID、属性名称(Name)和房间数(noofroms)

在事件表中,我有ID、与之相关的属性(PropertyID)、DateOpen、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张。

我想你可能很难在报告层面做到这一点

我将通过扩展基础数据集来解决此问题:

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,那么SQL应该不会太难,而且后续的报告级代码也应该相当简单

最终,SSSR将与这些类型的聚合进行斗争,您在组级别进行聚合(采用不同的床位数值),然后在更高级别应用另一个聚合(不同床位数值的总和)

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

=CountRows() / Sum(Max(Fields!NoOfBeds.Value, "PropertyName"))
其中PropertyName是组的名称

但对于2008年,最好只将总床位添加到数据集级别

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

评论后编辑:

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

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

总床位的表达式是
=Sum(Max(Fields!NoOfBeds.Value,“PropertyName”)

最终百分比的表达式为

=CountRows()/Sum(最大值(Fields!NoOfBeds.Value,“PropertyName”))

如上所述

这将提供所需的结果:


您的报告是否会降低到包含的级别?如果没有,则更改数据,使每个属性只有一行(使用group by)。不,它只是在属性级别。我该怎么做??我让它为单个属性显示ok,这只是我无法让它工作的总体值。感谢这个Ian,我使用的是SSRS 2008 R2,当我尝试按照您在=countRows()解决方案中建议的那样做时,我得到了一个错误。我想这是因为正如你所说,我在小组中使用了错误的字段。我从哪里获得组名?它是在tablix中还是在我的数据集中的一个字段中?@Pipster1981,我在上面添加了更多详细信息,显示了正在运行的报告。简而言之,组名在报告中定义为一个对象。希望这有帮助。这是非常接近完美,确实是完美的,除了我没有给你所有的信息。。。很抱歉当它作为一个整体完成时,它可以完美地工作,但我希望它每月分解一次,并且我有一个列组“month_Opened”,当我运行查询时,我得到一个错误“文本框'Textbox10'的值表达式在同一聚合表达式中同时使用行和列范围或来自两个不同数据轴的范围。”我需要做什么?@Pipster1981,现在最有帮助的是用六行简化的示例行更新问题,这些行足以说明您的数据集,以及对所需输出的描述-如果有帮助,类似于我在回答中尝试做的。