DataSet Einträge/Zeilen zählen

Hallo,

ich habe eine Daten-Tabelle “OrderData” welche ich auswerten möchte.
Diese enthält eine Liste mit Bestellungen über einen bestimmten Zeitraum.
Ich brauche nun folgende Angaben errechnet daraus:

- Gesamtanzahl der Datensätze/Rows
- Anzahl der unterschiedlichen Kunden
- Anzahl der unterschiedlichen Produkte

Gibt es eine Möglichkeit Sum() oder Count() zu nutzen um diese Angaben zu erhalten oder kann hier mit Summenvariablen gearbeitet werden?

Vielen Dank euch im Voraus

Sehr geehrter Herr Sirker,

herzlich willkommen :wave: im List & Label Forum. Um die Anagaben zu berechnen, können Sie auf die Funktion Distinct() zurückgreifen.

Diese Funktion wirkt sich auf die übergeordnete Aggregatsfunktion (z.B. Sum(), Avg(), Count()…) aus und bewirkt, dass gleiche Werte nur einfach in die Berechnung eingehen.

Beispiel:

Count(Distinct(Customers.Country))

NthLargest(Artikel.Stkpreis,Count(Distinct(Artikel.Stkpreis),True) -1, True)    

berechnet den zweitkleinsten Wert und berücksichtigt dabei mehrfach vorkommende Werte nur einmal.

Mit freundlichen Grüßen aus Konstanz

Vielen Dank für die Nachricht. Wie gestalte ich denn den Count?
Ich habe lediglich OrderData als DataSet im Designer, diesen kann ich jedoch ausschließlich in einer Tabelle nutzen und dort dann irgendwie auch nur einzelne Zeilen.
Aufgelistet ist das DataSet unter “Felder”
Screenshot-2022-05-09-141530

Sehr geehrter Herr Sirker,

sie könnten die Ausgabe beispielsweise in einer Fußzeile platzieren. Dort fügt sich die Ausgabe unserer Meinung nach gestaltungstechnisch am besten ein:

Mit freundlichen Grüßen aus Konstanz

Vielen Dank für die Rückmeldung.
Wenn ich das richtig verstehe, können diese Berechnungen ausschließlich in der Ausgabetabelle ausgegeben werden nicht in einem extra Textfeld oder als Benutzervariable?

Ich bräuchte diese informationen entweder Alleinstehend ohne Tabelle oder im Kopf, nur leider sind die Berechnungen im Kopf noch alle bei 0, da diese von oben nach unten beim ausgeben berechnet werden und nicht bereits im Hintergrund im DataObject.

Sehr geehrter Herr Sirker,

da gibt es mehrere Möglichkeiten, z.B. das Zweipassverfahren oder auch die nativen Aggregatsfunktionen. Ansonsten wäre eine weitere Option, eine eigene Variable mit dem ensprechenden Inhalt zu übergeben, wenn Sie diese im Vorfeld bereits ermitteln können. Sie können die Variable auch mit SetVar() und GetVar() zwischenspeichern und später ausgeben.

Mit sonnigen Grüßen aus Konstanz

Vielen Dank für die Antwort.
Ich habe die Methode mit Setvar und GetVar ausprobiert, leider funktioniert dies nicht, um die Summe in die Kopfzeile zu bekommen.
Wenn ich GetVar in einem extra Textfeld angebe, dann gibt er jedoch auch nur die Anzahl aus, welche bis zu der Seite angezeigt wird. Ich brauche jedoch die Gesamtzahl aller Seiten über der Tabelle auf Seite 1.
Gibt es dafür einen Workaround?

Sehr geehrter Herr Sirker,

in disem Fall schlagen wir Ihnen vor, das Zweipassverfahren zu verwenden. In dem folgendem Blogpost sind alle Einzelheiten, die Sie für die Umsetzung Ihres Anliegens benötigen beschrieben:

Viele Grüße

Vielen Dank für die Antwort @mlitkin .
Ich habe nun einmal im Tabellenfuß folgenden Code eingefügt:

SetVar("AnzahlAuftraege",Count(OrderData.id),false)
+ SetVar("AnzahlKunden",Count(Distinct(OrderData.customer)),false)
+ SetVar("AnzahlProdukte",Count(Distinct(OrderData.product)),false)

Danach im Tabellenkopf

GetVar("AnzahlAuftraege")

und in den Projekteigenschaften den Durchlauf auf 2 erhöht.

Leider bleibt die Ausgabe für alle drei Variabeln 0

Sehr geehrter Herr Sirker,

im Anhang finden Sie ein kleines Beispiel welches demonstriert, wie Sie mit dem Mehrpassverfahren eine Summe einer Berechnung, bereits in der Kopfzeile ausgeben können. Es ist ganz einfach: Sie möchten also eine Summe ausgeben, von der Sie das Ergebnis aber noch nicht nicht wissen können, da noch keine Berechnung durchgeführt wurde. Wie können Sie nun vorgehen?

Sie nutzen das Mehrpassverfahren, um den Bericht quasi “zweimal” auszugeben. Sie lassen den Bericht einmal ausgeben um die Summe zu berechnen und anschließend ein weiteres mal, um die berechnete Summe schließlich anzuzeigen, wobei Sie in Wirklichkeit, nur den zweiten Bericht ausgeben.

Sie müssen zunächst die folgenden Projekteigenschaften definieren um das Mehrpassverfahren zu aktivieren:

In der Summenvariable in der Fußzeile, legen Sie folgende Eigenschaften für den ersten sowie den zweiten Durchlauf fest:

Anschließend können Sie mit GetVar() den berechneten Wert in der Kopfzeile im zweiten Durchlauf ausgeben lassen:

Das Ergebnis sieht dann wie folgt aus:

Oben wird nun der korrekt berechnete Wert angezeigt, obwohl das eigentliche Ergebnis erst in der Fußzeile berechnet wird.

Den entsprechenden Beispielreport, können Sie mit der List & Label Beispielanwendung öffnen. (Zu finden ist diese im List & Label Installationsverzeichnis oder auch im Windows-Startmenü):

Artikelliste mit Bildern (Multipassverfahren Beispiel).lst (81.8 KB)

Mit vielen Grüßen aus Konstanz

1 Like