DATENMODELLIERUNG & SCRIPTING

Qlik Sense Set Analysis: Der vollständige Guide mit Praxisbeispielen

Autor

Qlik Doktor

Februar 27, 2026 · 10 Min. Lesezeit

Set Analysis ist eines der mächtigsten Features in Qlik Sense. Damit kannst du Berechnungen durchführen, die unabhängig von der aktuellen Nutzerauswahl laufen, eigene Datensätze definieren und komplexe Vergleiche wie Vorjahreswerte oder YTD-Kennzahlen in einer einzigen Formel abbilden. Dieser Guide zeigt dir die vollständige Syntax, die wichtigsten Operatoren und konkrete Praxisbeispiele.

VISUAL: Syntax-Anatomie — Die Formel Sum({$ } Umsatz) aufgebrochen mit Pfeilen/Labels auf jedes Teil zeigend: "Aggregation" zeigt auf Sum(), "Set-Ausdruck" umklammert {$ }, "Identifikator" zeigt auf $, "Modifikator" zeigt auf , "Feld" zeigt auf Umsatz. Minimalistisch, dunkler Hintergrund, farbcodierte Teile (z.B. blau=Identifikator, gruen=Modifikator, orange=Aggregation

Was ist Set Analysis in Qlik Sense?

Set Analysis ist eine Methode, in Aggregationsfunktionen einen eigenen Datensatz zu definieren, statt die aktuelle Nutzerauswahl zu verwenden. Du legst damit gezielt fest, welche Datensätze in eine Berechnung einfliessen sollen.

Ein klassisches Beispiel: Du willst den Umsatz des aktuellen Jahres neben dem Vorjahresumsatz anzeigen, egal welche Jahresfilter der Nutzer gesetzt hat. Mit normalen Aggregationen ist das nicht möglich. Set Analysis macht genau das möglich, und zwar direkt in der Chart-Expression.

Wer Qlik Sense Expressions schon kennt, weiss: Aggregationsfunktionen wie Sum(), Count() oder Avg() arbeiten immer auf dem aktuell gefilterten Datensatz. Set Analysis erweitert diese Funktionen um einen optionalen «Set-Ausdruck», der den Datensatz unabhängig von der Nutzerauswahl definiert.

Set Analysis ist keine optionale Zusatzfunktion, sondern eine Kernkompetenz für jeden, der produktiv mit Qlik Sense entwickelt.

Die Grundsyntax von Set Analysis

Set Analysis wird immer innerhalb einer Aggregationsfunktion geschrieben und besteht aus einem Set-Ausdruck in geschweiften Klammern vor dem zu aggregierenden Feld.

Die Grundstruktur:

Sum( {Set-Ausdruck} Feldname )
//         ↑
//  Identifikator + optionale Modifikatoren

Ein konkretes Beispiel, das nur Umsätze für das Jahr 2024 summiert:

Sum({$ <Jahr = {'2024'}>} Umsatz)

Die einzelnen Teile im Überblick:

  • Geschweifte Klammern {}: Begrenzen den gesamten Set-Ausdruck
  • Set-Identifikator ($, 1 oder Bookmark-ID): Definiert den Ausgangsdatensatz
  • Spitze Klammern <>: Enthalten die Set-Modifikatoren
  • Set-Modifikator (Feld = {'Wert'}): Filtert oder erweitert den Datensatz

Set Identifikatoren: $, 1 und Bookmarks

Der Set-Identifikator legt fest, welcher Datensatz als Ausgangspunkt dient. Es gibt drei Typen.

$ – Die aktuelle Auswahl

$ steht für den aktuellen Auswahlstatus des Nutzers. Das ist der Standardwert, wenn kein Identifikator angegeben wird.

// Diese zwei Ausdrücke sind identisch:
Sum({$} Umsatz)
Sum(Umsatz)

Interessant wird $ erst mit Modifikatoren, zum Beispiel um eine einzelne Dimension aus der aktuellen Auswahl herauszunehmen:

// Ignoriert die Jahresauswahl, behält alle anderen Filter
Sum({$ <Jahr=>} Umsatz)

1 – Alle Datensätze

1 (die Zahl Eins) steht für den vollständigen Datensatz ohne jede Auswahl.

// Gibt immer den Gesamtumsatz zurück, unabhängig von Nutzerfiltern
Sum({1} Umsatz)

Das ist nützlich für Anteilsberechnungen: Sum(Umsatz) / Sum({1} Umsatz) gibt immer den Anteil am Gesamtumsatz zurück, auch wenn der Nutzer gefiltert hat.

Bookmark-IDs

Du kannst einen Bookmark-Namen als Identifikator verwenden, um vordefinierte Szenarien in Berechnungen einzusetzen:

Sum({BM01} Umsatz)

Das ist praktisch für standardisierte Vergleichsszenarien, die alle Nutzer konsistent verwenden sollen.

Vergleich von set operatoren $ vs 1 

$ vs 1 — Zwei Kreise nebeneinander. Links: grosser Kreis "Alle Daten", darin ein kleinerer hervorgehobener Bereich "Nutzerauswahl" mit Label "$ = nur dieser Bereich". Rechts: grosser Kreis "Alle Daten" komplett hervorgehoben mit Label "1 = alles". Minimalistisch, zwei Farben reichen

Set Operatoren: So steuerst du Feldwerte im Modifikator

Die Set-Operatoren legen fest, wie die angegebenen Feldwerte auf den Ausgangsdatensatz angewendet werden.

OperatorBedeutungBeispiel
=Ersetze die Auswahl durch diesen Wert<Jahr = {'2024'}>
+=Füge diesen Wert zur Auswahl hinzu (Union)<Region += {'Nord'}>
-=Entferne diesen Wert aus der Auswahl<Kategorie -= {'Sonstiges'}>
*=Schneide mit der Auswahl (Intersection)<Land *= {'DE', 'AT'}>
/=Symmetrische Differenz<Status /= {'Aktiv'}>

Operatoren am Beispiel Region — Ausgangslage: Nutzer hat Region 'Nord' und 'Süd' ausgewählt (2 Kästchen hervorgehoben). Dann 3 Zeilen darunter: (1) "= {'Ost'}" → nur Ost hervorgehoben (ersetzt alles), (2) "+= {'Ost'}" → Nord + Süd + Ost hervorgehoben (hinzugefügt), (3) "-= {'Nord'}" → nur Süd hervorgehoben (entfernt). Minimalistisch, kleine Kästchen-Reihe mit 4 Regionen

Der = Operator ist bei weitem der häufigste. Die anderen Operatoren kommen dann zum Einsatz, wenn du die bestehende Nutzerauswahl erweitern oder einschränken willst, statt sie vollständig zu ersetzen.

Praktische Set Analysis Beispiele

Hier sind die Ausdrücke, die du im Entwickleralltag am häufigsten brauchst. Wenn du schon mit der Syntax vertraut bist und nur schnell eine Formel nachschlagen willst, schau dir das Qlik Set Analysis Cheat Sheet an.

Year-to-Date (YTD) Umsatz

YTD berechnet den kumulierten Umsatz vom Jahresbeginn bis heute. Am elegantesten geht das mit einem YTD-Flag aus dem Master Calendar:

// Im Ladeskript: YTD-Flag setzen
If(Datum <= Today() AND Year(Datum) = Year(Today()), 1, 0) AS YTD_Flag

// Im Chart: Flag nutzen
Sum({$ <YTD_Flag = {1}>} Umsatz)

Alternativ ohne Flag-Feld, aber etwas aufwendiger:

Sum({$ <Datum = {">=$(=YearStart(Today()))<=$(=Today())"}>} Umsatz)

Mehr zum Thema Flag-Based Modeling in Qlik Sense, also Flags im Ladeskript zu setzen statt zur Laufzeit zu berechnen, findest du in einem eigenen Artikel.

Vorjahresvergleich (Same Period Last Year)

Der Vorjahresvergleich gehört zu den häufigsten Use Cases in Reporting-Projekten. Mit Dollar-Sign-Expansion wird er dynamisch:

// Aktuelles Jahr (dynamisch)
Sum({$ <Jahr = {$(=Year(Today()))}>} Umsatz)

// Vorjahr (dynamisch)
Sum({$ <Jahr = {$(=Year(Today())-1)}>} Umsatz)

// Same Period Last Year (SPLY): Vorjahr, gleicher Monat
Sum({$ <Jahr = {$(=Year(Today())-1)}, Monat = {$(=Month(Today()))}>} Umsatz)

Beachte: $(=Year(Today())-1) ist Dollar-Sign-Expansion, die den Wert vor der Auswertung des Set-Ausdrucks berechnet. Dazu gleich mehr im eigenen Abschnitt.

Top N Kunden einschliessen

Mit der Aggr()-Funktion im Set-Modifikator kannst du nur die umsatzstärksten Kunden in eine Berechnung einbeziehen:

// Umsatz nur der Top-10-Kunden nach Gesamtumsatz
Sum({$ <KundenID = {"=Aggr(Rank(Sum({1} Umsatz), 4, 1), KundenID) <= 10"}>} Umsatz)

Bestimmte Werte ausschliessen

Mit dem -= Operator kannst du Werte aus der bestehenden Auswahl herausnehmen, ohne sie explizit benennen zu müssen:

// Umsatz ohne Retouren
Sum({$ <Transaktionstyp -= {'Retoure'}>} Betrag)

// Umsatz ohne Test- und Internebestellungen
Sum({$ <KundenTyp -= {'Test', 'Intern'}>} Umsatz)

Mehrere Sets kombinieren

Du kannst Sets mit + (Union) und * (Intersection) verbinden:

// Union: Umsatz aus Deutschland ODER Österreich (Nutzerauswahl ignoriert)
Sum({1 <Land = {'DE'}>} + {1 <Land = {'AT'}>} Umsatz)

// Intersection: Aktuelle Auswahl UND nur Jahr 2024
Sum({$} * {1 <Jahr = {'2024'}>} Umsatz)
Union vs Intersection — Zwei Venn-Diagramme nebeneinander. Links: zwei Kreise (Land='DE' und Land='AT'), BEIDE komplett eingefaerbt, Label "+" / "Union = alles aus beiden". Rechts: zwei Kreise ($ aktuelle Auswahl und Jahr='2024'), nur die SCHNITTMENGE eingefaerbt, Label "*" / "Intersection = nur Überlappung". Minimalistisch, zwei Farben + Überlappungsfarbe

Element-Set-Funktionen: P() und E()

Die Funktionen P() (Possible Values) und E() (Excluded Values) geben die möglichen bzw. ausgeschlossenen Feldwerte eines anderen Sets zurück.

  • P(Set, Feld): Alle Werte von Feld, die im angegebenen Set möglich sind
  • E(Set, Feld): Alle Werte von Feld, die im angegebenen Set ausgeschlossen sind

Beispiel: Umsatz aller Kunden, die mindestens ein Premium-Produkt gekauft haben, bezogen auf die aktuelle Auswahl:

Sum({$ <KundenID = P({1 <Produktkategorie = {'Premium'}>} KundenID)>} Umsatz)

Und der Gegenfall mit E(), also alle Kunden die kein Premium-Produkt gekauft haben:

Sum({$ <KundenID = E({1 <Produktkategorie = {'Premium'}>} KundenID)>} Umsatz)

{VISUAL: P() und E() — Zwei Tabellen-Spalten: links «Kunden» (A, B, C, D, E), rechts «Produktkategorie» (Premium/Standard). P() hervorgehoben: Kunden A, C, E die Premium gekauft haben → grün markiert. E() hervorgehoben: Kunden B, D die KEIN Premium haben → orange markiert. Zeigt visuell «wer ist drin, wer ist draussen»}

Offizielle Dokumentation zu diesen Funktionen findest du in der Qlik Sense Set Analysis Syntax-Referenz.

Dollar-Sign-Expansion in Set Analysis

Dollar-Sign-Expansion ($(=Ausdruck)) bettet dynamische Werte in den Set-Ausdruck ein. Die Expansion wird ausgewertet, bevor der Set-Ausdruck interpretiert wird.

// Aktuelles Quartal dynamisch
Sum({1 <Quartal = {$(=Num(Ceil(Month(Today())/3)))}, Jahr = {$(=Year(Today()))}>} Umsatz)

// Flexibler Vergleich: Vorjahr basierend auf Nutzerauswahl
Sum({1 <Jahr = {$(=Only(Jahr) - 1)}>} Umsatz)

Der zweite Ausdruck ist besonders nützlich: Wenn der Nutzer Jahr 2024 auswählt, berechnet $(=Only(Jahr) - 1) den Wert 2023 und der Set-Ausdruck wird zu <Jahr = {2023}> ausgewertet.

Dollar-Sign-Expansion Ablauf — 2-Schritt-Fluss von links nach rechts. Schritt 1 "Expansion": $(=Year(Today())-1) wird zu 2025 aufgelöst (Pfeil). Schritt 2 "Auswertung": Sum({$} Umsatz) wird normal berechnet (Pfeil zum Ergebnis). Zeigt klar: erst wird der Wert eingesetzt, dann wird der Set-Ausdruck ausgewertet

Wichtig beim Debuggen: Verwende ein Text-Objekt mit dem Ausdruck $(=Only(Jahr) - 1) um zu sehen, welchen Wert die Expansion aktuell berechnet, bevor du ihn in den Set-Ausdruck einbettest.

Set Analysis mit Aggr() kombinieren

Die Kombination von Set Analysis und Aggr() ist besonders mächtig für Rankings und Konditionsberechnungen. Aggr() berechnet eine virtuelle Tabelle, die du in Set Analysis weiterverwenden kannst.

// Durchschnittlicher Umsatz nur für Kunden über dem Gesamtdurchschnitt
Avg({$ <KundenID = {"=Sum({1} Umsatz) > Avg(Aggr(Sum({1} Umsatz), KundenID))"}>} Umsatz)

// Anteil Top-20%-Kunden am Gesamtumsatz
Sum({$ <KundenID = {"=Aggr(Rank(Sum({1} Umsatz), 4, 1), KundenID) <= $(=Ceil(Count(Distinct KundenID)*0.2))"}>} Umsatz)
/ Sum({1} Umsatz)

Diese Art von Kennzahlen setzt du am häufigsten in KPI-Objekten in Qlik Sense ein, wo du komplexe konditionelle Berechnungen auf einer Fläche darstellen willst.

Häufige Fehler und wie du sie vermeidest

Set Analysis hat einige Tücken. Das sind die Fehler, die am häufigsten auftreten, und wie du sie behebst.

Fehler 1: Falsche Anführungszeichen

Feldwerte in Set-Modifikatoren werden in einfachen Anführungszeichen innerhalb geschweifter Klammern angegeben. String-Vergleiche ohne Anführungszeichen funktionieren nicht:

// Korrekt:
Sum({$ <Status = {'Aktiv'}>} Betrag)

// Falsch (funktioniert nicht für String-Werte):
Sum({$ <Status = {Aktiv}>} Betrag)

// Numerische Werte ohne Anführungszeichen:
Sum({$ <Jahr = {2024}>} Betrag)

Fehler 2: Identifikator und Nutzerauswahl-Konflikt

Wenn du $ als Identifikator verwendest und der Nutzer bereits denselben Feldwert ausgewählt hat, den du mit einem Modifikator überschreiben willst, kann das zu leeren Ergebnissen führen:

// Problem: Nutzer hat Jahr 2023 ausgewählt. Dieser Ausdruck gibt nichts zurück,
// weil $ die 2023er-Auswahl enthält und 2024 dazu nicht möglich ist:
Sum({$ <Jahr = {2024}>} Umsatz)

// Lösung: Vollständigen Datensatz als Basis nehmen:
Sum({1 <Jahr = {2024}>} Umsatz)
$ Konflikt — Links "Problem": Balken mit Jahren 2022-2025, Nutzer hat 2023 grün ausgewählt. $ startet mit nur 2023-Daten → Modifikator sagt "Jahr=2024" → Konflikt → leeres Ergebnis (rotes X). Rechts "Lösung": Gleiche Balken, aber 1 nimmt ALLE Jahre als Basis → Modifikator "Jahr=2024" → findet 2024 problemlos → Ergebnis (grüner Haken)

Fehler 3: Vergessene Anführungszeichen bei numerischen Jahreswerten

In Qlik Sense werden Jahreszahlen häufig als numerische Werte gespeichert. Hier musst du ohne Anführungszeichen arbeiten oder die korrekte Darstellung prüfen:

// Wenn Jahr als Zahl gespeichert:
Sum({$ <Jahr = {2024}>} Umsatz)

// Wenn Jahr als String gespeichert:
Sum({$ <Jahr = {'2024'}>} Umsatz)

Syntaxfehler in Set Analysis zeigen sich oft als leere Visualisierungen ohne Fehlermeldung. Diese Art von Diagnoseproblemen behandle ich ausführlich im Artikel zu Datenmodell-Problemen und Synthetic Keys in Qlik Sense.

Performance-Überlegungen bei Set Analysis

Set Analysis ist grundsätzlich performant, wenn du ein paar Grundregeln beachtest. Bei grossen Datenmodellen mit Millionen Datensätzen machen diese Entscheidungen einen erheblichen Unterschied.

Regeln für gute Performance:

  • Flag-Felder bevorzugen: Berechne komplexe Bedingungen im Ladeskript und verwende das Flag-Feld dann in Set Analysis. Das ist fast immer schneller als dynamische Ausdrücke zur Laufzeit.
  • Verschachtelte P()-Funktionen vermeiden: Jede Verschachtelungsebene erhöht den Berechnungsaufwand erheblich.
  • Aggr() in Sets sparsam einsetzen: Aggr() im Set-Modifikator berechnet eine virtuelle Tabelle für jeden Wert. Das kann bei vielen Dimensionen sehr langsam werden.
  • Identifikator 1 statt $: Wenn du die Nutzerauswahl ohnehin ignorierst, verwende 1 als Basis, das spart eine Auswertung.

Ein gut strukturiertes Star Schema Datenmodell ist die Grundvoraussetzung für performante Set Analysis. Wer sein Datenmodell noch optimiert, findet alles Wesentliche im Qlik Sense Datenmodellierungs-Kurs. Alle weiteren Performance-Techniken für Charts und Ausdrücke findest du im Artikel zur Performance-Optimierung in Qlik Sense.

Flag vs Laufzeit — Zwei Wege zum gleichen Ergebnis. Links "Flag-Feld": Pfeil von "Ladeskript: YTD_Flag = 1" nach "Chart: Sum({$} Umsatz)" mit Label "schnell". Rechts "Laufzeit": Pfeil von "Chart: Sum({$=$(=YearStart…)…"}>} Umsatz)" mit Label "langsam". Grüner Haken links, oranger Warndreieck rechts. Minimalistisch

