# 02 Transformationen

Transformationen bearbeiten Daten nach der Abfrage, aber bevor sie visualisiert werden: aggregieren, filtern, umbenennen, kombinieren. In diesem Tutorial lernst du die wichtigsten Transformationen und baust Schritt für Schritt eine Übersichtstabelle wie diese:

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-9fea948dcf3f034f3a0d919623b9b4d222753c0c%2Fgrafana-transform-hero-01.png?alt=media" alt=""><figcaption></figcaption></figure>

## Was du lernst

* Daten mit Reduce aggregieren (Minimum, Maximum, Mittelwert)
* Felder umbenennen, umsortieren und ausblenden
* Trendlinien mit Regressionsanalyse hinzufügen
* Daten aus mehreren Queries kombinieren
* Transformationen verketten

## Voraussetzungen

* Teil 1 und Teil 2 der Tutorials abgeschlossen
* Grundkenntnisse in der Panel-Erstellung

***

## Der Transform-Tab

1. Bearbeite ein Panel
2. Klicke auf den **Transform**-Tab (zwischen Query und Alert)
3. Klicke auf **+ Add transformation** und wähle eine Transformation

Transformationen werden von oben nach unten ausgeführt. Du kannst sie per Drag-and-Drop umsortieren, deaktivieren (Augen-Symbol) oder löschen (Papierkorb-Symbol).

{% hint style="info" %}
Die Reihenfolge beeinflusst das Ergebnis. Ein Filter vor Reduce liefert andere Ergebnisse als danach.
{% endhint %}

***

## Reduce

Wandelt Zeitreihendaten in aggregierte Werte um. Ideal für Übersichtstabellen.

1. Füge die Transformation **Reduce** hinzu
2. Wähle die Berechnungen:

| Berechnung             | Beschreibung                       |
| ---------------------- | ---------------------------------- |
| **Last \***            | Letzter Wert (nicht null)          |
| **Min** / **Max**      | Minimum / Maximum                  |
| **Mean**               | Mittelwert                         |
| **Sum**                | Summe aller Werte                  |
| **Difference percent** | Prozentuale Veränderung            |
| **All values**         | Array aller Werte (für Sparklines) |

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-c8658125740e4c878bf5e091dfc0fe3dcc0cef92%2Fgrafana-transform-reduce-01.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Organize Fields by Name

Spalten umbenennen, umsortieren und ausblenden. Unverzichtbar für aufgeräumte Tabellen.

1. Füge die Transformation **Organize fields by name** hinzu
2. Für jedes Feld:
   * **Rename**: Neuen Anzeigenamen eingeben
   * **Hide**: Augen-Symbol klicken zum Ausblenden
   * **Reorder**: Per Drag-and-Drop umsortieren

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-35969148d3c5468c4a2a6af9db317331aa2c504f%2Fgrafana-transform-organize-01.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Rename by Regex

Mehrere Felder gleichzeitig mit Musterabgleich umbenennen.

| Einstellung | Beschreibung                                |
| ----------- | ------------------------------------------- |
| **Match**   | Regex-Muster zum Abgleich                   |
| **Replace** | Ersetzungstext ($1, $2 für Capture-Gruppen) |

**Beispiele:**

| Match                    | Replace    | Vorher               | Nachher        |
| ------------------------ | ---------- | -------------------- | -------------- |
| `Extruder (.) Durchsatz` | `Ext $1`   | Extruder A Durchsatz | Ext A          |
| `\(Soll\)`               | `(Target)` | Speed (Soll)         | Speed (Target) |
| `(.+) - (.+)`            | `$2`       | Kiefel - Durchsatz   | Durchsatz      |

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-f7e155274cc19cce27af9a0f24d71fa973e014c2%2Fgrafana-transform-rename-regex-01.png?alt=media" alt=""><figcaption></figcaption></figure>

### Gängige Regex-Muster

| Muster      | Beschreibung                               | Beispiel                        |
| ----------- | ------------------------------------------ | ------------------------------- |
| `.`         | Beliebiges einzelnes Zeichen               | `A`, `1`, `-`                   |
| `.*`        | Beliebig viele Zeichen                     | `Extruder A Durchsatz`          |
| `.+`        | Mindestens ein Zeichen                     | wie `.*`, aber nicht leer       |
| `(...)`     | Capture-Gruppe (im Replace als `$1`, `$2`) | `(Extruder .)` → `$1`           |
| `\(` / `\)` | Literale Klammern                          | `\(Soll\)` findet `(Soll)`      |
| `^` / `$`   | Anfang / Ende des Strings                  | `^Kiefel` findet nur am Anfang  |
| `[A-C]`     | Zeichenklasse                              | `Extruder [A-C]`                |
| `\d+`       | Eine oder mehrere Ziffern                  | `Sensor \d+` findet `Sensor 42` |

***

## Filter by Name

Nur bestimmte Felder in der Ausgabe anzeigen.

1. Füge die Transformation **Filter by name** hinzu
2. Wähle **Include** (nur ausgewählte Felder anzeigen) oder **Exclude** (ausgewählte ausblenden)
3. Felder manuell per Checkboxen auswählen oder per Regex filtern

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-60ee2db929a38eddf6aa2fd293c592fd6f5a23a5%2Fgrafana-transform-filter-name-01.png?alt=media" alt=""><figcaption></figcaption></figure>

**Regex-Beispiele für Filter by Name:**

| Modus   | Regex                   | Effekt                                       |
| ------- | ----------------------- | -------------------------------------------- |
| Include | `Durchsatz\|Temperatur` | Nur Durchsatz- und Temperaturfelder anzeigen |
| Exclude | `.*\(Soll\)`            | Alle Sollwerte ausblenden                    |
| Include | `Extruder [AB].*`       | Nur Extruder A und B anzeigen                |

