Bei einigen Operationen ist die Abfolge (Sequenz) der Ereignisse von Bedeutung.
Die Anwendung ermöglicht die Arbeit mit folgenden Datensatzsequenzen:
- Sequenzen und Zeitreihen
- Sequenzfunktionen
- Datensatzindizierung
- Durchschnittsbildung, Summierung und Vergleich von Werten
- Überwachung der Änderung - Differenzierung
@SINCE
- Offsetwert
- Zusätzliche Sequenzfunktionen
Bei vielen Anwendungen kann jeder Datensatz, der einen Stream durchläuft, als Einzelfall betrachtet werden, der von allen anderen Fällen unabhängig ist. In solchen Situationen ist die Reihenfolge der Datensätze normalerweise nicht von Bedeutung.
Bei einigen Problemklassen jedoch ist die Datensatzsequenz höchst wichtig. Dies ist üblicherweise bei Zeitreihen der Fall, bei denen die Sequenz der Datensätze eine geordnete Sequenz von Ereignissen oder Vorkommen darstellt. Jeder Datensatz ist eine Momentaufnahme zu einem bestimmten Zeitpunkt; ein Großteil der aussagekräftigsten Informationen sind jedoch möglicherweise nicht in Augenblickswerten enthalten, sondern in der Art und Weise, wie sich diese Werte im Laufe der Zeit ändern und verhalten.
Der entscheidende Parameter muss natürlich nicht die Zeit sein. So könnten die Datensätze Analysen darstellen, die in Abstanden entlang einer Linie durchgeführt werden. Doch auch hier gelten dieselben Prinzipien.
Sequenz- und Sonderfunktionen lassen sich sofort an folgenden Merkmalen erkennen:
- Ihnen allen wird
@
vorangestellt. - Ihre Namen werden in Großbuchstaben angegeben.
Sequenzfunktionen können sich auf den derzeit von einem Knoten verarbeiteten Datensatz, auf die Datensätze, die einen Knoten bereits durchlaufen haben, und sogar, in einem Fall, auf Datensätze beziehen, die einen Knoten noch durchlaufen müssen. Sequenzfunktionen können nach Belieben mit anderen Komponenten von CLEM-Ausdrücken gemischt werden; bei einigen gelten jedoch Einschränkungen in Bezug auf die verwendeten Argumente.
Beispiele
Es kann interessant sein zu wissen, wie lange es zurückliegt, dass ein bestimmtes Ereignis eintrat oder eine Bedingung wahr war. Verwenden Sie die Funktion @SINCE
, um dies auszuführen - beispielsweise:
@SINCE(Income > Outgoings)
Diese Funktion gibt den Offset des letzten Datensatzes aus, bei dem diese Bedingung wahr war-d. h. die Anzahl der Datensätze vor dieser Bedingung, in denen die Bedingung wahr war. Wenn die Bedingung noch nie wahr war, gibt @SINCE
@INDEX + 1
zurück.
Manchmal möchten Sie vielleicht auf einen Wert des aktuellen Datensatzes in dem von @SINCE
verwendeten Ausdruck verweisen. Sie können dies mit der Funktion @THIS
tun, die angibt, dass ein Feldname immer für den aktuellen Datensatz gilt. Um den Offset des letzten Datensatzes zu ermitteln, der einen mehr als doppelt so großen Feldwert Concentration
wie der des aktuellen Datensatzes hatte, können Sie Folgendes verwenden:
@SINCE(Concentration > 2 * @THIS(Concentration))
In einigen Fällen ist die Bedingung, die @SINCE
gegeben wird, für den aktuellen Datensatz per Definition wahr - zum Beispiel:
@SINCE(ID == @THIS(ID))
Aus diesem Grund wertet @SINCE
seine Bedingung für den aktuellen Datensatz nicht aus. Verwenden Sie eine ähnliche Funktion, @SINCE0
, wenn Sie die Bedingung für den aktuellen Datensatz sowie die vorherigen Bedingungen auswerten möchten. Wenn die Bedingung im aktuellen Datensatz wahr ist, gibt @SINCE0
0
zurück.
Funktion | Ergebnis | Beschreibung |
---|---|---|
MEAN(FIELD) |
Real | Gibt den mittleren Durchschnittswert der Werte für das angegebene FELD oder die FIELDSzurück. |
@MEAN(FIELD, EXPR) |
Real | Gibt den mittleren Durchschnittswert der Werte für FELD über die letzten EXPR-Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Durchschnittswert für alle bisher empfangenen Datensätze zurückgegeben. |
@MEAN(FIELD, EXPR, INT) |
Real | Gibt den mittleren Durchschnittswert der Werte für FELD über die letzten EXPR -Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Durchschnittswert für alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl von Werten an, die zurückgenommen werden sollen. Dies ist wesentlich effizienter als die Verwendung von nur zwei Argumenten. |
@DIFF1(FIELD) |
Real | Gibt das erste Differential von FELD zurück. Das Format mit einem einzelnen Argument ergibt also einfach die Differenz zwischen dem aktuellen Wert und dem früheren Wert des Feldes. Gibt $null$ zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. |
@DIFF1(FIELD1, FIELD2) |
Real | Das Zwei-Argument-Formular gibt das erste Differential von FIELD1 in Bezug auf FIELD2 an. Gibt $null$ zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. Sie wird wie folgt berechnet: @DIFF1(FIELD1)/@DIFF1(FIELD2) . |
@DIFF2(FIELD) |
Real | Gibt das zweite Differential von FIELD zurück. Das Format mit einem einzelnen Argument ergibt also einfach die Differenz zwischen dem aktuellen Wert und dem früheren Wert des Feldes. Gibt $null$ zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. @DIFF2 wird folgendermaßen berechnet: @DIFF(@DIFF(FIELD)) . |
@DIFF2(FIELD1, FIELD2) |
Real | Das Zwei-Argument-Formular gibt das zweite Differential von FIELD1 in Bezug auf FIELD2 an. Gibt $null$ zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. Dies ist eine komplexe Berechnung -- @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2) . |
@INDEX |
Ganze Zahl | Ergibt den Index des aktuellen Datensatzes. Indizes werden den Datensätzen zugeordnet, wenn sie am aktuellen Knoten ankommen. Der erste Datensatz erhält den Index 1. Dieser Index wird für jeden nachfolgenden Datensatz um den Wert 1 erhöht. |
@LAST_NON_BLANK(FIELD) |
Beliebig | Gibt den letzten Wert für FIELD zurück, der nicht leer war, wie er in einem Upstream-Quellen-oder Typknoten definiert wurde. Wenn für FELD in den bisher gelesenen Datensätzen keine keine leeren Werte vorhanden sind, wird $null$ zurückgegeben. Leerwerte (auch als benutzerdefiniert fehlende Werte bezeichnet) können für jedes Feld einzeln definiert werden. |
@MAX(FIELD) |
Zahl | Gibt den Maximalwert für das angegebene FELD zurück. |
@MAX(FIELD, EXPR) |
Zahl | Gibt den maximalen Wert für FELD über die letzten bisher empfangenen EXPR -Datensätze zurück, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. |
@MAX(FIELD, EXPR, INT) |
Zahl | Gibt den maximalen Wert für FELD über die letzten bisher empfangenen EXPR-Datensätze zurück, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Höchstwert für alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl von Werten an, die zurückgenommen werden sollen. Dies ist wesentlich effizienter als die Verwendung von nur zwei Argumenten. |
@MIN(FIELD) |
Zahl | Gibt den Mindestwert für das angegebene FELD zurück. |
@MIN(FIELD, EXPR) |
Zahl | Gibt den Minimalwert für FELD über die letzten bisher empfangenen EXPR-Datensätze zurück, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. |
@MIN(FIELD, EXPR, INT) |
Zahl | Gibt den Minimalwert für FELD über die letzten bisher empfangenen EXPR-Datensätze zurück, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Mindestwert für alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl von Werten an, die zurückgenommen werden sollen. Dies ist wesentlich effizienter als die Verwendung von nur zwei Argumenten. |
@OFFSET(FIELD, EXPR) |
Beliebig | Gibt den Wert von FELD in dem Datensatz zurück, der vom aktuellen Datensatz durch den Wert von EXPR versetzt wird. Ein positiver Offset bezieht sich auf einen Datensatz, der den Knoten bereits durchlaufen hat ("Lookback"), ein negativer Offset gibt ein "Lookahead" auf einen Datensatz an, der noch nicht angekommen ist. Beispiel: @OFFSET(Status, 1) gibt den Wert des Feldes Status im vorherigen Datensatz aus, während @OFFSET(Status, –4) vier Datensätze in der Sequenz (d. h. Datensätze, die diesen Knoten noch nicht durchlaufen haben) nach vorne "durchsucht", um den Wert abzurufen. Beachten Sie, dass ein negativer Offset (Lookahead) als Konstante angegeben werden muss. Bei positiven Offsets kann EXPR auch ein beliebiger CLEM-Ausdruck sein, der für den aktuellen Datensatz ausgewertet wird, um den Offset zu geben. In diesem Fall sollte die Version dieser Funktion mit drei Argumenten die Leistung verbessern (siehe nächste Funktion). Wenn der Ausdruck einen anderen Wert als eine nicht negative ganze Zahl zurückgibt, wird ein Fehler ausgelöst. Berechnete Lookahead-Offsets sind also nicht zulässig. Beachten Sie, dass eine selbstreferenzielle @OFFSET -Funktion kein Literal Lookahead verwenden kann. In einem Füllerknoten können Sie beispielsweise den Wert von field1 nicht durch einen Ausdruck wie @OFFSET(field1,-2) ersetzen. Im Füller-Knoten gibt es beim Ausfüllen eines Feldes effektiv zwei verschiedene Werte dieses Feldes, nämlich den vorgefüllten Wert und den nachgefüllten Wert. Wenn @OFFSET sich auf sich selbst bezieht, bezieht es sich des auf den nachgefüllten Wert. Dieser nachgefüllte Wert ist nur für vorherige Zeilen vorhanden, so dass sich selbstreferenzielles @OFFSET nur auf vergangene Zeilen beziehen kann. Da sich selbstreferenzielles @OFFSET nicht auf die Zukunft beziehen kann, führt es die folgenden Prüfungen des Offsets durch:
|
@OFFSET(FIELD, EXPR, INT) |
Beliebig | Führt denselben Vorgang wie die Funktion @OFFSET aus, indem ein drittes Argument, INT, hinzugefügt wird, das die maximale Anzahl von Werten angibt, die zurückgenommen werden sollen. Wenn das Offset aus einem Ausdruck berechnet wird, sollte das dritte Argument zu einer Verbesserung der Leistung führen. Beispiel: In einem Ausdruck wie@OFFSET(Foo, Month, 12) weiß das System, dass nur die letzten zwölf Werte von Foo beibehalten werden. Andernfalls muss jeder Wert nur für den Fall gespeichert werden. In Fällen, in denen es sich beim Offset-Wert um eine Konstante handelt - einschließlich der negativen "Lookahead"-Offsets, die konstant sein müssen - ist das dritte Argument sinnlos, weshalb hier die Version dieser Funktion mit zwei Argumenten verwendet werden sollte. Siehe auch den Hinweis zu selbstreferenziellen Funktionen für die Version mit zwei Argumenten weiter oben. Beachten Sie, dass die Verwendung von "lookahead" und "lookback" innerhalb eines Knotens nicht unterstützt wird. |
@SDEV(FIELD) |
Real | Gibt die Standardabweichung der Werte für das angegebene FELD oder FELDER zurück. |
@SDEV(FIELD, EXPR) |
Real | Gibt die Standardabweichung der Werte für FELD über die letzten EXPR-Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird die Standardabweichung über alle bisher empfangenen Datensätze zurückgegeben. |
@SDEV(FIELD, EXPR, INT) |
Real | Gibt die Standardabweichung der Werte für FELD über die letzten EXPR-Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird die Standardabweichung über alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl von Werten an, die zurückgenommen werden sollen. Dies ist wesentlich effizienter als die Verwendung von nur zwei Argumenten. |
@SINCE(EXPR) |
Beliebig | Gibt die Anzahl der Datensätze zurück, die seit EXPR, einem beliebigen CLEM-Ausdruck, übergeben wurden, wahr waren. |
@SINCE(EXPR, INT) |
Beliebig | Das Hinzufügen des zweiten Arguments INT gibt die maximale Anzahl von Datensätzen an, die zurückgenommen werden sollen. Wenn EXPR nie wahr war, ist INT @INDEX+1 . |
@SINCE0(EXPR) |
Beliebig | Berücksichtigt den aktuellen Datensatz, während @SINCE dies nicht tut; @SINCE0 gibt 0 zurück, wenn EXPR für den aktuellen Datensatz wahr ist. |
@SINCE0(EXPR, INT) |
Beliebig | Wenn Sie das zweite Argument hinzufügen, gibt INT die maximale Anzahl von Datensätzen an, die zurückgenommen werden sollen. |
@SUM(FIELD) |
Zahl | Gibt die Summe der Werte für den angegebenen FELD oder FIELDSzurück. |
@SUM(FIELD, EXPR) |
Zahl | Gibt die Summe der Werte für FELD über die letzten EXPR-Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird die Summe über alle bisher empfangenen Datensätze zurückgegeben. |
@SUM(FIELD, EXPR, INT) |
Zahl | Gibt die Summe der Werte für FELD über die letzten EXPR-Datensätze zurück, die vom aktuellen Knoten empfangen wurden, einschließlich des aktuellen Datensatzes. FELD muss der Name eines numerischen Felds sein. EXPR kann ein beliebiger Ausdruck sein, der auf eine ganze Zahl größer als 0 bewertet wird. Wenn EXPR weggelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird die Summe über alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl von Werten an, die zurückgenommen werden sollen. Dies ist wesentlich effizienter als die Verwendung von nur zwei Argumenten. |
@THIS(FIELD) |
Beliebig | Gibt den Wert des Felds mit dem Namen FELD in dem aktuellen Datensatz zurück. Wird nur in Ausdrücken von @SINCE verwendet. |