📚 Qlik Sense Kurs – Artikel 22 von 28
← Vorheriger Artikel: Monitoring & Logging
→ Nächster Artikel: Subroutinen
Was sind Variablen & Includes? Das Fundament modularer Qlik Scripts. Sie ermöglichen die Wiederverwendung von Konfigurationen, Datenbankverbindungen und Code-Modulen für wartbare und skalierbare Lösungen. Dies ist der erste Schritt zur Implementierung einer echten Three-Stage Architektur.
Was lernst Du über Variablen & Include-Files in Qlik Scripts?
Nach diesem Guide kannst Du:
- Den Unterschied zwischen
SETundLETverstehen und für optimale Performance einsetzen. - Include-Files (
$(Must_Include)) für modulare Scripts und zentrale Konfigurationen nutzen. - Environment-spezifische Konfigurationen für DEV/TEST/PROD-Umgebungen erstellen.
Zeitinvestment: 20 Min Lesen + 3 Std Hands-on
Quick Win: In 15 Minuten hast Du erste Includes implementiert
Was ist das Prinzip von Don’t Repeat Yourself (DRY)?
Das Problem: Du hast dieselbe Datenbankverbindung oder denselben komplexen Datums-Check in 15 verschiedenen Apps kopiert. Wenn sich das Passwort ändert oder sich die Logik anpassen muss, musst Du alle 15 Apps einzeln anfassen – ein Wartungsalbtraum!
Die Lösung: Zentrale Include-Files. Die Änderung an einer Stelle (dem zentralen Include-File) wird automatisch auf alle Apps übertragen, die dieses Modul aufrufen.
Was ist der entscheidende Unterschied zwischen SET und LET?
Der Unterschied zwischen SET und LET ist fundamental für die Performance Deiner Anwendung und die Stabilität Deiner Expressions.
| Command | Verhalten | Wann nutzen? |
|---|---|---|
| SET | Speichert den Wert als literal string (Text). Die Evaluation findet erst bei der Verwendung statt (z.B. im Chart). | Frontend-Expressions, Pfade, statische Strings, komplexe Set Analysis. |
| LET | Evaluiert die Expression sofort (beim Laden des Skripts) und speichert das Ergebnis (meist eine Zahl). | Berechnungen, Funktionen, Datum, Zähler für Error Handling. |
Was ist SET – Die dynamische (Chart) Expression in Qlik Scripts?
// SET speichert den Text EXAKT: "Sum(Sales) * 1.2"
SET vFormula = Sum(Sales) * 1.2;
// Verwendung in Chart Expression
=$(vFormula)
// Wichtig: Die Formel wird erst im Chart-Objekt evaluiert und cached dort.
Performance-Vorteil: Wenn Du eine komplexe Formel (z.B. Set Analysis) mit SET definierst, wird der Text im Frontend gespeichert und durch den Qlik-Engine-Cache optimiert.
Was ist LET – die statische (Skript) Berechnung in Qlik?
// LET berechnet SOFORT (im Skript)
LET vTotal = 100 + 50;
// vTotal enthält: 150 (Zahl)
LET vToday = Today();
// vToday enthält das heutige Datum als numerische Serial Number
Anwendungsfall: Immer wenn Du mit Funktionen wie `Today()`, `Max()` oder `Year()` arbeitest, muss `LET` verwendet werden, um das Ergebnis zu speichern.
Was ist Dollar-Sign Expansion in Qlik Scripts?
Die Dollar-Sign Expansion $(variable) expandiert den Wert der Variablen **bevor** Qlik das Statement parst und ausführt. Sie ist der Schlüssel, um Variablen überhaupt nutzen zu können.
SET vRegion = 'North';
LET vCurrentAmount = 5000;
// Expansion in LOAD-Statement
LOAD *
FROM;
// Wird zu: LOAD * FROM;
// Expansion in WHERE-Klausel (Zahlen brauchen keine Anführungszeichen)
WHERE Amount > $(vCurrentAmount);
// Wird zu: WHERE Amount > 5000;
Tipp: Sei bei der Verwendung von SET-Variablen in Set Analysis vorsichtig. Hier musst Du oft die Formel (SET) mit der Expansion (LET) kombinieren. Lese dazu mehr über fortgeschrittene Qlik Expressions.
Was sind Include-Files in modularen Scripts?
Include-Files sind externe Textdateien (oft mit der Endung `.qvs`), die Qlik während des Ladens in das Hauptskript einfügt und ausführt.
Was sind die Unterschiede zwischen $(Include) und $(Must_Include)?
| Command | Fehler wenn Datei fehlt? | Wann nutzen? |
|---|---|---|
$(Include) |
Nein, das Script läuft weiter. | Optionale Files oder nicht-kritische Code-Blöcke. |
$(Must_Include) |
Ja, das Script stoppt sofort (Error Code 8: File not found). | Kritische Konfigurations- oder Verbindungs-Dateien. |
Wie ist die Basis-Struktur des Hauptskripts aufgebaut?
//============================================
// MAIN SCRIPT
//============================================
// Core Configuration (MUSS existieren)
$(Must_Include=lib://Scripts/01_Config.qvs)
// Subroutines (siehe nächster Artikel)
$(Must_Include=lib://Scripts/03_Subroutines.qvs)
// Hier: Die tatsächlichen Load-Statements der App
$(Must_Include=lib://Scripts/04_Load_Staging.qvs)
Wie funktionieren Variablen & Include-Files in Qlik Scripts?
Die Konfigurationsdatei sammelt alle Konstanten, die in der gesamten App benötigt werden, an einem zentralen Ort:
//============================================
// 01_Config.qvs - Central Configuration
//============================================
// System Settings
SET DateFormat='DD.MM.YYYY';
// Path Variables (zentrale Pfade zum QVD-Archiv, etc.)
SET vQVDPath = 'lib://QVDArchive/'; // Portabel dank lib://
SET vLogPath = 'lib://Logs/';
// Date Variables
LET vToday = Today();
LET vCurrentYear = Year(Today());
LET vPreviousYear = Year(Today()) - 1;
// Business Thresholds
SET vHighValueThreshold = 10000;
SET vTargetMargin = 0.25;
// Optional: Hier die zentrale Definition für den Master Calendar
// Lese dazu unseren Guide zum Master Calendar.
Best Practice: Oft werden auch die LIB CONNECT TO Anweisungen in einer eigenen Include-Datei gespeichert, um Verbindungsdaten zentral zu verwalten. Dies ist besonders bei der Qlik Cloud Migration hilfreich, da Verbindungen dort zentral administriert werden müssen.
Was sind die umgebungsspezifischen Konfigurationen: DEV vs. PROD?
Um die Code-Basis zwischen Entwicklung (DEV) und Produktion (PROD) synchron zu halten, sollten Umgebungsvariablen verwendet werden. Dadurch vermeiden Sie, dass Testdaten in die Produktion gelangen (und umgekehrt).
Das Ziel ist, dass **nur ein einziger Wert** (`vEnvironment`) im Skript geändert werden muss, um das gesamte Verhalten der App umzustellen.
Wie funktioniert Environment Detection im Hauptskript?
// 1. Environment-Setting abrufen (kann manuell oder automatisch gesetzt werden)
SET vEnvironment = 'DEV'; // Z.B. im Dev-Skript manuell auf DEV setzen
// 2. Environment-spezifische Config laden
// Qlik expandiert hier zu Config_DEV.qvs oder Config_PROD.qvs
$(Must_Include=lib://Scripts/Config_$(vEnvironment).qvs)
Was ist das Beispiel File Config_DEV.qvs in Bezug auf Variablen & Include-Files?
//============================================
// Config_DEV.qvs - DEVELOPMENT Configuration
//============================================
SET vDataPath = 'C:DevQlikData';
SET vDBServer = 'DEV-SQL-01';
// Wichtig: In DEV kann eine Row-Limit-Variable verwendet werden
SET vDebugMode = 1;
SET vRowLimit = 100000; // Limit für schnellere Entwicklung
Was ist das Beispiel File Config_PROD.qvs in Bezug auf Variablen und Include-Files?
//============================================
// Config_PROD.qvs - PRODUCTION Configuration
//============================================
SET vDataPath = 'prod-nasQlikData';
SET vDBServer = 'PROD-SQL-CLUSTER';
SET vDebugMode = 0;
SET vRowLimit = 0; // Keine Limits in Produktion
Was sind lib:// Connections und Portabilität in Qlik Scripts?
Verwenden Sie **immer** `lib://` Connections anstelle von absoluten Pfaden (`C:…` oder `server…`).
Die `lib://` Connection ist ein **Datenverbindungsname**, der zentral in der Qlik Management Console (QMC) definiert wird. Wenn Sie Ihren Code auf einen anderen Server oder in die Qlik Cloud verschieben, müssen Sie nur die Verbindung `lib://Scripts` anpassen – nicht aber den Code in 50 verschiedenen Apps.
// Falsch (Nicht portabel)
$(Must_Include=serverscripts 1_Config.qvs)
// Richtig (Portabel)
$(Must_Include=lib://ScriptLibrary/01_Config.qvs)
Effizienz-Boost: Nutzen Sie Variablen zusammen mit QVDs, um Ihre Ladezeiten drastisch zu reduzieren. Definieren Sie den QVD-Pfad zentral ($(vQVDPath)) und nutzen Sie ihn in allen Anwendungen.
Was sind die besten Praktiken für Variablen & Include-Files in Qlik Scripts?
Halten Sie sich an diese Regeln, um stabile und wartbare Module zu erstellen.
✓ Variablen-Nutzung:
- [ ] **SET** für statische Texte, Pfade und **alle** Chart-Expressions.
- [ ] **LET** für Datum, Funktionen und Zähler.
- [ ] Verwenden Sie das Präfix `v` (z.B. `vCurrentYear`) für Variablen.
✓ Include-Files:
- [ ] Modulare Struktur: Config → Functions → Subroutines.
- [ ] `$(Must_Include)` für kritische Konfigurations- oder Error-Handling-Files.
- [ ] **Immer** `lib://` Connections für Portabilität verwenden.
✓ Environments:
- [ ] Separate Configs (z.B. `Config_DEV.qvs`) für jede Umgebung.
- [ ] Verwenden Sie `$(vRowLimit)` in der Entwicklung, um große Datenmengen zu begrenzen.
Wie behebe ich Probleme mit Variablen & Include-Files in Qlik Scripts?
⚠️ Problem: Variable expandiert nicht
Lösung 1: Syntax überprüfen
// Falsch
TRACE Wert: $vYear
// Richtig
TRACE Wert: $(vYear)
Lösung 2: SET vs LET prüfen
Wenn die Variable ein numerisches Ergebnis erwartet (z.B. eine Datumszahl), aber den falschen Wert enthält, wurde sie fälschlicherweise mit `SET` statt `LET` definiert, oder sie wird zu spät expandiert.
⚠️ Problem: Include-File nicht gefunden
Lösung: Pfad und Connection prüfen
- Stellen Sie sicher, dass die `lib://` Connection (z.B. `ScriptLibrary`) in der QMC korrekt auf den Speicherort zeigt.
- Prüfen Sie mit
TRACE FileSize('lib://Scripts/Config.qvs')im Skript, ob die Datei überhaupt sichtbar ist.
⚠️ Problem: SET vs LET Verwirrung
Faustregel:
// Funktionen? → LET
LET vDate = Today();
// Statischer Text/Pfad/Expression? → SET
SET vPath = 'C:Data';
SET vExpr = Sum(Sales);
Was sind die nächsten Schritte in Variablen & Include-Files für Qlik Scripts?
Du kannst jetzt modulare Scripts erstellen! Als nächstes lernst Du, wie Du wiederverwendbare Code-Blöcke erstellst:
1. Subroutinen: Im nächsten Artikel lernst Du, wie Du `SUB` und `CALL` nutzt, um komplexe Ladeprozesse in wiederverwendbare, parametrisierbare Funktionen zu kapseln.
2. Monitoring: Die im Artikel Monitoring & Logging besprochenen Logging-Funktionen sollten ebenfalls in eine zentrale Include-Datei ausgelagert werden, um sie in jeder App nutzen zu können.
Welche verwandten Themen gibt es im Kurs zu Variablen & Include-Files?
- Subroutinen – Code-Wiederverwendung mit SUB/CALL
- Three-Stage Architecture – Das Architektur-Konzept hinter Modularität