LERNPFADE & KURSE

Daten in Qlik laden – Alle Quellen erklärt

Autor

Qlik Doktor

Oktober 5, 2025 · 10 Min. Lesezeit

📚 Qlik Sense Kurs – Artikel 1 von 28

Nächster Artikel: Load-Strategien – RESIDENT vs PRECEDING vs INLINE

Was kann man in 15 Minuten lernen, um Daten in Qlik zu laden?

Nach diesem Guide können Sie:

  1. CSV-Dateien mit Umlauten und falschen Trennzeichen fehlerfrei laden (100% Erfolgsrate).
  2. Datenbank-Abfragen schreiben, die bis zu 50x schneller sind als ein undifferenziertes SELECT *.
  3. Die richtige Ladestrategie für Ihr Datenvolumen wählen (kleine vs. große Datenmengen).

Zeitinvestition: 15 Min Lesen + 2 Std Hands-on
Voraussetzung: Qlik Sense Desktop oder Cloud installiert
Quick Win: In 5 Minuten eine CSV-Datei erfolgreich laden


Wie lade ich Daten aus allen Quellen in Qlik?

  1. Schnellstart: Wie lädt man eine CSV-Datei in Qlik?
  2. Welche Lademethode passt zu Ihrem Projekt?
  3. Wie lädt man CSV- und Excel-Dateien optimal?
  4. Wie verbindet man Qlik mit einer Datenbank?
  5. Wie lädt man Daten über REST APIs?
  6. Was ist ein Binary Load und wann braucht man ihn?
  7. Wie löst man häufige Ladeprobleme?
  8. Wie optimiert man die Lade-Performance?

Wie lädt man eine CSV-Datei in Qlik?

Eine CSV-Datei laden Sie in Qlik mit dem LOAD...FROM Befehl, der die Datei liest, die Spalten zuordnet und in eine Qlik-Tabelle überführt. In nur 3 Schritten haben Sie Ihre ersten Daten in der App.

Lösung in 3 Schritten:

  1. Öffnen Sie den Dateneditor und klicken Sie auf «Daten hinzufügen».
  2. Wählen Sie Ihre CSV-Datei aus (z.B. verkaufsdaten.csv). Qlik wird versuchen, die Einstellungen zu erraten.
  3. Übernehmen Sie den generierten Code und passen Sie ihn im Skript-Editor an, um die volle Kontrolle zu haben.

Der folgende Code ist ein robustes Standard-Skript für deutsche CSV-Dateien:

Verkaufsdaten:
LOAD
    BestellID,
    Kunde,
    Betrag,
    Datum