FAQ zu Set Analysis in Qlik Sense

Was ist der Unterschied zwischen Set Analysis und einer WHERE-Klausel im Ladeskript?

Eine WHERE-Klausel im Ladeskript filtert Daten dauerhaft beim Laden aus dem Datenmodell heraus. Set Analysis hingegen filtert dynamisch zur Berechnungszeit und lässt die Daten im Datenmodell unberührt. Mit Set Analysis kannst du in einer einzigen Visualisierung mehrere verschiedene Datensätze gleichzeitig berechnen, zum Beispiel aktuelles Jahr und Vorjahr nebeneinander. Das ist mit einer WHERE-Klausel nicht möglich.

Kann ich Set Analysis mit dem Master Calendar kombinieren?

Ja, Set Analysis und der Master Calendar ergänzen sich perfekt. Zeitbasierte Berechnungen wie YTD, SPLY oder rollierende 12-Monate sind mit einem Master Calendar deutlich einfacher und performanter umzusetzen als mit rein dynamischen Set-Ausdrücken. Du referenzierst einfach die Datumsfelder oder Flag-Felder aus dem Master Calendar in deinen Set-Modifikatoren.

Was passiert, wenn ich in Set Analysis keinen Identifikator angebe?

Ohne expliziten Identifikator verwendet Qlik Sense automatisch $, also die aktuelle Nutzerauswahl als Ausgangsdatensatz. In den meisten Fällen ist das das gewünschte Verhalten. Es kann aber zu unerwarteten Ergebnissen führen, wenn der Nutzer Felder auswählt, die du mit einem Modifikator überschreiben wolltest, da $ dann die ursprüngliche Auswahl enthält.

