Appendix B. Formelsprache

B. Formelsprache

An vielen Stellen unterstützt ReportServer die Eingabe von Formeln. Formelausdrücke sind immer durch die Zeichenfolge ${} umschlossen. Der eigentliche Ausdruck steht dabei zwischen den geschweiften Klammern. Zum Einsatz kommt hierbei die Unified Expression Language (EL) standardisiert in JSR-245 (https://www.jcp.org/en/jsr/detail?id=245 und http://www.oracle.com/technetwork/java/unifiedel-139263.html).

In Formelausdrücken können einfache Berechnungen, sowie String-Funktionen benutzt werden. Der Ausdruck ${3 + 5} berechnet beispielsweise die Zahl 8. Je nach Kontext stehen Ihnen in Ausdrücken unterschiedliche Objekte/Ersetzungen zur Verfügung.

Neben den Grundrechenarten sind folgende mathematische Operationen implementiert:

math:random() Gibt eine Zufällige Zahl zwischen 0 und 1 zurück
math:sin(Double) Berechnet den Sinus
math:cos(Double) Berechnet den Kosinus
math:tan(Double) Berechnet den Tangens
math:abs(Double) Gibt den Ganzzahlwert einer Zahl zurück
math:ceil(Double) Rundet die übergebene Zahl auf
math:floor(Double) Rundet die übergebene Zahl ab
math:round(Double) Rundet die übergebene Zahl
math:max(Double, Double) Gibt den größeren Wert zurück
math:min(Double, Double) Gibt den kleineren Wert zurück
math:pow(Double, Double) Gibt den ersten Wert hoch den zweiten zurück
math:log(Double) Gibt den natürlichen Logarithmus zurück
math:exp(Double) Berechnet e hoch Wert
math:sqrt(Double) Gibt die Wurzel zurück
math:signum(Double) Berechnet die Signum Funktion

Zur Verarbeitung von Zeichenketten stehen neben Methoden des Java-String-Objekts die folgenden Helfermethoden zur Verfügung:

sutils:left(String, int) Gibt die ersten Zeichen des Strings zurück
sutils:right(String, int) Gibt die letzten Zeichen des Strings zurück

Für bedingte Ausdrücke können Sie den ternären Ausdrucksoperator

	Bedingung ? Ausdruck, falls wahr : Ausdruck, falls falsch

verwenden. So liefert folgender Ausdruck

	${math:random() < 0.5 ? true : false}

einen Wahrheitswert zurück. Ist die Zufallszahl kleiner 0.5 (dies tritt in 50% der Fälle auf) wird WAHR zurückgegeben, ansonsten falsch.

B.1.1. Arbeit auf Objekten

Haben Sie ein Objekt per Ersetzung übergeben bekommen, können Sie auf diesem Methoden aufrufen. In Filtern oder in Datumsparametern stehen Ihnen beispielsweise das Objekt "today" zur Verfügung. Um eine Methode des Objekts aufzurufen schreiben Sie ${today.METHODENNAME()}. Today gibt ein Datum ausgehend vom aktuellen Datum zurück. Möchten Sie hingegen den ersten des aktuellen Monats auswählen schreiben Sie ${today.firstDay()}. Folgende Methoden stehen Ihnen auf dem today Objekt zur Verfügung.

firstDay Setzt den Kalender auf den Mitternacht des ersten Tages des aktuellen Monats.
lastDay Setzt den Kalender auf die letzte Sekunde des letzten Tages des aktuellen Monats.
addDays Setzt den Kalender die angegebene Zahl an Tagen weiter/zurück.
addMonths Setzt den Kalender die angegebene Zahl an Monaten weiter/zurück.
addYears Setzt den Kalender die angegebene Zahl an Jahren weiter/zurück.
setDay Setzt den Kalender auf den angegebenen Tag.
setMonth Setzt den Kalender auf den angegebenen Monat.
setYear Setzt den Kalender auf das angegebene Jahr.
clearTime Setzt die Uhrzeit auf Mitternacht zurück.
addHours Setzt den Kalender die angegebene Zahl an Stunden weiter/zurück.
addMinutes Setzt den Kalender die angegebene Zahl an Minuten weiter/zurück.
addSeconds Setzt den Kalender die angegebene Zahl an Sekunden weiter/zurück.
setHours Setzt die Uhrzeit auf die angegebene Stunde.
setMinutes Setzt die Uhrzeit auf die angegebenen Minuten.
setSeconds Setzt die Uhrzeit auf die angegebenen Sekunden.
format Diese Funktion wandelt das Datum in einen Text im angegebenen Format. Dies ist notwendig, um Vergleiche auf Spalten vorzunehmen die nicht vom Typ Datum sind (vgl. Tabelle Datumsformat in Anhang C.).

Beispiel: Sie möchten alle Rechnungen des vergangenen Monats filtern. Dazu können Sie folgenden Einschlussfilter definieren:

	${today.firstDay().addMonths(-1)} - ${today.firstDay().addSeconds(-1)}