Calcolo dei totali complessivi dai totali di gruppo in Reporting Services
-
03-07-2019 - |
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:
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?
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.