【问题标题】:Calculating grand totals from group totals in Reporting Services从 Reporting Services 中的组总计计算总计
【发布时间】:2010-09-17 19:11:58
【问题描述】:

我有一些数据按特定标准分组在一个表中,并且对于每个组,它计算一个平均值 - 嗯,实际情况有点棘手 - 来自属于该组的每个详细信息行的值团体。该平均值显示在每组页脚行中。让我们看看这个简单的例子:

我现在想要在表格页脚上显示总计。总计应通过添加每个组的平均值来计算(例如,在此示例中,总计应为 20 + 15 = 35)。但是,我不能嵌套聚合函数。我该怎么办?

【问题讨论】:

    标签: reporting-services ssrs-grouping


    【解决方案1】:

    您只需在表尾添加 SUM() 函数,这是两个组的外部范围,并将它们加在一起。如果你对一个条件求和,你可能还需要把它放在那里。

    【讨论】:

      【解决方案2】:

      Reporting Services(2005 年,也可能是 2008 年)不直接支持聚合的聚合。

      使用允许您自己聚合值的自定义报告程序集、代码引用和命名对象(报告属性、引用)。

      您的代码可能如下所示:

      Public Sub New()
      
          m_valueTable = New DataTable(tableName:="DoubleValueList")
      
          'Type reference to System.Double
          Dim doubleType = Type.GetType(typeName:="System.Double")
      
          ' Add a single Double column to hold values
          m_valueTable.Columns.Add(columnName:="Value", type:=doubleType)
      
          ' Add aggregation column
          m_sumColumn = m_valueTable.Columns.Add(columnName:="Sum", type:=doubleType, expression:="Sum(Value)")
      End Sub
      Public Function Aggregate(ByVal value As Double) As Double
      
          ' Appends a row using a 1-element object array. 
          ' If there will be more than 1 column, more values need to be supplied respectively.
          m_valueTable.Rows.Add(value)
      
          Aggregate = value
      End Function
      Public ReadOnly Property Sum() As Double
          Get
      
              If 0 = m_valueTable.Rows.Count Then
                  Sum = 0
              Else
                  Sum = CDbl(m_valueTable.Rows(0)(m_sumColumn))
              End If
          End Get
      End Property
      

      您引用的名称,例如 DoubleAggregator。然后将组表达式替换为“Code.DoubleAggregator.Aggregate(Avg(Fields!Column2.Value))”,将 Total 的表达式替换为“Code.DoubleAggregator.Sum()”。

      【讨论】:

      • 这可能很有趣,虽然我没有测试过。感谢您的回答,在出现更好的解决方案之前,我已按照建议进行操作。
      • 请注意,您不能将汇总计算放在表尾,因为它的值是在处理表“之前”静态计算的。我建议使用另一个类似样式的表格,其中只有静态行作为摘要。
      • @henbo - 这对你有用吗?也许我不明白你的评论。
      • 仅供参考 - 2008 R2 支持聚合的聚合
      【解决方案3】:

      很遗憾,我目前不在我的报告开发框内,但它是:
      =(sum(Fields!Column1 + sum(Fields!Column2))

      =SUM(sum(Fields!Column1) + sum(Fields!Column2))

      我很确定这是 2 个中的第一个。

      【讨论】:

      • 感谢您的关注,但我的简单示例仅涉及列。理想的解决方案应该类似于 Sum(Avg(Fields!Column.Value, "Group"))。
      【解决方案4】:

      你不能,但你可以欺骗它。我在这里提出了一个解决方案: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/

      【讨论】:

        【解决方案5】:

        您可以简单地执行以下操作: 总和(CInt(字段!TestValue.Value)) 或 Sum(CInt(Fields!DollarAmountOfCheck.Value),"DataSet1") 有时当数据来自 WCF 时,它不接受 Sum() 函数。但在这种情况下这很好用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-27
          • 1970-01-01
          • 2014-09-16
          • 1970-01-01
          相关资源
          最近更新 更多