Die Berechnung Endsummen von Gruppensummen in Reporting Services
-
03-07-2019 - |
Frage
Ich habe einige Daten in einer Tabelle nach bestimmten Kriterien gruppiert und für jede Gruppe es durchschnittlich -well berechnet wird, ist der eigentliche Fall ein bisschen mehr tricky- der Werte von jedem der Detailzeilen, die derjenigen gehören Gruppe. Dieser Mittelwert wird in jeder Gruppe Fußzeilen gezeigt. Lassen Sie sich dieses einfache Beispiel sehen:
Was will ich jetzt eine Gesamtsumme auf der Seite Tabellenfuß zeigen . Die Gesamtsumme sollte von berechnet werden, indem jede Gruppe durchschnittlich (beispielsweise in diesem Beispiel die Gesamtsumme + sein sollte 20 15 = 35). Allerdings kann ich nicht verschachtelt Aggregatfunktionen. Wie kann ich tun?
Lösung
Reporting Services (2005, vielleicht auch 2008) unterstützt keine Aggregate von Aggregaten direkt.
Verwenden Sie einen benutzerdefinierten Bericht Montage, Codereferenzen und benannte Objekte (Berichtseigenschaften, Referenzen), die Ihnen erlauben, sich um die Werte zu aggregieren.
Der Code könnte wie folgt aussehen:
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
Name Sie zum Beispiel DoubleAggregator verweisen. Dann ersetzen Sie die Gruppe Ausdrücke mit "Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value))" und der Ausdruck für Total mit "Code.DoubleAggregator.Sum ()".
Andere Tipps
Sie müssen nur die SUM () Funktion in der Tabelle Fußzeile hinzuzufügen, die die äußere Umfang beider Gruppen ist und sie alle zusammen summieren. Wenn Sie auf einem Zustand summieren, müssen Sie mitteilen, dass auch dort setzen.
Leider von Ich bin weg meine Berichterstattung Entwicklung Box im Moment, aber es ist entweder:
= (Sum (Fields! Column1 + Summe (Fields! Column2))
OR
= SUMME (sum (Fields! Column1) + Summe (Fields! Column2))
Ich bin mir ziemlich sicher, dass es die erste der 2 ist.
Sie können nicht wirklich, aber man kann es betrügen. Ich blooged eine Lösung für dieses hier: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/
Sie können einfach wie folgt vorgehen: Sum (CInt (Fields! TestValue.Value)) oder Sum (CInt (Fields! DollarAmountOfCheck.Value), "DataSet1") irgendwann, wenn Daten durch WCF kommen, ist es nicht Sum () Funktion übernehmen. aber das funktioniert gut in diesem Fall.