2016-11-03 2 views
0

Ich verwende benutzerdefinierten Code, um Untersummen zu berechnen. Die Untersummen sind laufende Summen nach unten.Reporting Services Berechnung von Untersummen mit benutzerdefiniertem Code Problem

Der unten stehende benutzerdefinierte Code funktioniert gut, wenn ich den Bericht für 1 Periode ausführen.

Custom Code

Public Shared Dim SortCodeTotal as Decimal 

Public Shared Function Initialize() 
    SortCodeTotal = 0 
End Function 

Public Function AddTotal(ByVal b as Decimal) as Decimal 
    SortCodeTotal = SortCodeTotal + b 
    return b 
End Function 

Public Function DisplayTotal(ByVal b as Decimal) as Decimal 
    Dim ret as Decimal = 0 
    ret = SortCodeTotal + b 
    SortCodeTotal = ret 
    return ret 
End Function 

Details Linie enthalten Dieser Ausdruck

=Code.AddTotal(Sum(Fields!Activity_Amt.Value)) 

Zusammenfassung Total diesen Ausdruck

=Code.DisplayTotal(0) 
enthält

Der Bericht verwendet eine Matrix. Der benutzerdefinierte Code wird nicht korrekt ausgeführt, wenn er mit mehr als 1 Periode ausgeführt wird. Wie ändere ich den benutzerdefinierten Code, um an allen Perioden in einer Matrix zu arbeiten.

Die Untersummen funktionieren wie eine laufende Summe.

Beispiel

Detail 1  $50 
Detail 1  $50 
Sub Total **$100** 

Detail 2  $40 
Detail 2  $40 
Sub Total **$180** 

Detail 3  -$50 
Detail 3  $50 
Sub Total **$180** 

Detail 4 $20 
Detail 4 $50 
Sub Total **$250** 

Die Höhe auf den vorherigen Unter insgesamt + die nächsten Detaillinien

Click this to see how the report looks

Click this to review the report verwandten

+0

Können Sie einen Screenshot der Matrix hinzufügen Angabe der Zelle aus Sie den Aufruf der benutzerdefinierte Code Auch das erwartete Ergebnis könnte nützlich sein. –

+0

können Sie die Funktion RunningValue() im ssrs-Bericht verwenden. – Kostya

+0

Der runningValue() scheint nicht zu funktionieren. Ich könnte es falsch gebrauchen. –

Antwort

0

Es scheint, Ihr Problem geschieht, ist, auf den weg SSRS verarbeitet die Matrix. Jede einzelne Zeile wird ausgewertet, bevor sie an die nächste Zeile übergeben wird. Ihre kumulative Summe wird also horizontal berechnet, während Sie die laufende Summe vertikal für jede Spalte benötigen.

Die folgende benutzerdefinierte Funktion verwendet eine Collection, um die Summe jeder Periode für jede Zeile zu speichern.

Public Shared dict As New Collection 

Public Function AddTotal(ByVal value as Double, ByVal period As String) As Object 

    Dim subtotal As Double 

    If not dict.Contains(period) Then 
     dict.Add(value, period) 
     subtotal = dict.Item(period) 
     Return subtotal 
    End If 
    subtotal = dict.Item(period) + value 
    dict.Remove(period) 
    dict.Add(subtotal,period) 
    Return dict.Item(period) 

End Function 

diese Funktion nutzen nennen:

=Code.AddTotal(sum(Fields!Activity_Amount.Value),Cstr(Fields!Period.Value)) 

Ich denke, es gibt keine Notwendigkeit für zusätzliche Funktionen ist, da dies die kumulative Summe in jeder Auswertung liefert so lange, wie Sie es im richtigen Bereich zu verwenden, innerhalb der Periodengruppe, außerhalb der Detailgruppe und innerhalb der Sort Code Gruppe.

enter image description here

Es produziert:

enter image description here

In meinem Dataset Period Feld die Werte 1 und 2

+0

Super !!!!!!! Danke Alejandro ... Das funktioniert super !!!! Du hast meinen Tag gemacht. Danke für alle Zeit. Ich bin ein glücklicher Mann. –

+0

@RobertThompson, Gern geschehen. Wenn meine Antwort Ihnen geholfen hat, können Sie sie als die richtige Antwort markieren. [Wie man eine Antwort als richtig auswählt] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

Hey Alejandro, Ich habe Probleme mit der ersten Zusammenfassung insgesamt. Nach der ersten Zusammenfassung funktioniert alles. –