Oft muss ein gültig von und gültig bis Datum gejoint werden mit einem Datumsfeld.Da QlikView kein between kennt, ist das nicht ganz so einfach wie in SQL. Es gibt eine Alternative, der Intervalmatch. Diese Qlikview Funktion löst das Problem mit dem between, in dem die Row pro Datum welches zwischen dem von und bis Datum liegt verdopelt wird. Damit der Intervalmatch funktioniert, muss zuerst noch ein Kalender aufgebaut werden für den Zeitraum des einzel Datums ( von Min, bis Max Datum).
Der Code
Es werden beide Codeblöcke Kalender und Daten benötigt, Diese Blöcke sind nur teilweiselauffähig!
Bei den Daten muss die eigene Tabelle eingefügt werden, welche ein von und bis Datum hat.
Der Kalender wird für das minimale und maximale Datum erstellt, diese beiden Werte werden am Anfang ermittelt.
Kalender
// ----------------------------------------
// Ermittlen des ersten und letzen Datums
// ----------------------------------------
Temp:
Load
min(von_d) as minDate,
max(bis_d) as maxDate
Resident BertaMitarbeiter;
Let vL.minDate = Num(Peek('minDate', 0, 'Temp'));
Let vL.maxDate = Num(Peek('maxDate', 0, 'Temp'));
DROP Table Temp;
// ----------------------------------------
// TempCalendar und normalen Kalender erstellen
// ----------------------------------------
TempCalendar:
LOAD
$(vL.minDate) + Iterno()-1 As Num, Date($(vL.minDate) + IterNo() - 1) as Key_Date // Hier kann gesteuert werden bis wann der Kalender geht, in dem Fall bis Max-Datum aus Daten
AutoGenerate 1 While $(vL.minDate) + IterNo() -1 <= $(vL.maxDate);
// Masterkalender erstellen
CALL CalendarGen('Key_Date');
Script läuft nur mit dem QDF Masterkalender. Falls es ohne QDF zum Einsatz kommt, muss der Masterkalender selbst erstellt werden. Oder das Script vom QDF kopiert werden.
Daten
// ----------------------------------------
// Mitarbeiter-Tabelle pro Datum erstellen
// dazu wird der Kalender und
// der Interval-Macht verwendet.
// ----------------------------------------
inner Join (Mitarbeiter) IntervalMatch(Key_Date)
Load Distinct
von_d , bis_d
Resident Mitarbeiter;