4

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

4

3 回答 3

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

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

于 2009-03-11T22:40:14.277 回答
4

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

您是否知道无需聚合数据即可在 SQL 中获得聚合结果?

只需向数据集添加一个额外的列,如下所示: ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'

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

您可以对 COUNT、AVG 等使用相同的技术

更多信息在这里 http://msdn.microsoft.com/en-us/library/ms189461(SQL.90).aspx

于 2009-03-20T08:28:52.877 回答
-2

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

于 2010-04-15T10:27:16.467 回答