LERNPFADE & KURSE

Daten transformieren – String, Math, Date Functions

Autor

Qlik Doktor

Oktober 5, 2025 · 6 Min. Lesezeit


📚 Qlik Sense Kurs – Artikel 5 von 28

Vorheriger Artikel: Mapping Tables vs JOINs – Performance-Optimierung
Nächster Artikel: Daten transponieren – CROSSTABLE vs GENERIC LOAD

Daten transformieren – String, Math, Date Functions


Was kann man in 18 Minuten über Daten transformieren lernen?

Rohdaten sind selten analysebereit. In diesem Guide lernen Sie das Handwerkszeug jedes Qlik-Entwicklers kennen: die Transformationsfunktionen. Wir zeigen Ihnen, wie Sie aus unordentlichen Daten saubere, strukturierte und aussagekräftige Informationen machen.

  1. String-Funktionen zur Datenbereinigung und -standardisierung meisterhaft einsetzen (Trim, Upper, SubField).
  2. Date-Funktionen für robuste Zeitreihen-Analysen verwenden und jedes Datumsformat korrekt interpretieren (`Date#`, `MonthStart`).
  3. Inter-Record-Funktionen wie `Peek()` und `Previous()` für komplexe Berechnungen zwischen Zeilen implementieren (z.B. laufende Summen).

Zeitinvestition: 18 Min Lesen + 2.5 Std Hands-on
Voraussetzung: Load-Strategien verstanden
Quick Win: In 10 Minuten eine komplette String-Bereinigung implementieren


Wie kann ich Kundennamen mit der Kundennamen-Bereinigung schnell bereinigen?

Das Problem: Ihre Kundennamen sind ein Chaos: » max MUSTERMANN «, «Anna Schmidt», «PETRA müller». Für saubere Analysen benötigen Sie ein einheitliches Format.

Die Lösung: Funktions-Verkettung (Function Chaining)
In Qlik können Sie Funktionen ineinander verschachteln. Die Auswertung erfolgt immer von der innersten zur äußersten Funktion. Es ist wie ein Fließband:

  1. `Replace(CustomerName, ‚ ‚, ‚ ‚)`: Ersetzt zuerst doppelte Leerzeichen durch einfache.
  2. `Trim(…)`: Das Ergebnis wird an `Trim` übergeben, das führende und nachfolgende Leerzeichen entfernt.
  3. `Proper(…)`: Das Ergebnis von `Trim` wird an `Proper` übergeben, das den ersten Buchstaben groß und den Rest klein schreibt.

Hier sehen Sie die Anwendung dieser Logik, kombiniert mit einer Validierung, um leere Namen abzufangen.

CleanCustomers:
LOAD
    CustomerID,
    If(Len(Trim(CustomerName)) > 0,
       Proper(Trim(Replace(CustomerName, '  ', ' '))),
       'Name Missing') as CleanCustomerName,
    Lower(Trim(Email)) as CleanEmail
