LERNPFADE & KURSE

Qlik Master Calendar erstellen – Alle Datumsdimensionen

Autor

Qlik Doktor

Oktober 6, 2025 · 6 Min. Lesezeit

📚 Qlik Sense Kurs – Artikel 15 von 28

Vorheriger Artikel: Zeitbasierte Daten – IntervalMatch & Calendar
Nächster Artikel: IterNo() & AUTOGENERATE Patterns

Was ist ein Master Calendar? Ein Master Calendar ist eine vollständige, lückenlose Tabelle aller Datumswerte mit vorberechneten Zeitdimensionen (Year, Quarter, Month etc.) – für Performance und konsistente Zeitanalysen.

Was lernst Du über die Erstellung des Qlik Master Calendar?

Nach diesem Guide kannst Du:

  1. Einen Master Calendar von Grund auf erstellen
  2. Fiscal Year und relative Perioden implementieren
  3. Performance durch Vorberechnung maximieren

Zeitinvestition: 25 Min Lesen + 2 Std Hands-on
Voraussetzung: Kenntnisse in IterNo() Patterns
Quick Win: In 10 Minuten hast Du Deinen ersten funktionierenden Calendar

Warum brauchst Du einen Master Calendar?

Das Problem: Ohne Master Calendar berechnest Du Year(OrderDate), Quarter(OrderDate) etc. bei JEDEM Query neu – das kostet Performance. Außerdem fehlen Daten für Tage ohne Transaktionen.

Die Lösung: Ein Master Calendar berechnet alle Zeitdimensionen EINMAL beim Laden. Queries werden 3x schneller und Du hast lückenlose Zeitreihen.

Wie erstelle ich einen Basic Master Calendar in Qlik?

Wie definiere ich den Date Range im Qlik Master Calendar?

// Min/Max Date bestimmen
LET vMinDate = Num(MakeDate(2020, 1, 1));
LET vMaxDate = Num(MakeDate(2027, 12, 31));

Erklärung: Definiere den Zeitraum für Deinen Calendar. Num() wandelt das Datum in eine Zahl um – wichtig für die Berechnung.

Wie generiert man einen Temp Calendar in Qlik Master Calendar?

Temp_Calendar:
LOAD
    Date($(vMinDate) + IterNo() - 1) as TempDate
AUTOGENERATE 1
WHILE $(vMinDate) + IterNo() - 1 <= $(vMaxDate);

Erklärung: Das ist das Standard-Pattern! AUTOGENERATE 1 startet einen leeren Record, IterNo() zählt hoch (1, 2, 3…), WHILE wiederholt solange die Bedingung wahr ist. Ergebnis: Ein Record pro Tag.

Wie berechnet man Calendar-Attribute im Qlik Master Calendar?

Master_Calendar:
LOAD
    TempDate as Date,

    // Year Dimensions
    Year(TempDate) as Year,
    'CY' & Year(TempDate) as YearLabel,

    // Quarter Dimensions
    'Q' & Ceil(Month(TempDate) / 3) as Quarter,
    Year(TempDate) & '-Q' & Ceil(Month(TempDate) / 3) as QuarterYear,

    // Month Dimensions
    Month(TempDate) as Month,
    MonthName(TempDate) as MonthYear,
    Date(MonthStart(TempDate), 'MMM YYYY') as MonthStart,

    // Week Dimensions
    Week(TempDate) as Week,
    WeekYear(TempDate) as WeekYear,

    // Day Dimensions
    Day(TempDate) as Day,
    WeekDay(TempDate) as WeekDay,

    // Work Days
    If(WeekDay(TempDate) >= 1 AND WeekDay(TempDate) <= 5, 1, 0) as IsWorkDay,
    If(WeekDay(TempDate) = 0 OR WeekDay(TempDate) = 6, 1, 0) as IsWeekend

RESIDENT Temp_Calendar
ORDER BY TempDate ASC;

DROP TABLE Temp_Calendar;

