我有一些数据按特定标准分组在一个表中,并且对于每个组,它都计算了属于该组的每个详细信息行的值的平均值——嗯,实际情况有点棘手。该平均值显示在每组页脚行中。让我们看看这个简单的例子:
我现在想要的是在表格页脚上显示总计。总计应通过添加每个组的平均值来计算(例如,在此示例中,总计应为 20 + 15 = 35)。但是,我不能嵌套聚合函数。我能怎么做?
我有一些数据按特定标准分组在一个表中,并且对于每个组,它都计算了属于该组的每个详细信息行的值的平均值——嗯,实际情况有点棘手。该平均值显示在每组页脚行中。让我们看看这个简单的例子:
我现在想要的是在表格页脚上显示总计。总计应通过添加每个组的平均值来计算(例如,在此示例中,总计应为 20 + 15 = 35)。但是,我不能嵌套聚合函数。我能怎么做?
您只需要在表尾添加 SUM() 函数,这是两个组的外部范围,并将它们加在一起。如果你对一个条件求和,你可能还需要把它放在那里。
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(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/
您可以简单地执行以下操作: Sum(CInt(Fields!TestValue.Value)) 或 Sum(CInt(Fields!DollarAmountOfCheck.Value),"DataSet1") 有时当数据通过 WCF 时,它不接受 Sum() 函数. 但在这种情况下这很好用。