3

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

报告表

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

4

5 回答 5

3

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

于 2008-11-20T15:46:16.493 回答
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()”。

于 2008-11-20T15:54:28.427 回答
1

不幸的是,我目前不在我的报告开发框中,但它要么是:
=(sum(Fields!Column1 + sum(Fields!Column2))
要么
=SUM(sum(Fields!Column1) + sum(Fields!Column2))

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

于 2008-10-20T02:09:18.437 回答
1

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

于 2011-06-05T13:35:43.080 回答
1

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

于 2013-08-18T05:01:58.757 回答