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

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

有帮助吗?

解决方案

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()”的表达式。

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top