【问题标题】:Create Sum of calculated rows in Microsoft Reporting Services在 Microsoft Reporting Services 中创建计算行的总和
【发布时间】:2009-03-11 22:06:34
【问题描述】:

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

【问题讨论】:

    标签: reporting-services sum


    【解决方案1】:

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

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

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

    然后只需使用“详细信息”行中的 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
    

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

    【讨论】:

    • 感谢您通知我,我不能保证代码执行的顺序,这更能说明为什么对行求和更复杂。
    【解决方案2】:

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

    您知道无需聚合数据即可在 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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你能不能说得更具体一点。 -1 表示绝对模糊
      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多