> For the complete documentation index, see [llms.txt](https://docs.enlyze.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enlyze.com/integrations/grafana/intermediate-features/02-transformations.md).

# 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="/files/5AVTrqHeXeGFaiYMIAQm" 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="/files/7ehtEhWFc9zlV8VoHFBP" 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="/files/w3EGPxUtfFBLdypgxNF8" 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="/files/1WK0JqvkOLHjqQjqwtZO" 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="/files/Wcwx7VeW8SFDNYqefdUe" 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="/files/QVe7gZI24zKKiAV7umD3" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/HkOUFymTBWNzCbwRJVPT" 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="/files/nhPlk6CNE8v5dCCSIe8A" 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="/files/RtGDyOX0Qzg4CiVYQNCc" 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="/files/SDnq6DNDq1ATEQuCB0fv" 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](/integrations/grafana/visualisation-types/03-tables.md).

{% 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**](/integrations/grafana/advanced-api/01-introduction.md) - API-basierte Dashboards für weiterführende Anwendungsfälle


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.enlyze.com/integrations/grafana/intermediate-features/02-transformations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
