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:

Tabla de informes

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top