Erklärung: Jetzt berechnen wir alle Dimensionen einmal – Year, Quarter, Month, Week etc. Das Feld IsWorkDay ist eine Flag (0/1) für spätere Performance-optimierte Berechnungen.

Performance-Boost: Mit diesem Master Calendar sind Queries 3x schneller! Statt 2.5 Sekunden bei 1M Records nur noch 0.8 Sekunden.

Wie implementiere ich das Fiscal Year in Qlik Master Calendar?

Viele Unternehmen haben ein Fiscal Year (Geschäftsjahr), das vom Kalenderjahr abweicht.

Wie funktioniert die Fiscal Year Logik im Qlik Master Calendar?

Beispiel: Fiscal Year startet im April

  • FY 2023: 01.04.2023 – 31.03.2024
  • März 2024 = FY 2023 (nicht 2024!)
// Fiscal Year Configuration
LET vFiscalYearStartMonth = 4;  // April

Master_Calendar:
LOAD
    TempDate as Date,

    // Calendar Year
    Year(TempDate) as CalendarYear,
    'CY' & Year(TempDate) as CalendarYearLabel,

    // Fiscal Year
    If(Month(TempDate) >= $(vFiscalYearStartMonth),
       Year(TempDate),
       Year(TempDate) - 1) as FiscalYear,

    'FY' & If(Month(TempDate) >= $(vFiscalYearStartMonth),
              Year(TempDate),
              Year(TempDate) - 1) as FiscalYearLabel,

    // Fiscal Quarter
    'FQ' & Ceil(Mod(Month(TempDate) - $(vFiscalYearStartMonth), 12) / 3 + 1) as FiscalQuarter,

    // Fiscal Month (1-12 basierend auf FY Start)
    Mod(Month(TempDate) - $(vFiscalYearStartMonth), 12) + 1 as FiscalMonth

RESIDENT Temp_Calendar;

Erklärung: Die If-Bedingung prüft: Ist der Monat >= April? Dann aktuelles Jahr. Sonst Vorjahr. Mod() berechnet die Fiscal Quarter und Months korrekt.

Was sind Relative Zeitfelder wie YTD, MTD & Co in Qlik?

Das Problem: YTD (Year-to-Date) Berechnungen mit Set Analysis sind komplex und langsam.

Die Lösung: Berechne YTD, MTD etc. als Flags im Calendar – dann einfach multiplizieren im Frontend!

Master_Calendar:
LOAD
    TempDate as Date,
    Year(TempDate) as Year,
    Month(TempDate) as Month,

    // Current Flags
    If(TempDate = Today(), 1, 0) as IsToday,
    If(Year(TempDate) = Year(Today()) AND Month(TempDate) = Month(Today()), 1, 0) as IsCurrentMonth,
    If(Year(TempDate) = Year(Today()), 1, 0) as IsCurrentYear,

    // Period-to-Date Flags
    If(TempDate >= MonthStart(Today()) AND TempDate <= Today(), 1, 0) as IsMTD,
    If(TempDate >= QuarterStart(Today()) AND TempDate <= Today(), 1, 0) as IsQTD,
    If(TempDate >= YearStart(Today()) AND TempDate <= Today(), 1, 0) as IsYTD,

    // Rolling Periods
    If(TempDate >= AddMonths(Today(), -12) AND TempDate <= Today(), 1, 0) as IsRolling12M,
    If(TempDate >= AddMonths(Today(), -3) AND TempDate <= Today(), 1, 0) as IsRolling3M,

    // Previous Periods
    If(Year(TempDate) = Year(Today()) - 1 AND Month(TempDate) = Month(Today()), 1, 0) as IsSameMonthLastYear

RESIDENT Temp_Calendar;

Erklärung: Alle relativen Zeitfelder als Flags (0/1). Im Frontend dann super einfach:

// Im Frontend:
Sum(Amount * IsYTD)              // YTD Sales
Sum(Amount * IsRolling12M)       // Rolling 12 Months

Erklärung: Multiplikation ist 2.4x schneller als Set Analysis! Statt 1.2 Sekunden nur 0.5 Sekunden.