Wie debugge ich einen Set Analysis Ausdruck, der nichts zurückgibt?

Der beste Ansatz ist schrittweises Zerlegen. Beginne mit dem einfachsten Ausdruck (Sum({1} Betrag)) und füge Modifikatoren einzeln hinzu. Prüfe, ob die Feldwerte im Set-Ausdruck exakt so geschrieben sind wie im Datenmodell, inklusive Gross- und Kleinschreibung. Verwende ein Text-Objekt mit dem Dollar-Sign-Expansion-Ausdruck (=$(=Only(Jahr) - 1)), um den aktuell berechneten Wert zu sehen, bevor du ihn in den Set-Ausdruck einbettest.

Wann sollte ich Set Analysis statt If() in Aggregationsfunktionen verwenden?

Set Analysis ist fast immer die bessere Wahl gegenüber Sum(If(Bedingung, Wert)). Der Grund: Sum(If(...)) iteriert über jede einzelne Zeile und prüft die Bedingung für jeden Datensatz, während Set Analysis den Datensatz vorab einschränkt und die Aggregation dann auf einem kleineren Set ausführt. Bei grossen Tabellen ist Set Analysis deutlich performanter und der Code ist leichter lesbar.

Kann ich Set Analysis ausserhalb von Aggregationsfunktionen verwenden?

