Unterschied zwischen Summenvariablen und Aggregatsfunktionen

Gilt ab List & Label 23
Vermutlich kennen Sie die Problematik: Sie möchten eine einfache Summe bilden, aber die Werte werden doppelt berechnet? Die Berechnung erfolgt in einer eigens dafür erstellten Summenvariable?
 
Wichtig hierfür ist das Funktionsprinzip von Summenvariablen genau zu kennen. Denn Summenvariablen arbeiten grundsätzlich immer tabellenübergreifend und nicht tabellenspezifisch. Außerdem werden die Summenvariablen auch noch zu verschiedenen Zeitpunkten aktualisiert und berechnet. Das Prinzip lässt sich anhand des folgenden Schemas einfach und verständlich erklären:

Ausgangslage
Es kommt eine Tabelle mit einer Verschachtelung (bzw. ein Berichtscontainer mit zwei Tabellen) von Kopfdaten > Detaildaten zum Einsatz. Ausgegeben werden soll eine einfache Summe in der unteren Tabelle 'Detaildaten'. Die Summenvariable respektive die auszugebende Summe wird für die Kopfdaten- und die Detaildaten-Tabelle jeweils einmal inkrementiert. Da zu Druckbeginn schon ein aufzusummierender Wert definiert wurde, liefert die Summe somit den doppelten Wert zurück - und zwar die Summe aus den Kopfdaten und die Summe aus den Detaildaten.

Lösungen
a) Anhand von Tabellennamen die Werte nur für die gewünschte Tabelle aufsummieren
In diesem Fall muss für mindestens die Detaildaten-Tabelle ein Name in den Tabellen-Eigenschaften vergeben werden, z. B. "Details". Anschließend kann die Formel für die Summenvariable entsprechend angepasst werden. Hierzu kommt die interne List & Label Variable LL.CurrentContainerItem zum Einsatz, die den aktuellen Tabellennamen zurückliefert:
Cond(LL.CurrentContainerItem="Details", [Feld für Summe], 0)
Nun wird die Summierung für diese Summenvariable nur noch durchgeführt, wenn auch die aktuelle Tabelle mit dem Namen 'Details' gedruckt wird. Die Berechnung für die Kopftabelle wird hierbei umgangen.

b) Verwendung einer Aggregatsfunktion
Verwenden Sie einfach die Aggregatsfunktion Sum() in der Fußzeile der Detaildaten-Tabelle, um die Summe auszugeben:
 Sum([Feld für Summe],[optional: True/False])
In diesem Fall werden ausschließlich die Werte der Detaildaten-Tabelle für die Summe summiert, da Aggregationsfunktionen im Gegensatz zu Summenvariablen tabellenspezifisch arbeiten. Über einen optionalen zweiten Parameter der Aggregatsfunktion Sum() können Sie entscheiden, ob die berechneten Werte nach der Ausgabe gelöscht werden sollen oder ob Sie diese weiterverwenden möchten. Dies bietet sich beispielweise an, wenn Summen zusätzlich gruppenspezifisch ausgegeben werden sollen.
IDKBTD001344 KBTD001344