Domanda

Ho alcuni dati raggruppati in una tabella in base a determinati criteri e per ogni gruppo viene calcolata una media - beh, il caso reale è un po 'più complicato - dei valori di ciascuna delle righe di dettaglio che appartengono a quella gruppo. Questa media è mostrata nelle righe di ogni piè di pagina del gruppo. Vediamo questo semplice esempio:

Segnala tabella

Quello che voglio ora è mostrare un totale generale sul piè di pagina della tabella . Il totale generale dovrebbe essere calcolato aggiungendo aggiungendo la media di ciascun gruppo (ad esempio, in questo esempio il totale generale dovrebbe essere 20 + 15 = 35). Tuttavia, non riesco a nidificare funzioni aggregate. Come posso fare?

È stato utile?

Soluzione

Reporting Services (anche il 2005, forse anche il 2008) non supportano direttamente aggregati di aggregati.

Utilizzare un assembly di report personalizzato, riferimenti a codice e oggetti denominati (Proprietà report, Riferimenti) che consentono di aggregare i valori dall'utente.

Il tuo codice potrebbe apparire così:

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

Nome a cui fai riferimento, ad esempio DoubleAggregator. Quindi sostituisci le espressioni di gruppo con " Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value)) " e l'espressione per Total con " Code.DoubleAggregator.Sum () " ;.

Altri suggerimenti

Devi solo aggiungere la funzione SUM () nel piè di pagina della tabella che è l'ambito esterno di entrambi i gruppi e li sommerà tutti insieme. Se stai sommando una condizione, potrebbe essere necessario inserirla anche qui.

Purtroppo al momento sono lontano dalla mia casella di sviluppo dei rapporti, ma è neanche:
= (sum (Fields! Column1 + sum (Fields! Column2))
O
= SOMMA (somma (Fields! Column1) + sum (Fields! Column2))

Sono abbastanza sicuro che sia il primo dei 2.

Non puoi davvero, ma puoi ingannarlo. Ho bloccato una soluzione a questo qui: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/

puoi semplicemente fare come segue: Sum (CInt (Fields! TestValue.Value))  o Sum (CInt (Fields! DollarAmountOfCheck.Value), "quotSet1" a volte quando i dati arrivano attraverso WCF, non accetta la funzione Sum (). ma in questo caso funziona bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top