这似乎应该很简单,但我还找不到任何东西。在 Reporting Services 中,我有一个最多包含 6 行的表,这些行都具有计算值和动态可见性。我想总结这些行。基本上我有一些发票项目,并想总计。我无法更改数据库端的任何内容,因为我的存储过程在系统的其他地方使用。每行也从不同的数据集中提取数据,因此我无法对数据集进行求和。我可以用表格页脚对所有行求和吗?类似于汇总 Excel 中的行数?将每一行的可见性表达式放入页脚行来计算总和似乎非常多余。
3 回答
有几种方法可以实现这一目标:
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
你完成了。请注意,因为您不能保证代码执行的顺序,并且对于某些报告,它将首先执行页脚(例如,如果您使用详细信息带中的行的总和),这将使总数为零因为细节带计算还没有发生,但对于一般情况,这应该有效。
您可以按如下方式更改数据库。
您是否知道无需聚合数据即可在 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
如果您对执行顺序有疑问,请在表格下方添加一个文本框,并在此框中显示 TotalAmount。