Sequenzfunktionen
Bei einigen Operationen ist die Reihenfolge der Ereignisse wichtig.
Die Anwendung ermöglicht Ihnen die Arbeit mit den folgenden Datensatzsequenzen:
- Sequenzen und Zeitreihen
- Sequenzfunktionen
- Indexierung von Aufzeichnungen
- Mittelwertbildung, Summierung und Vergleich von Werten
- Veränderung überwachen – Differenzierung
@SINCE- Offset-Werte
- Zusätzliche Sequenz-Einrichtungen
Bei vielen Anwendungen kann jeder Datensatz, der einen Stream durchläuft, als Einzelfall betrachtet werden, unabhängig von allen anderen. In solchen Situationen ist die Reihenfolge der Aufzeichnungen normalerweise unwichtig.
Bei einigen Problemklassen ist die Reihenfolge der Aufzeichnungen jedoch sehr wichtig. Hierbei handelt es sich in der Regel um Zeitreihensituationen, in denen die Abfolge von Aufzeichnungen eine geordnete Abfolge von Ereignissen oder Vorkommnissen darstellt. Jeder Datensatz stellt eine Momentaufnahme zu einem bestimmten Zeitpunkt dar; viele der reichhaltigsten Informationen sind jedoch möglicherweise nicht in den Momentwerten enthalten, sondern in der Art und Weise, wie sich diese Werte im Laufe der Zeit verändern und verhalten.
Natürlich kann der relevante Parameter etwas anderes als Zeit sein. Zum Beispiel könnten die Aufzeichnungen Analysen darstellen, die in Abständen entlang einer Linie durchgeführt wurden, aber es würden dieselben Prinzipien gelten.
Reihenfolge und Sonderfunktionen sind anhand der folgenden Merkmale sofort erkennbar:
- Ihnen allen ist
@ - Ihre Namen werden in Großbuchstaben angegeben.
Sequenzfunktionen können sich auf den Datensatz beziehen, der gerade von einem Knoten verarbeitet wird, auf die Datensätze, die bereits einen Knoten durchlaufen haben, und in einem Fall sogar auf Datensätze, die noch einen Knoten durchlaufen müssen. Sequenzfunktionen können frei mit anderen Komponenten von CLEM-Ausdrücken gemischt werden, obwohl es bei einigen Einschränkungen hinsichtlich der Argumente gibt.
Beispiele
Es kann nützlich sein zu wissen, wie lange es her ist, dass ein bestimmtes Ereignis eingetreten ist oder eine Bedingung erfüllt war. Verwenden Sie dazu die Funktion @SINCE – zum Beispiel:
@SINCE(Income > Outgoings)
Diese Funktion gibt den Offset des letzten Datensatzes zurück, bei dem diese Bedingung wahr war, d. h. die Anzahl der Datensätze vor diesem, bei denen die Bedingung wahr war. Wenn die Bedingung nie erfüllt 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. Dies können Sie mithilfe der Funktion @THIS tun, die angibt, dass ein Feldname immer für den aktuellen Datensatz gilt. Um den Offset des letzten Datensatzes zu finden, bei dem der Wert des Feldes Concentration mehr als doppelt so hoch war wie der des aktuellen Datensatzes, können Sie Folgendes verwenden:
@SINCE(Concentration > 2 * @THIS(Concentration))
In einigen Fällen trifft die Bedingung, die an @SINCE gestellt wurde, per Definition auf den aktuellen Datensatz zu – zum Beispiel:
@SINCE(ID == @THIS(ID))
Aus diesem Grund bewertet @SINCE den Zustand für den aktuellen Datensatz nicht. Verwenden Sie eine ähnliche Funktion, @SINCE0, wenn Sie die Bedingung für den aktuellen Datensatz sowie für frühere Datensätze auswerten möchten. Wenn die Bedingung im aktuellen Datensatz erfüllt ist, gibt @SINCE0 0 zurück.
| Funktion | Ergebnis | Beschreibung |
|---|---|---|
MEAN(FIELD) |
Reell | Gibt den Mittelwert der Werte für das oder die angegebenen FELD (S) zurück. |
@MEAN(FIELD, EXPR) |
Reell | Gibt den Mittelwert der Werte für FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Durchschnitt aller bisher empfangenen Datensätze zurückgegeben. |
@MEAN(FIELD, EXPR, INT) |
Reell | Gibt den Mittelwert der Werte für FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Durchschnitt aller bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl der Werte an, die zurückverfolgt werden sollen. Dies ist weitaus effizienter als nur zwei Argumente zu verwenden. |
@DIFF1(FIELD) |
Reell | Gibt die erste Differenz von FELD zurück. Die Form mit einem Argument gibt also einfach die Differenz zwischen dem aktuellen Wert und dem vorherigen Wert des Feldes zurück. Gibt "$null$" zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. |
@DIFF1(FIELD1, FIELD2) |
Reell | Die Form mit zwei Argumenten gibt die erste Ableitung von FIELD1 in Bezug auf FIELD2. Gibt "$null$" zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. Es wird als @DIFF1(FIELD1)/@DIFF1(FIELD2) berechnet. |
@DIFF2(FIELD) |
Reell | Gibt die zweite Differenz von FIELD zurück. Die Form mit einem Argument gibt also einfach die Differenz zwischen dem aktuellen Wert und dem vorherigen Wert des Feldes zurück. Gibt "$null$" zurück, wenn die relevanten vorherigen Datensätze nicht vorhanden sind. @DIFF2 wird berechnet als @DIFF(@DIFF(FIELD)). |
@DIFF2(FIELD1, FIELD2) |
Reell | Die Form mit zwei Argumenten gibt die zweite Ableitung von FIELD1 in Bezug auf FIELD2. 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 |
Ganzzahl | Gibt den Index des aktuellen Datensatzes zurück. Indizes werden Datensätzen zugewiesen, sobald sie am aktuellen Knoten ankommen. Der erste Datensatz erhält den Index 1, und der Index wird für jeden nachfolgenden Datensatz um 1 erhöht. |
@LAST_NON_BLANK(FIELD) |
Beliebig | Gibt den letzten Wert für das Feld zurück, der nicht leer war, wie in einer vorgelagerten Quelle oder einem Typ-Knoten definiert. Wenn es in den bisher gelesenen Datensätzen keine nicht leeren Werte für FIELD gibt, wird $null$ zurückgegeben. Beachten Sie, dass leere Werte, auch als benutzerdefinierte fehlende Werte bezeichnet, für jedes Feld separat definiert werden können. |
@MAX(FIELD) |
Zahl | Gibt den Maximalwert für das angegebene FELD zurück. |
@MAX(FIELD, EXPR) |
Zahl | Gibt den Maximalwert für FIELD über die bisher empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. |
@MAX(FIELD, EXPR, INT) |
Zahl | Gibt den Maximalwert für FIELD über die bisher empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Maximalwert aller bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl der Werte an, die zurückverfolgt werden sollen. Dies ist weitaus effizienter als nur zwei Argumente zu verwenden. |
@MIN(FIELD) |
Zahl | Gibt den Mindestwert für das angegebene FELD zurück. |
@MIN(FIELD, EXPR) |
Zahl | Gibt den Mindestwert für FIELD über die bisher empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. |
@MIN(FIELD, EXPR, INT) |
Zahl | Gibt den Mindestwert für FIELD über die bisher empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen wird oder die Anzahl der bisher empfangenen Datensätze überschreitet, wird der Mindestwert über alle bisher empfangenen Datensätze zurückgegeben. INT gibt die maximale Anzahl der Werte an, auf die zurückgegriffen werden soll. Dies ist weitaus effizienter als nur zwei Argumente zu verwenden. |
@OFFSET(FIELD, EXPR) |
Beliebig | Gibt den Wert von FIELD im Datensatz zurück, der um den Wert von EXPR vom aktuellen Datensatz versetzt ist. Ein positiver Offset bezieht sich auf einen Datensatz, der bereits vergangen ist (ein "Lookback"), während ein negativer einen "Lookahead" auf einen Datensatz angibt, der noch nicht eingetroffen ist. Beispielsweise gibt @OFFSET(Status, 1) den Wert des Feldes Status im vorherigen Datensatz zurück, während @OFFSET(Status, –4) vier Datensätze in der Sequenz "vorausschaut" (d. h. auf Datensätze, die diesen Knoten noch nicht durchlaufen haben), um den Wert zu erhalten. Beachten Sie, dass ein negativer (Look-Ahead-)Offset als Konstante angegeben werden muss. Nur für positive Offsets kann EXPR auch ein beliebiger CLEM-Ausdruck sein, der für den aktuellen Datensatz ausgewertet wird, um den Offset zu erhalten. In diesem Fall sollte die Version dieser Funktion mit drei Argumenten die Leistung verbessern (siehe nächste Funktion). Wenn der Ausdruck etwas anderes als eine nicht negative Ganzzahl zurückgibt, führt dies zu einem Fehler – das heißt, es ist nicht zulässig, berechnete Lookahead-Offsets zu haben. Beachten Sie, dass eine selbstreferenzierende @OFFSET -Funktion keine wörtliche Vorausschau verwenden kann. Beispielsweise können Sie in einem Filler-Knoten den Wert von field1 nicht durch einen Ausdruck wie @OFFSET(field1,-2) ersetzen. Beim Füllen eines Feldes im Filler-Knoten gibt es effektiv zwei verschiedene Werte dieses Feldes, nämlich den vor dem Füllen und den nach dem Füllen. Wenn @OFFSET auf sich selbst verweist, bezieht es sich auf den nach dem Ausfüllen ermittelten Wert. Dieser nachgefüllte Wert existiert nur für vergangene Zeilen, sodass sich die selbstreferenzierende @OFFSET nur auf vergangene Zeilen beziehen kann. Da sich die selbstreferenzielle @OFFSET nicht auf die Zukunft beziehen kann, führt sie die folgenden Prüfungen des Offsets durch:
|
@OFFSET(FIELD, EXPR, INT) |
Beliebig | Führt die gleiche Operation wie die Funktion @OFFSET aus, mit dem Zusatz eines dritten Arguments, INT, das die maximale Anzahl der zurückzusehenden Werte angibt. In Fällen, in denen der Ausgleich aus einem Ausdruck berechnet wird, sollte dieses dritte Argument die Leistung verbessern. Beispiel: In einem Ausdruck wie@OFFSET(Foo, Month, 12)weiß das System, dass nur die letzten zwölf Werte von Foobeibehalten werden. Andernfalls muss jeder Wert nur für den Fall gespeichert werden. In Fällen, in denen der Offset-Wert konstant ist – einschließlich negativer "Lookahead"-Offsets, die konstant sein müssen – ist das dritte Argument sinnlos und die Zwei-Argument-Version dieser Funktion sollte verwendet werden. Siehe auch den Hinweis zu selbstreferenziellen Funktionen in der zuvor beschriebenen Version mit zwei Argumenten. Beachten Sie, dass die Verwendung von "Lookahead" und "Lookback" innerhalb eines Knotens nicht unterstützt wird. |
@SDEV(FIELD) |
Reell | Gibt die Standardabweichung der Werte für das oder die angegebenen FELD (S) zurück. |
@SDEV(FIELD, EXPR) |
Reell | Gibt die Standardabweichung der Werte für FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen 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) |
Reell | Gibt die Standardabweichung der Werte für FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen 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 der Werte an, die zurückverfolgt werden sollen. Dies ist weitaus effizienter als nur zwei Argumente zu verwenden. |
@SINCE(EXPR) |
Beliebig | Gibt die Anzahl der Datensätze zurück, die vergangen sind, seit EXPR, ein beliebiger CLEM-Ausdruck, wahr war. |
@SINCE(EXPR, INT) |
Beliebig | Durch Hinzufügen des zweiten Arguments INT wird die maximale Anzahl der zurückliegenden Datensätze angegeben. 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 | Durch Hinzufügen des zweiten Arguments gibt INT die maximale Anzahl der zurückliegenden Datensätze an. |
@SUM(FIELD) |
Zahl | Gibt die Summe der Werte für das oder die angegebenen FELD (S) zurück. |
@SUM(FIELD, EXPR) |
Zahl | Gibt die Summe der Werte für FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen 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 FIELD über die letzten vom aktuellen Knoten empfangenen EXPR- Datensätze zurück, einschließlich des aktuellen Datensatzes. "FIELD" muss der Name eines numerischen Feldes sein. EXPR kann ein beliebiger Ausdruck sein, der zu einer Ganzzahl größer als 0 ausgewertet wird. Wenn EXPR ausgelassen 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 der Werte an, die zurückverfolgt werden sollen. Dies ist weitaus effizienter als nur zwei Argumente zu verwenden. |
@THIS(FIELD) |
Beliebig | Gibt den Wert des Feldes mit dem Namen "FIELD" im aktuellen Datensatz zurück. Wird nur in @SINCE -Ausdrücken verwendet. |