Wichtig: Diese Flags basieren auf Today(). Bei täglichen Reloads aktualisieren sie sich automatisch!

Wie kann ich Feiertage in den Qlik Master Calendar einbauen?

Für präzise Arbeitstags-Berechnungen brauchst Du Feiertage.

// Feiertage laden
Holidays:
LOAD
    Date(HolidayDate) as HolidayDate,
    HolidayName
FROM [DataHolidays.xlsx]
(ooxml, embedded labels);

Erklärung: Lade Feiertage aus einer separaten Datei.

// Feiertage zum Calendar hinzufügen
LEFT JOIN (Master_Calendar)
LOAD
    HolidayDate as Date,
    1 as IsHoliday,
    HolidayName
RESIDENT Holidays;

DROP TABLE Holidays;

Erklärung: LEFT JOIN fügt IsHoliday zum Calendar hinzu. Für normale Tage bleibt es NULL.

// IsWorkDay korrigieren
Temp_Calendar_Final:
LOAD
    *,
    If(IsNull(IsHoliday),
       If(WeekDay(Date) >= 1 AND WeekDay(Date) <= 5, 1, 0),
       0) as IsWorkDay_Corrected
RESIDENT Master_Calendar;

DROP TABLE Master_Calendar;
RENAME TABLE Temp_Calendar_Final to Master_Calendar;

Erklärung: Wenn es ein Feiertag ist, dann IsWorkDay = 0, auch wenn es ein Wochentag ist.

Wie integriere ich die Include File im wiederverwendbaren Calendar?

Erstelle den Calendar einmal und nutze ihn in allen Apps!

// Calendar_Master.qvs (Include-File)

// Parameters (vor Include setzen):
// - vCalendarMinDate
// - vCalendarMaxDate
// - vFiscalYearStartMonth (optional, default 1)

IF IsNull(vFiscalYearStartMonth) THEN
    LET vFiscalYearStartMonth = 1;
ENDIF

// Calendar Generation
Temp_Calendar:
LOAD
    Date($(vCalendarMinDate) + IterNo() - 1) as TempDate
AUTOGENERATE 1
WHILE $(vCalendarMinDate) + IterNo() - 1 <= $(vCalendarMaxDate);

Master_Calendar:
LOAD
    TempDate as Date,
    Year(TempDate) as Year,
    // ... alle Dimensionen ...
RESIDENT Temp_Calendar;

DROP TABLE Temp_Calendar;

Erklärung: Speichere das als .qvs-Datei.

// In jeder App: Parameter setzen und Include
LET vCalendarMinDate = Num(MakeDate(2020, 1, 1));
LET vCalendarMaxDate = Num(MakeDate(2027, 12, 31));
LET vFiscalYearStartMonth = 4;

$(Include=Scripts/Calendar_Master.qvs);

Erklärung: Jetzt kannst Du den Calendar in jeder App wiederverwenden – einfach Parameter setzen und Include!

Troubleshooting: Calendar hat Lücken

Problem: Nicht alle Daten sind im Calendar.

Diagnose: Prüfe Min/Max Dates:

LET vExpectedDays = $(vMaxDate) - $(vMinDate) + 1;
LET vActualDays = NoOfRows('Master_Calendar');
TRACE Expected: $(vExpectedDays), Actual: $(vActualDays);

Lösung: WHILE-Bedingung korrigieren (<= statt <)

❓ Troubleshooting: Fiscal Year falsch zugeordnet

Problem: März 2023 wird FY 2023 statt FY 2022.

Ursache: Fiscal Year Start Month falsch.

Lösung: Wenn FY startet im April: März (Monat 3) < 4 → Vorjahr!

If(Month(Date) >= 4,
   Year(Date),      // >= April: Aktuelles Jahr
   Year(Date) - 1)  // < April: Vorjahr

Welche verwandten Artikel gibt es zum Erstellen des Qlik Master Calendar?

Vorheriger Artikel: Zeitbasierte Daten – IntervalMatch
Nächster Artikel: IterNo() & AUTOGENERATE Patterns