FROM [lib://DataFiles/customers_dirty.csv]
(txt, utf8, embedded labels, delimiter is ';');

Erklärung:

  • Trim(): Entfernt Leerzeichen am Anfang und Ende eines Textes.
  • Proper(): Formatiert einen Text zu «Satzschreibweise».
  • Replace(): Sucht und ersetzt eine Zeichenfolge in einem Text.
  • Len() & If(): Wir prüfen zuerst mit `Len(Trim(CustomerName))`, ob nach der Bereinigung noch Text übrig ist. Nur dann wenden wir die Formatierung an, ansonsten geben wir einen Standardwert aus.

Checkpoint: Sind alle Namen in der Spalte `CleanCustomerName` einheitlich formatiert? Perfekt!


Was sind die Transformations-Kategorien im Überblick?

Qlik bietet eine umfangreiche «Werkzeugkiste» an Funktionen, die sich in verschiedene Kategorien einteilen lassen.

KategorieHauptfunktionenPerformanceIdeal für…
String`Trim`, `Upper`, `SubField`, `Replace`SchnellBereinigung und Extraktion von Textinformationen (Namen, Adressen, IDs).
Date/Time`Date#`, `MonthStart`, `AddMonths`MittelUmwandlung von Text in korrekte Datumsformate und Erstellung von Kalenderfeldern.
Math`Round`, `Ceil`, `Floor`, `Mod`Sehr schnellNumerische Berechnungen, Rundungen und die Kategorisierung von Zahlenwerten.
Inter-Record`Peek`, `Previous`, `RangeSum`LangsamSequentielle Berechnungen, die auf Werte in vorherigen Zeilen zugreifen (z.B. laufende Summen, Deltas).
Conditional`If`, `Pick`, `Alt`, `Coalesce`SchnellImplementierung von Business-Logik, Validierungen und das Setzen von Standardwerten.

Performance-Hinweis: Inter-Record-Funktionen sind deutlich langsamer, da sie Qliks Fähigkeit zur parallelen Verarbeitung einschränken. Setzen Sie sie gezielt und nur dann ein, wenn es keine andere Lösung gibt.


Wie kann ich String-Funktionen verwenden, um Text zu transformieren?

Wie funktioniert die Text-Normalisierung und das Parsing mit `SubField()`?

`SubField()` ist eine der nützlichsten String-Funktionen. Sie zerlegt einen Text anhand eines Trennzeichens in seine Bestandteile.

Analogie: `SubField(‚Max Mustermann‘, ‚ ‚, 2)` ist wie die Anweisung: «Nimm den Text ‚Max Mustermann‘, teile ihn bei jedem Leerzeichen und gib mir das zweite Wort.» Das Ergebnis wäre ‚Mustermann‘. `-1` als dritter Parameter gibt den letzten Teil zurück.

Hier nutzen wir verschiedene String-Funktionen, um Namen zu zerlegen und E-Mails zu validieren.

CustomerCleaning:
LOAD
    CustomerID,
    CustomerName,
    SubField(CustomerName, ' ', 1) as FirstName,
    SubField(CustomerName, ' ', -1) as LastName,
    If(Index(Email, '@') > 0 AND Index(Email, '.') > Index(Email, '@'),
       Lower(Trim(Email)),
       'Invalid Email') as CleanEmail
FROM [lib://DataFiles/customer_data.csv];

Wie nutze ich Date-Funktionen in Qlik zur Zeitmanipulation?

Was ist der Unterschied zwischen `Date#()` und `Date()`?

Dies ist das wichtigste Konzept für die Datumsverarbeitung in Qlik. Ein Datum wie «05.10.2025» ist für Qlik zunächst nur ein Text. Es muss in Qliks internes numerisches Datumsformat umgewandelt werden, um damit rechnen zu können.

  • `Date#(text, ‚format‘)` (Der «Dolmetscher»): Diese Funktion **interpretiert** einen Text. Sie liest den `text` und versteht ihn anhand der `format`-Vorlage (z.B. ‚DD.MM.YYYY‘), um ihn in eine Zahl umzuwandeln.
  • `Date(zahl, ‚format‘)` (Der «Formatierer»): Diese Funktion nimmt eine numerische Datumdarstellung und **formatiert** sie für die Anzeige, z.B. als ‚Oct 2025‘.

Praxisregel: Man verwendet fast immer beide zusammen: `Date(Date#(DatumAlsText, ‚Input-Format‘))`.

Der `Coalesce()`-Befehl versucht, das Datum mit verschiedenen Formaten zu interpretieren, bis eines erfolgreich ist. Dies ist sehr robust bei gemischten Datenquellen.

DateConversion:
LOAD
    RecordID,
    DateString,
    Date(
      Coalesce(
        Date#(DateString, 'DD.MM.YYYY'),
        Date#(DateString, 'YYYY-MM-DD'),
        Date#(DateString, 'MM/DD/YYYY')
      )
    ) as AutoDate
FROM date_samples.csv;

Welche Funktionen bietet der Business Calendar?

Sobald Sie ein korrektes Datumsfeld haben, können Sie mühelos Kalenderdimensionen für Ihre Analysen erstellen.

BusinessDates:
LOAD
    OrderID,
    OrderDate,
    Year(OrderDate) as OrderYear,
    'Q' & Ceil(Month(OrderDate)/3) as OrderQuarter,
    Month(OrderDate) as OrderMonth,
    WeekDay(OrderDate) as OrderWeekDay,
    MonthStart(OrderDate) as MonthStart,
    AddMonths(YearStart(Today()), -12) as PreviousYearStart
FROM orders.csv;

Was sind die Inter-Record-Funktionen für zeilenübergreifende Logik?

Diese Funktionen ermöglichen Berechnungen, die auf Daten in vorherigen Zeilen zugreifen. **Wichtig:** Die Tabelle muss mit `ORDER BY` korrekt sortiert sein, damit diese Funktionen verlässliche Ergebnisse liefern.

  • `Previous(feld)`: Greift auf den Wert von `feld` in der **direkt vorangegangenen Zeile** zu. Ideal für die Berechnung von Deltas.
  • `Peek(‚feld‘, zeilennummer, ‚tabelle‘)`: Viel mächtiger. Greift auf den Wert von `feld` in einer **beliebigen, bereits geladenen Zeile** zu.
  • `RangeSum(Above(…))`: Ein gängiges Muster zur Berechnung von laufenden Summen (Running Totals).

Hier berechnen wir eine laufende Summe und die Reihenfolge der Bestellungen pro Kunde.

RunningTotals:
LOAD
    OrderID,
    CustomerID,
    OrderDate,
    Amount,
    Amount - Previous(Amount) as AmountDelta,
    If(CustomerID = Previous(CustomerID), Previous(CustomerOrderSequence) + 1, 1) as CustomerOrderSequence
FROM orders.csv
ORDER BY CustomerID, OrderDate;

Wie bilde ich Business-Regeln mit Conditional Logic ab?

Bedingte Funktionen sind das Herzstück der Business-Logik in Ihrem Skript.

  • `If(bedingung, dann, sonst)`: Die universelle Funktion für Wenn-Dann-Logik. Kann beliebig tief verschachtelt werden.
  • `Pick(Match(feld, ‚A‘, ‚B‘, ‚C‘), ‚Wert A‘, ‚Wert B‘, ‚Wert C‘)`: Eine elegante und oft besser lesbare Alternative zu verschachtelten `If`-Anweisungen, wenn Sie einen Wert mit einer festen Liste von Möglichkeiten vergleichen.
  • `Coalesce(feld1, feld2, …, default)`: Gibt den ersten nicht-leeren (`NULL`) Wert aus einer Liste von Feldern zurück. Perfekt, um eine Hierarchie von Fallback-Werten zu definieren.
CustomerSegmentation:
LOAD
    CustomerID,
    TotalRevenue,
    Region,
    PreferredEmail,
    BusinessEmail,
    If(TotalRevenue > 10000, 'VIP',
        If(TotalRevenue > 5000, 'Premium', 'Standard')) as Segment,
    Pick(Match(Region, 'North', 'South', 'East'),
        'Northern Region', 'Southern Region', 'Eastern Region') as RegionName,
    Coalesce(PreferredEmail, BusinessEmail, 'No Email Found') as ContactEmail
FROM customer_analysis.csv;

Wie behebe ich Probleme mit Datentransformierung in String, Math, Date Functions?

Warum gibt Date#() NULL zurück?

Problem: Obwohl das Datum im `DateString` korrekt aussieht, schlägt die Umwandlung fehl.

Ursache: Meistens stimmt das angegebene Format im zweiten Parameter von `Date#()` nicht exakt mit dem Text überein. Achten Sie auf Details wie `.` vs. `/` vs. `-` oder `YYYY` vs. `YY`.

Lösung: Erstellen Sie eine Debugging-Tabelle, in der Sie mehrere Formate testen, um das richtige zu identifizieren.

DateDebug:
LOAD
    DateString,
    Date#(DateString, 'DD.MM.YYYY') as GermanFormat,
    Date#(DateString, 'MM/DD/YYYY') as USFormat,
    Date#(DateString, 'YYYY-MM-DD') as ISOFormat
FROM date_problems.csv;

Was sind die nächsten Schritte im Kurs über Daten transformieren?

Als nächstes: Daten transponieren – CROSSTABLE vs GENERIC LOAD

Verwandte Themen: