EMCS v8.9

1. März 2024

 

Am 1. März 2024 wurde EMCS in der Version 8.9 freigegeben.

Die neue Version ergänzt die Fähigkeiten von EMCS im Bereich der Visualisierung von Zeitreihen mit Mehrfachmesswerten und erweitert die Möglichkeiten zur formatierten Ausgabe von Datensätzen.

Das EMCS Datenmodell hat sich in dieser Version nicht geändert, die neue Release verwendet daher weiterhin das EMCS Datenmodell in der Version 71.

 

Folgende Erweiterungen sind in EMCS v8.9 enthalten:

Grafische Visualisierung von Mehrfachmesswerten

Hierbei handelt es sich um eine Liniendiagrammdarstellung eines einzelnen Mehrfachmesswerts zu einem bestimmten Zeitpunkt.
Bei dieser Visualisierung wird der Kardinalitätsindex (bzw. eine konfigurierbare Interpretation desselben) auf der X-Achse aufgetragen, auf der Y-Achse wird der Zahlenwert des Messwerts (in der entsprechenden Einheit) aufgetragen.
Man erhält somit ein Liniendiagramm eines Mehrfachmesswerts zu einem bestimmten Zeitpunkt, aber über alle Werte an den einzelnen Kardinalitäts-Indexpositionen. Man kann sich das Diagramm auch als vertikale Schnittebene einer Heatmap-Darstellung vorstellen. 

Visualisierung eines Mehrfachmesswerts
Visualisierung eines Mehrfachmesswerts

Besonders interessant ist diese Visualisierung für Zeitreihen mit einem hohen Cardinality-Count. Als Beispiel kann man hier Messungen von Spektren nennen, aber auch Staub-Messungen für Ultrafeine Partikel (TSI), wo pro Zeitstempel sehr viele einzelne Messwerte anfallen.

Formatstring mit Formatanweisungen

EMCS Formatstrings können nun optional um spezielle Formatanweisungen ergänzt werden. Mit diesen Formatanweisungen kann detailliert festgelegt werden, wie die durch den Formatstring ausgewählten Attribute bzw. deren Werte in eine Zeichenkette umgewandelt werden.

Folgende Formatanweisungen stehen zur Verfügung:

  • boolean - Wandelt einen Boolean-Wert in einen passenden String um
  • date - Wandelt ein Date oder Calendar Wert in einen String um.
  • ifEmpty - Liefert einen Ersatzstring, falls der Wert empty ist
  • enumName - Nur für Enum Werte: Liefert den Namen des Enum
  • enumOrdinal - Nur für Enum Werte: Liefert die Ordinalzahl des Enum
  • format - Formatiert den Wert mit der Standard Java Methode String#format(), inklusive Formatstring
  • length - Nur für String: Liefert die Länge des Strings
  • negate - Nur für Boolean: liefert die bool'sche Verneinung des Werts
  • ifNull - Liefert einen Ersatzstring, falls der Wert null ist
  • number - Nur für Zahlen: Wandelt den Wert in einen String um, inklusive Format-Pattern
  • replace - Nur für Strings: Ersetzt alle auf eine Regex passenden Substrings durch einen Ersatzstring
  • size - Liefert die Anzahl der Elemente in einer Collection oder Array
  • strip - Nur für Strings: Entfernt Whitespace-Characters vom Anfang und Ende des Strings
  • substring - Nur für Strings: Liefert einen Substring
  • toLower - Nur für Strings: Wandelt alle Zeichen in Kleinbuchstaben um
  • toUpper - Nur für Strings: Wandelt alle Zeichen in Großbuchstaben um
  • toString - Wandelt den Wert in einen einfachen String, inklusive Null-Replacement und Before- und After-Strings
  • trim - Nur für Strings: entfernt Leerzeichen vom Anfang und Ende des Strings

Daneben gibt es folgende Spezialformatanweisungen:

  • ifNullOrElse
  • ifEmptyOrElse
    Diese Formatter leiten den Eingangswert unverändert weiter. Falls aber die If-Abfrage zutrifft (der Input also null oder empty ist), schreiben diese Formatter den Replacement-String direkt an den Ausgang und stoppen die weitere Verarbeitung, d.h. in dem Fall wird ein angehängter Subformatter nicht aufgerufen.
  • string - dieser Formatter schreibt den angegebenen String direkt in den Output-Buffer. Falls ein Subformat angehängt ist, schickt dieses Format danach seine Eingangsdaten unverändert an das Subformat, wo sie weiterverarbeitet werden können.
  • asList - dieser Formatter erwartet eine Collection oder ein Array am Eingang. Er iteriert über alle Elemente der Collection oder des Array und schickt diese einzeln an das Subformat zur Weiterverarbeitung. Zwischen den einzelnen Elementen schreibt das Format einen Element-Separator in den Output-Buffer. Die neuen Formatanweisungen können auch kaskadiert werden (wobei natürlich nicht jede Kombinationsmöglichkeit auch sinnvoll ist)

Beispiele

  • Ausgabe des optionalen Wert des dynamischen Attributs mit dem Code MEASBEGIN eines Messorts
    %sref.daValue("MEASBEGIN")#ifNullOrElse("N/A").date("dd.MM.YYYY HH:mm")
  • Ausgabe des optionalen Werts des dynamischen Attributs mit dem Code publishReport eines Parameters
    %par.daValue(string:publishReport)#ifNullOrElse(string:Nein).boolean(string:Ja, string:Nein)
  • Ausgabe der Bezeichner für alle Kardinalitäts-Indexpositionen
    %card.label#asList("[", "]", ";")

Verwendung

Formatanweisungen in Formatstrings können überall dort verwendet werden, wo EMCS Formatstrings zur Anwendung kommen, wie zum Beispiel:

  • Im CSV Report Manager, bei der Spaltendefinition mit dem Ausgabetyp Formatiert
  • In Auswertungen bei der Konfiguration von Bezeichnern für die Ausgabe, in der Einstellung freies Format
  • Bei der Konfiguration von vordefinierten Bezeichnerformaten über Properties, im Property-Namespace BOFormatter
  • Bei der Konfiguration von Standard-Formattern für Datentypen über Properties, im Property-Namespace emcs
  • In EMCS Remote Clients bei Verwendung des EMCS API und der FormatFactory zur Erzeugung von Formatter-Objekten