FROM [lib://DataFiles/verkaufsdaten.csv]
(txt, utf8, embedded labels, delimiter is ';');

Erklärung der Parameter:

  • Verkaufsdaten: Der Name, den Ihre Tabelle in Qlik erhalten wird.
  • LOAD...FROM: Der Kernbefehl, um Daten aus einer Quelle zu laden.
  • (txt, ...): Die Konfiguration für die Datei:
    • txt: Gibt an, dass es sich um eine Textdatei handelt (gilt für CSV, TXT, TAB).
    • utf8: Die Zeichenkodierung. UTF-8 ist entscheidend für die korrekte Darstellung von Umlauten (ä, ö, ü) und Sonderzeichen.
    • embedded labels: Teilt Qlik mit, dass die erste Zeile die Spaltenüberschriften enthält und als Feldnamen verwendet werden soll.
    • delimiter is ';': Definiert das Trennzeichen. In Deutschland exportiert Excel CSVs standardmäßig mit einem Semikolon (;), während im internationalen Raum oft ein Komma (,) verwendet wird.

Checkpoint: Sehen Sie Ihre Daten korrekt in der Tabellenvorschau? Perfekt! Falls nicht, überprüfen Sie, ob das Trennzeichen stimmt, und lesen Sie den Abschnitt Troubleshooting.


Welche Lademethode passt zu Ihrem Projekt?

Die Wahl der Lademethode hängt von drei Faktoren ab: Datenvolumen, Aktualisierungshäufigkeit und Infrastruktur. Diese Tabelle gibt Ihnen eine schnelle Entscheidungshilfe.

Methode Max. Rows Setup-Zeit Ladezeit/100k Ideal für
CSV/Excel ~1 Mio. 5 Min ~15 Sek Manuelle, monatliche Reports oder Prototyping.
Database (ODBC/JDBC) 50+ Mio. 30 Min ~8 Sek Automatisierte, tägliche Updates aus ERP/CRM-Systemen.
REST API ~5 Mio. 1 Std ~25 Sek Anbindung von Cloud-Diensten (z.B. Salesforce, Google Analytics).
Data Gateway 100+ Mio. 2 Std ~5 Sek Sichere Anbindung lokaler Datenbanken an Qlik Cloud.

Hinweis: Die Setup-Zeit für Datenbanken oder APIs beinhaltet die erstmalige Konfiguration der Verbindung (Treiber, Anmeldedaten, Firewall-Freigaben). Bei Problemen mit dem Data Gateway hilft der Data Gateway Troubleshooting Guide.


Wie lädt man CSV- und Excel-Dateien optimal?

CSV- und Excel-Dateien sind der schnellste Einstieg in Qlik — Setup in 5 Minuten, keine Treiber nötig. Der Schlüssel zum Erfolg liegt in der richtigen Konfiguration von Encoding und Trennzeichen.

Wie konfiguriert man verschiedene CSV-Formate?

Das CSV-Format variiert je nach Region und Quellsystem. Hier sind die drei häufigsten Varianten:

Ein typisches englisches Format verwendet ein Komma als Trennzeichen und eine ältere Zeichenkodierung:

StandardCSV:
LOAD *
FROM [lib://DataFiles/sales_data.csv]
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);

Ein deutscher Excel-Export nutzt meist ein Semikolon und UTF-8 für korrekte Umlaute:

DeutscheCSV:
LOAD *
FROM [lib://DataFiles/verkaufsdaten.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

Eine Tab-getrennte Datei wird oft aus Systemen exportiert und verwendet den Tabulator t als Trennzeichen:

TabFile:
LOAD *
FROM [lib://DataFiles/export.txt]
(txt, utf8, embedded labels, delimiter is 't', msq);

Wichtige Parameter erklärt:

  • codepage is 1252 vs. utf8: 1252 ist eine ältere Windows-Kodierung. utf8 ist der moderne Standard. Beginnen Sie immer mit utf8. Nur wenn Umlaute falsch dargestellt werden, testen Sie 1252.
  • msq: Steht für «Modern Style Quoting». Dieser Parameter hilft Qlik, Anführungszeichen innerhalb Ihrer Daten korrekt zu interpretieren und Datenverschiebungen zu vermeiden. Es ist eine gute Praxis, ihn immer anzugeben.

Wie lädt man Excel-Dateien effizient?

Excel ist flexibel, aber bei großen Datenmengen (>100.000 Zeilen) deutlich langsamer als CSV oder Datenbanken. Für große Excel-Files empfiehlt es sich, diese zuerst als CSV zu exportieren oder als QVD zwischenzuspeichern.

Laden eines einzelnen Sheets mit dem Namen ‚Sheet1‘:

ExcelData:
LOAD *
FROM [lib://DataFiles/report.xlsx]
(ooxml, embedded labels, table is Sheet1);

Mit einer FOR Each-Schleife können Sie mehrere Sheets automatisiert laden. Die Variable vSheet nimmt nacheinander die Werte ‚Sales‘, ‚Marketing‘ etc. an. So wird jedes Sheet als eigene Tabelle geladen und ein Feld ‚Department‘ hinzugefügt, um die Daten später unterscheiden zu können.

FOR Each vSheet in 'Sales', 'Marketing', 'Operations'
    $(vSheet)_Data:
    LOAD
        '$(vSheet)' as Department,
        *
    FROM [lib://DataFiles/company_report.xlsx]
    (ooxml, embedded labels, table is $(vSheet));
NEXT vSheet

Excel Performance-Tipps:

  • ooxml vs. biff: ooxml ist der Standard für moderne .xlsx-Dateien. biff ist das ältere Format für .xls-Dateien.
  • Benannte Bereiche: Wenn Sie in Excel einen Bereich benennen (z.B. «Sales_Data»), können Sie diesen direkt laden. Das ist robuster als Zellbereiche wie A1:E100, da es bei Hinzufügen von Zeilen/Spalten erhalten bleibt.

Wie verbindet man Qlik mit einer Datenbank?

Datenbanken sind die performanteste Methode für große, strukturierte Datenmengen — bis zu 50x schneller als CSV bei richtiger Konfiguration. ODBC, OLE DB und JDBC sind verschiedene Protokolle, um mit Datenbanken zu kommunizieren. Beginnen Sie immer mit dem nativen Connector, den Qlik für Ihre Datenbank anbietet.

Welchen Connector braucht man?

Starten Sie mit dem nativen Connector für Ihre Datenbank. Ist keiner verfügbar, ist ODBC der universelle Standard.

Eine ODBC-Verbindung zu einem Microsoft SQL Server:

LIB CONNECT TO 'SQL_Server_ODBC';

CustomerData:
SQL SELECT
    CustomerID,
    CustomerName,
    Region
FROM Customers
WHERE LastModified > '2024-01-01';

Eine OLE DB-Verbindung, die oft eine bessere Performance für SQL Server unter Windows bietet:

LIB CONNECT TO 'Provider=SQLOLEDB;Server=sql-server;Database=Sales;Trusted_Connection=yes';

Warum ist SQL SELECT + LOAD der beste Ansatz?

Die größte Performance-Steigerung erzielen Sie mit dem Hybrid-Ansatz: Lassen Sie den Datenbankserver filtern und aggregieren, und transformieren Sie in Qlik. Anstatt sich alle Bücher einer Bibliothek an den Tisch bringen zu lassen (SELECT *), geben Sie dem Bibliothekar eine präzise Liste.

Hier wird eine komplexe Aggregation direkt auf dem Server ausgeführt. Nur das Ergebnis wird an Qlik übertragen:

FastServerQuery:
SQL SELECT
    o.OrderID,
    o.CustomerID,
    SUM(od.UnitPrice * od.Quantity) as OrderTotal
FROM Orders o
    JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '2024-01-01'
GROUP BY o.OrderID, o.CustomerID;

Beim Hybrid-Ansatz holt die SQL SELECT-Anweisung die vorgefilterten Rohdaten vom Server. Anschließend werden im Qlik LOAD-Statement weitere Qlik-spezifische Transformationen angewendet. Mehr zu Daten-Transformationen in Qlik.

FlexibleQuery:
LOAD
    OrderID,
    CustomerID,
    Date(OrderDate) as OrderDate,
    If(OrderTotal > 1000, 'High', 'Standard') as OrderCategory;
SQL SELECT
    OrderID,
    CustomerID,
    OrderDate,
    OrderTotal
FROM Orders
WHERE OrderDate >= '2024-01-01';

Wenn Sie SQL-JOINs in Qlik statt auf dem Server durchführen möchten, bietet Qlik eigene JOIN- und KEEP-Befehle mit spezifischen Vorteilen für das Datenmodell.


Wie lädt man Daten über REST APIs?

REST APIs sind Schnittstellen um Daten von Web-Diensten abzufragen — ideal für Cloud-Dienste wie Salesforce, HubSpot oder Google Analytics. Die Authentifizierung erfolgt meist über einen «Bearer Token», den Sie im HTTP-Header mitsenden.

Eine Basis-Abfrage an einen API-Endpunkt, der eine Liste von Benutzern zurückgibt:

LIB CONNECT TO 'REST_Connector';

RestParameters:
SQL SELECT
    "id",
    "name",
    "email"
FROM CSV (header on, delimiter ",", quote """") "root"
WITH CONNECTION (
    URL "https://api.example.com/users",
    HTTPHEADER "Authorization" "Bearer your-api-token"
);

Wie implementiert man Pagination für große API-Datenmengen?

Viele APIs senden große Datenmengen in «Seiten» (Pagination). Sie müssen die Daten in einer Schleife abrufen, bis keine neuen Datensätze mehr kommen. Der folgende Code fragt die API Seite für Seite ab, bis weniger als 1000 Datensätze zurückkommen:

LET vPage = 1;
LET vHasMore = 1;

DO WHILE vHasMore = 1
    RestData_Page_$(vPage):
    SQL SELECT "id", "name"
    FROM JSON (wrap on) "root" PK "__KEY_root"
    WITH CONNECTION (
        URL "https://api.example.com/data?page=$(vPage)&limit=1000"
    );

    IF NoOfRows('RestData_Page_$(vPage)') < 1000 THEN
        LET vHasMore = 0;
    ELSE
        LET vPage = vPage + 1;
    END IF
LOOP

Für robustes Error Handling bei API-Aufrufen empfiehlt es sich, Fehlerprüfungen nach jedem Request einzubauen. Und wenn Sie API-Daten regelmäßig aktualisieren möchten, lohnt sich ein Blick auf Incremental Loading.


Was ist ein Binary Load und wann braucht man ihn?

BINARY kopiert das gesamte Datenmodell einer anderen Qlik-App in Ihre aktuelle App — blitzschnell und ohne erneutes Laden der Quellen. Es ist wie ein «Klonen» des kompletten Datenmodells.

Wichtig: Der BINARY-Befehl muss die allererste Zeile in Ihrem Skript sein.

BINARY [lib://Apps/Master_Data_Model.qvf];

NewTable:
LOAD *
FROM [lib://DataFiles/additional_data.csv]
(txt, utf8, embedded labels, delimiter is ';');

Einschränkungen: Sie können nicht auswählen, welche Tabellen geladen werden — es ist immer das gesamte Modell. Nach dem Binary Load können Sie jedoch weitere Tabellen hinzufügen oder bestehende mit JOIN oder CONCATENATE erweitern.

In einer professionellen Umgebung wird Binary Load oft durch eine Three-Stage Architecture ersetzt, die mehr Flexibilität und Kontrolle bietet.


Wie löst man häufige Ladeprobleme?

Die meisten Ladeprobleme in Qlik lassen sich auf drei Ursachen zurückführen: falsches Encoding, falsche Trennzeichen oder Timeout-Einstellungen. Hier sind die Lösungen.

Wie behebt man CSV Encoding-Probleme (Umlaute)?

Problem: Umlaute wie ‚ä‘, ‚ö‘, ‚ü‘ werden als ‚ä‘ oder ‚??‘ angezeigt.

Lösung: Dies ist fast immer ein Problem mit der Zeichenkodierung. Testen Sie diese drei Formate nacheinander — in 99% der Fälle löst eines davon das Problem:

LOAD * FROM file.csv (txt, utf8, embedded labels, delimiter is ';');
LOAD * FROM file.csv (txt, codepage is 1252, embedded labels, delimiter is ';');
LOAD * FROM file.csv (txt, Unicode, embedded labels, delimiter is ';');

Für eine systematische Herangehensweise an solche Probleme empfehlen wir den Artikel zu Data Quality in Qlik.

Wie löst man Datenbank Connection Timeouts?

Problem: Das Laden aus der Datenbank bricht nach kurzer Zeit mit einer Timeout-Fehlermeldung ab.

Lösung: Ihre Abfrage dauert länger als die Standard-Timeout-Zeit des Treibers. Sie können diesen Wert direkt im Connection String erhöhen:

LIB CONNECT TO '...;Connection Timeout=60;Command Timeout=300';

Connection Timeout ist die Zeit zum Herstellen der Verbindung, Command Timeout ist die maximal erlaubte Laufzeit für Ihre SQL-Abfrage. Weitere Tipps zu Memory- und Performance-Problemen finden Sie im separaten Troubleshooting-Artikel.


Wie optimiert man die Lade-Performance?

Die größten Performance-Gewinne beim Laden erzielen Sie durch QVD-Files und korrekte Datentypen — zusammen können diese den Ladevorgang um den Faktor 100 beschleunigen und den RAM-Verbrauch um bis zu 80% senken.

Was ist ein Optimized QVD Load?

QVDs sind Qliks natives, spalten-optimiertes Speicherformat und die schnellste Art, Daten zu laden. Ein «Optimized Load» ist bis zu 100x schneller, da Qlik die Daten direkt in den RAM lesen kann, ohne sie Zeile für Zeile zu verarbeiten. Mehr dazu im QVD-Optimierung Artikel.

Dieser Ladevorgang ist optimiert, da nur Felder ausgewählt und umbenannt werden:

FastLoad:
LOAD
    CustomerID,
    CustomerName as Kunde,
    Region
FROM [lib://QVDs/Customers.qvd] (qvd);

Dieser Ladevorgang ist nicht optimiert, da eine Transformation (Upper()) angewendet wird. Qlik muss nun jeden Datensatz einzeln entpacken und verändern:

SlowLoad:
LOAD
    CustomerID,
    Upper(CustomerName) as CustomerName,
    Region
FROM [lib://QVDs/Customers.qvd] (qvd);

Regeln für einen Optimized Load: Keine Transformationen (außer Umbenennen), keine WHERE-Klausel (außer einem einfachen WHERE EXISTS(Feld)). Wenn Sie Transformationen brauchen, nutzen Sie die LOAD-Strategien mit RESIDENT oder Preceding LOAD.

Wie reduziert man den RAM-Verbrauch mit optimierten Datentypen?

Die richtige Interpretation von Datentypen kann den RAM-Verbrauch Ihrer App um bis zu 80% reduzieren. Die drei wichtigsten Funktionen:

  • AutoNumber(): Ersetzt lange, sich wiederholende Textschlüssel (z.B. ‚DE-2025-ABCD-1234‘) durch kleine, eindeutige Integer. Dies hat den größten Einfluss auf die App-Größe.
  • Date(): Wandelt Text wie ‚2025-10-05‘ in Qliks internes Datumsformat um, was Speicher spart und Datumsberechnungen ermöglicht.
  • Num(): Stellt sicher, dass Zahlen als Zahlen und nicht als Text gespeichert werden.
OptimizedData:
LOAD
    AutoNumber(CustomerID) as CustomerKey,
    CustomerName,
    Date(Date#(OrderDate, 'YYYY-MM-DD')) as OrderDate,
    Num(Amount, '#.##') as Amount
FROM source;

Weitere Performance-Strategien — von Incremental Loading bis zur Optimierung des gesamten Datenmodells — werden in den folgenden Kursartikeln vertieft. Einen Überblick über alle Optimierungsmöglichkeiten finden Sie im Performance Best Practices Artikel.