在Reporting Services中计算总计的总计

时间:2008-10-17 17:11:31

标签: reporting-services ssrs-grouping totals

我有一些数据按照某个标准分组在一个表中,并且对于每个组,它计算的是平均值 - 井,真实情况有点棘手 - 来自属于该值的每个细节行的值组。此平均值显示在每个组页脚行中。让我们看看这个简单的例子:

Report table

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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))”替换组表达式,用“Code.DoubleAggregator.Sum()”替换Total的表达式。

答案 2 :(得分:1)

不幸的是,我现在远离我的报告开发框,但它是: =(sum(Fields!Column1 + sum(Fields!Column2))

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您可以按照以下方式执行操作: 总和(CINT(领域!TestValue.Value))  或者总和(CInt(Fields!DollarAmountOfCheck.Value),“DataSet1”) 有时当数据通过WCF时,它不接受Sum()函数。但在这种情况下,这种方法很好。