Cálculo de totales generales a partir de totales de grupo en Reporting Services
-
03-07-2019 - |
Pregunta
Tengo algunos datos agrupados en una tabla según un cierto criterio, y para cada grupo se calcula un promedio de # 8212; bueno, el caso real es un poco más complicado & # 8212; de los valores de cada una de las filas de detalles que pertenecen a ese grupo. Este promedio se muestra en cada grupo de filas de pie de página. Veamos este sencillo ejemplo:
Lo que quiero ahora es mostrar un total general en el pie de tabla . El total general se debe calcular agregando el promedio de cada grupo (por ejemplo, en este ejemplo, el total general debe ser 20 + 15 = 35). Sin embargo, no puedo anidar funciones agregadas. ¿Cómo puedo hacer?
Solución
Reporting Services (2005, quizás 2008, también) no admite agregados de agregados directamente.
Use un conjunto de informes personalizado, referencias de código y objetos con nombre (Propiedades del informe, Referencias) que le permitan agregar los valores usted mismo.
Tu código podría verse así:
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
Nombre al que hace referencia, por ejemplo, DoubleAggregator. Luego reemplace las expresiones de grupo con " Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value)) " y la expresión para Total con " Code.DoubleAggregator.Sum () " ;.
Otros consejos
Solo necesita agregar la función SUM () en el pie de tabla, que es el alcance externo de ambos grupos y los sumará todos juntos. Si está sumando una condición, es posible que deba poner eso allí también.
Lamentablemente, estoy lejos de mi cuadro de desarrollo de informes en este momento, pero es:
= (suma (Fields! Column1 + sum (Fields! Column2))
O
= SUMA (suma (Fields! Column1) + sum (Fields! Column2))
Estoy bastante seguro de que es el primero de los dos.
Realmente no puedes, pero puedes engañarlo. Bloqueé una solución a esto aquí: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/
simplemente puedes hacer lo siguiente: Suma (CInt (Fields! TestValue.Value)) o Suma (CInt (Fields! DollarAmountOfCheck.Value), " DataSet1 ") en algún momento cuando los datos llegan a través de WCF, no acepta la función Sum (). pero esto funciona bien en ese caso.