{% hint style="info" %}
Mit **Filter data by values** kannst du auch Zeilen nach Bedingungen filtern, z. B. nur Datenpunkte anzeigen, bei denen die Temperatur > 200 °C liegt.
{% endhint %}

***

## Regressionsanalyse

Trendlinien hinzufügen, um die Entwicklung von Daten über die Zeit zu erkennen.

1. Füge die Transformation **Regression analysis** hinzu
2. Setze **X field** auf das Zeitfeld und **Y field** auf das Wertfeld

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-76c20b5c7e73e46f611ce22ba74923b77d009d15%2Fgrafana-transform-regression-config-01.png?alt=media" alt=""><figcaption></figcaption></figure>

Die Regressionslinie zeigt den Gesamttrend: steigend, fallend oder stabil.

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-5920b9acea31c31cca247afed7b05eb4cd1b19cd%2Fgrafana-transform-regression-chart-01.png?alt=media" alt=""><figcaption></figcaption></figure>

### Trendlinie gestalten

Die Regressionslinie hat standardmäßig keine Einheit und erscheint auf einer separaten Y-Achse. Füge einen Override hinzu:

1. Feld per Regex abgleichen: `.*predicted.*`
2. Setze die **Unit** auf die gleiche Einheit wie die Originaldaten
3. Wähle eine andere Farbe (z. B. Rot) und einen gestrichelten Linienstil

***

## Daten kombinieren

Wenn du Daten aus mehreren Queries zusammenführen möchtest, stehen dir zwei Transformationen zur Verfügung:

| Transformation    | Beschreibung                                                                                                |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| **Merge**         | Fasst alle Zeitreihen in einer Tabelle zusammen. Keine Konfiguration nötig.                                 |
| **Join by field** | Verknüpft Tabellen über ein gemeinsames Feld (z. B. Zeitstempel). Mode: Inner, Left outer oder Right outer. |

***

## Beispiel: Maschinenvergleich

Dieses Beispiel zeigt, wie du mit einer Transformationskette den Durchsatz zweier Maschinen in einer kompakten Vergleichstabelle zusammenfasst.

### Schritt 1: Zwei Queries anlegen

Erstelle zwei separate Queries, jeweils für eine Maschine. Benenne die Queries nach der Maschine (z. B. „Kiefel" und „Macchi"), damit die Daten später unterscheidbar sind.

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-d72cbf2255adc8a32b728b02d8a563d9ceedb252%2Fgrafana-transform-compare-query-01.png?alt=media" alt=""><figcaption></figcaption></figure>

### Schritt 2: Transformationskette aufbauen

Wechsle zum **Transform**-Tab und füge die folgenden fünf Transformationen nacheinander hinzu:

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-858f14143bd3cd71b4e3c65413ef8c4a6a26ab48%2Fgrafana-transform-compare-chain-01.png?alt=media" alt=""><figcaption></figcaption></figure>

1. **Rename by regex** (×2): Benenne das Feld „Durchsatz" in jeder Query um, damit die Maschine erkennbar wird. Match: `Durchsatz`, Replace: `Kiefel` bzw. `Macchi`. Klicke auf das Filter-Symbol der Transformation und wähle unter **Apply transformation to** die jeweilige Query aus (z. B. „Query: Kiefel"). Dadurch wirkt jede Umbenennung nur auf die zugehörige Query.
2. **Join by field**: Verbindet die beiden umbenannten Zeitreihen über den Zeitstempel zu einer gemeinsamen Tabelle.
3. **Reduce**: Aggregiert die Zeitreihen zu einer Zeile pro Maschine mit den Berechnungen Last \*, Min, Max, Mean, All values und Difference.
4. **Organize fields by name**: Benennt die Spalten lesbarer um (z. B. „Field" → „Machine", „Last \*" → „Current", „All values" → „Trend") und sortiert sie in die gewünschte Reihenfolge.

### Ergebnis

Die fertige Tabelle vergleicht beide Maschinen auf einen Blick, inklusive Sparkline-Trendanzeige:

<figure><img src="https://3556205377-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn6Jn6Re8NNPSKD1jGZyL%2Fuploads%2Fgit-blob-a995c06152fced81e35ecaaf25ec018134bcb6f1%2Fgrafana-transform-compare-result-01.png?alt=media" alt=""><figcaption></figcaption></figure>

Die Spaltenformatierung (Bar Gauge für „Current", farbiger Hintergrund für „Change", Sparkline für „Trend") wird über **Overrides** > **Fields with name** > **Cell options** konfiguriert. Details dazu findest du im Tutorial [Tabellen](https://docs.enlyze.com/integrations/grafana/visualisation-types/03-tables).

{% hint style="info" %}
Nutze den **Table view**-Toggle im Panel-Editor, um nach jeder Transformation das Zwischenergebnis zu prüfen.
{% endhint %}

***

## Tipps

* **Performance**: Transformationen werden im Browser ausgeführt. Wenn möglich, schon auf Query-Ebene filtern.
* **Debuggen**: Transformationen einzeln hinzufügen und den **Table view**-Toggle nutzen, um Zwischenergebnisse zu prüfen.
* **Gängige Muster**: Zeitreihe → Übersichtstabelle: Reduce + Organize fields. Sparklines: Reduce mit All values + Override auf Zelltyp.

***

## Nächste Schritte

* [**Einführung in die ENLYZE API**](https://docs.enlyze.com/integrations/grafana/advanced-api/01-introduction) - API-basierte Dashboards für weiterführende Anwendungsfälle
