在Microsoft Reporting Services中创建计算行的总和

时间:2009-03-11 22:06:35

标签: reporting-services sum

这似乎应该很简单,但我找不到任何东西。在Reporting Services中,我有一个最多包含6行的表,这些表都具有计算值和动态可见性。我想总结这些行。基本上我有一些发票项目,想要总计。我无法更改数据库端的任何内容,因为我的存储过程在系统的其他地方使用。每行也从不同的数据集中提取数据,因此我无法对数据集求和。我可以用表格页脚汇总所有行吗?与在Excel中累计多行相似?将我的可见性表达式从每行放入我的页脚行以计算总和似乎非常多余。

3 个答案:

答案 0 :(得分:13)

您可以通过以下几种方式实现这一目标:

1。在SQL中进行计算并对该字段求和,如下所示:

SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable

然后只需使用Detail行中的TotalAmount字段,并在页脚中对其进行求和。

2. :创建第二个数据集,计算总数并在页脚中使用而不是总和:

=Sum(Fields!TotalAmount.Value, "MyTotalingDataset")

3. 使用自定义代码执行此操作。右键单击“布局”空间,选择“属性”,然后单击“代码”选项卡。输入以下代码:

Public Dim TotalAmount As Double = 0

Public Function CalculateRowTotal(ThisValue As Double, ThatValue As Double) As Double
    TotalAmount = TotalAmount + (ThisValue * ThatValue)
    Return ThisValue * ThatValue
End Function

在详细信息区域中,将字段汇总的列设为具有以下表达式:

=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value)

这将执行上面的代码并进行计算并计算过程中的总和。

页脚带显示总和,因此列具有表达式:

=Code.TotalAmount

你已经完成了。请注意,因为您无法保证代码执行的顺序,并且对于某些报告,它将首先执行页脚(例如,如果您使用详细信息区域中的行的总和),这将使总计为零因为细节带计算尚未发生,但对于一般情况,这应该有效。

答案 1 :(得分:4)

您可以按如下方式更改数据库。

您是否知道,如果不汇总数据,您可以在SQL 中获得汇总结果?

只需在数据集中添加一个额外的列,如下所示:  ,SUM(OrderQty)OVER(PAROTION BY SalesOrderID)AS'总计'

在上面的示例中: OrderQty是您希望总和的值 SalerOrderID相当于'GROUP BY'

您可以使用与COUNT,AVG等相同的技术

此处提供更多信息 http://msdn.microsoft.com/en-us/library/ms189461(SQL.90).aspx

答案 2 :(得分:-2)

如果执行顺序有问题,请在表格下方添加一个文本框,并在此框中显示TotalAmount。