Nein. Set Analysis funktioniert ausschliesslich innerhalb von Aggregationsfunktionen wie Sum(), Count(), Avg(), Min(), Max() oder FirstSortedValue(). Ausserhalb von Aggregationsfunktionen ist Set Analysis nicht gültig und führt zu einem Syntaxfehler. Die vollständige Liste der unterstützten Aggregationsfunktionen findest du in der Qlik-Dokumentation zu Set Analysis.

Fazit: Set Analysis als Kernkompetenz meistern

Set Analysis ist der Schlüssel zu ausdrucksstarken und flexiblen Qlik Sense Applikationen. Sobald du die Grundsyntax, die drei Identifikatoren und die wichtigsten Operatoren verinnerlicht hast, öffnen sich Möglichkeiten, die mit normalen Aggregationen schlicht nicht umsetzbar sind.

Die wichtigsten Punkte zusammengefasst:

  • Grundsyntax: Sum({Identifikator <Modifikator>} Feld)
  • $ ist die aktuelle Auswahl, 1 sind alle Datensätze
  • Operatoren =, +=, -= kontrollieren, wie Werte auf den Datensatz angewendet werden
  • Dollar-Sign-Expansion macht Zeitvergleiche dynamisch und flexibel
  • Performance zuerst: Flag-Felder im Ladeskript sind besser als komplexe Laufzeit-Sets
  • Debugging: Schrittweise zerlegen und Dollar-Sign-Expansion separat prüfen

Wenn du noch am Aufbau deines Qlik-Know-hows bist, empfehle ich zunächst die Grundlagen zu festigen: Starte mit dem Qlik Sense Datenmodellierungs-Kurs und lerne, wie du Ausdrücke in Qlik Sense effektiv einsetzt. Set Analysis wird dann das natürliche nächste Kapitel sein.

Und für den Alltag: Speichere dir das Qlik Set Analysis Cheat Sheet als Schnellreferenz ab, damit du die wichtigsten Formeln immer griffbereit hast.