SSRS: Wie man eine Summe, die nur enthält das Letzte Element in einer Gruppe
Ich habe eine rdlc-report-Datei, und ich versuche, eine Summe, die nur das Letzte Element in jeder Gruppe. Ich habe eine Tabelle der Art wie diese:
Place = ? (Group header 1)
User = ? (Group header 2)
Date =Last(Fields!Number.Value) (Group header 3)
Number =Fields!Number.Value (Detail row)
So, in anderen Worten, in User
es, ich will eine Summe von Date
... wenn das Sinn machte...
Den Number
Zeilen enthalten viele zahlen pro Date
. Aber Date
zeigt nur die Letzte Zahl für diesen Tag, denn der rest zählt nicht (muss aber angezeigt werden) In User
ich möchte die Summe bis auf den letzten zahlen für alle die Termine für diesen Benutzer. Und gleichzeitig mit Place
(das wäre die Summe, die jeder letzten Nummer für jeden Tag, für jeden Benutzer).
Könnte mir jemand helfen mit diesem? Ich habe versucht, die offensichtlich (zumindest für mich) =Sum(Last(Fields!Number.Value))
, sondern (auch versuchte, um die Gruppe anzugeben, die in jenen Funktionen, aber nicht einen Unterschied machen, weil) ich erhalte eine Fehlermeldung, wenn ich versuche zu kompilieren, die sagt:
Der Value-Ausdruck für das Textfeld 'numberTextbox' enthält eine Aggregatfunktion (oder RunningValue oder RowNumber-Funktionen) in dem argument zu einem anderen Aggregat-Funktion (oder RunningValue). Aggregatfunktionen können nicht geschachtelt werden innerhalb einer anderen Aggregatfunktionen.
Ich glaube, das irgendwie Sinn macht... aber wie mache ich das dann?
Update: ich habe das Problem gelöst, durch hinzufügen einer weiteren Spalte, und kopieren diese letzten zahlen in dieser Spalte. Auf diese Weise kann ich die Anzeige alle zahlen, und das tun die Summen in der Spalte, die enthält nur diejenigen, die gehen, um in der Summe. Ich bin immer noch sehr neugierig, wenn jemand eine Lösung zu meinem ursprünglichen problem, obwohl... so postet bitte eine Antwort, wenn Sie tun!
InformationsquelleAutor Svish | 2009-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ich verstehe genau, was Sie zu tun versuchen. Vielleicht so etwas wie =Last(Felder!Anzahl.Wert,"Gruppe 1") + Last(Felder!Anzahl.Wert,"Gruppe 2") + Last(Felder!Anzahl.Wert,"Gruppe 3"), statt mit einer Summe-Funktion?
Versucht, die Frage klarer.
Ok...also wie wärs dann mit deinem Beispiel =Last(Felder!Anzahl.Wert) ist in "lastTextBox". Und dann =Summe(ReportItems!lastTextBox.Wert). Bin ich näher an, was Sie brauchen?
Naja, in der Theorie ja, aber in der Praxis bekomme ich die gleiche Fehlermeldung =/ "Der Value-Ausdruck für das Textfeld 'sumTextbox' verwendet, eine Aggregatfunktion auf einen Bericht posten. Aggregat-Funktionen können nur verwendet werden auf dem report enthaltenen Elemente in Kopf-und Fußzeilen." und "Der Value-Ausdruck für das Textfeld 'sumTextbox' hat einen scope-parameter ist nicht gültig für eine Aggregat-Funktion. Die scope-parameter müssen festgelegt werden, um eine string-Konstante, ist gleich zu entweder den Namen einer enthaltenden Gruppe, den Namen, die Daten, die region oder den Namen des Daten-set."
InformationsquelleAutor Mozy
der einfachste Weg, dies zu tun wäre, um zu ändern Ihr dataset enthalten nur die Datensätze Ihrer anzeigen in dem Feld Datum, so könnte man sich nur mit einer einfachen Summe (), anstatt zu versuchen, etwas seltsam und screwy und könnte nicht funktionieren.
konnte ich sehen dass Ihre Abfrage? ich habe eine vage Idee, wie dieses Problem zu lösen, aber ich brauche etwas zu visualisieren, es mit
kann nicht fügen Sie die ganze linq-Abfrage, was hier keine. Aber die Zeilen sind ein bisschen wie diese: Ort, Benutzer, Datum Number1 Number2 Number3 Number4 TimeA TimeB TimeSpanAB. TimeA und TimeB muß gezeigten für jede Zeile, und die zahlen auch. Aber nur die Letzte Zahl pro Termin berücksichtigt werden müssen, für die Summen.
naja man könnte machen es zu einem Teil die eigentliche Frage, dann würden Sie nicht haben eine Größenbeschränkung.
InformationsquelleAutor DForck42
Ändern der Datensatz kann wirklich die einfachste Lösung sein, aber wenn Sie wirklich wollen, dies zu tun, ohne komplizierende die Abfrage, die Sie könnten versuchen, "benutzerdefinierte aggregation".
Die genauen Techniken, die für diese hängen von der version von SSRS, und mein Verständnis ist es nicht wirklich Arbeit, dass Sie gut, bevor Sie SSRS 2008.
Die Idee ist, Sie einen benutzerdefinierten code schreiben zu erhalten ein array mit den letzten Wert der für jedes Datum. Eine Funktion aktualisiert die "letzten Wert" für ein Datum, und die anderen Summen die Werte in das array. Dein Kopf ruft die letztere Funktion; Sie verschwören sich, um die Ursache der früheren Funktion, die aufgerufen werden, einmal für jede Detailzeile, bevor der header verarbeitet wird.
Hier ist ein blog mit einem write-up, erklärt, dass die Technik in SSRS 2008.
Es gibt auch einen Einblick in, wie Sie können versuchen, diese Arbeit zu machen, die in SRSS 2005, aber wieder, anscheinend ist das nicht so zuverlässig.
InformationsquelleAutor Mark Adelsberger