Drucken
Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Feiertage berechnen mit QlikSense

Immer wieder muss man die Feiertage berechnen, einige sind fix im Kalender. Andere sind an der Ostern ausgerichtet. Da die Ostern zwischen dem 22. März und dem 25. April sein muss, ist alles gar nicht so schwer zu berechnen.

Wenn der Ostersonntag mal bekannt ist, ist es möglich die wichtigsten Feiertage, gesamte Schweiz frei, zu berechnen.

Das Script für die Feiertagsliste

Durch das Script wird eine Tabelle erstellt die alle Feiertage vom 2018 - 2078 ermittelt.

Das Effektive Min. Datum und Max Datum kann aber auch noch im Skript gesetzt werden.

//==========================================================================// Feiertagsliste erstellen
// - Min und Max Jahr setzten
// - Ostersonntagstabelle erstellen
//==========================================================================

//Min und Max Jahr, wird später verwendet
let vL.MinJahr = 2018;
let vL.MaxJahr = 2050;

// Tabelle mit dem Oster Datum bis 2050!!
OsterDatum:
Load * inline [
Datum
01.04.2018
21.04.2019
12.04.2020
04.04.2021
17.04.2022
09.04.2023
31.03.2024
20.04.2025
05.04.2026
28.03.2027
16.04.2028
01.04.2029
21.04.2030
13.04.2031
28.03.2032
17.04.2033
09.04.2034
25.03.2035
13.04.2036
05.04.2037
25.04.2038
10.04.2039
01.04.2040
21.04.2041
06.04.2042
29.03.2043
17.04.2044
09.04.2045
25.03.2046
14.04.2047
05.04.2048
18.04.2049
10.04.2050
];

 

//==========================================================================
// Basistabelle für die Feiertage
//==========================================================================
FeiertagsListe:
Load * Inline [
Datum, Feiertag
01.01.2009, 1
];


//==========================================================================
// Flexible Feiertage berechnen!
//==========================================================================
let vL.RowCount = NoOfRows('OsterDatum');
trace vL.RowCount;

for i = 1 to $(vL.RowCount)

let vL.Ostern = peek('Datum', i, 'OsterDatum');
let vL.Karfreitag = Date(vL.Ostern -2);
let vL.OsterMontag = Date(vL.Ostern +1);
let vL.Auffahrt = Date(vL.Ostern +39);
let vL.Pfingstmontag = Date(vL.Ostern +50);

Concatenate(FeiertagsListe)
Load * Inline [
Datum, Feiertag
$(vL.Ostern), 1
$(vL.Karfreitag) , 1
$(vL.OsterMontag) , 1
$(vL.Auffahrt) , 1
$(vL.Pfingstmontag), 1
];

next i

// Variablen löschen / leeren
let vL.Ostern = null();
let vL.Karfreitag = null();
let vL.OsterMontag = null();
let vL.Auffahrt = null();
let vL.Pfingstmontag =null();

drop Table OsterDatum;

//==========================================================================
// Statische Datum hinzufügen für die aktuellen Datums
//==========================================================================or i = $(vL.MinJahr) to $(vL.MaxJahr)

let vL.Neujahr = MakeDate(i, 1, 1);
let vL.Berchtoldstag = MakeDate(i, 1, 2);
let vL.TagDerArbeit = MakeDate(i, 5, 1);
let vL.Bundesfeiertag = MakeDate(i, 8, 1);
let vL.Weihnachten = MakeDate(i, 12, 25);
let vL.Stephanstag = MakeDate(i, 12, 26);
let vL.Silvester = MakeDate(i, 12,31);

Concatenate(FeiertagsListe)
Load * Inline [
Datum, Feiertag
$(vL.Neujahr), 1
$(vL.Berchtoldstag) , 1
$(vL.TagDerArbeit) , 1
$(vL.Bundesfeiertag) , 1
$(vL.Weihnachten), 1
$(vL.Stephanstag), 1
$(vL.Silvester), 1
];

next i

// Variablen löschen / leeren
set i = null();
set vL.Neujahr = null();
set vL.Berchtoldstag = null();
set vL.TagDerArbeit = null();
set vL.Bundesfeiertag = null();
set vL.Weihnachten = null();
set vL.Stephanstag = null();
set vL.Silvester = null();

 

 

 

Berechnen von Ostern in QlikSense

Als Spass habe ich noch Ostern mit der Gaussche Osterformel berechnet in QlikSense. Die Geschichte und Informationen dazu aus dem Wikipedia. Aufbau der Formel ist hier beschrieben Gausssche Osterformel

set Jahr = 2019;
set M = 24; // für 2000 - 2099
set N = 5; // für 2000 - 2099


let vL.Schaltjahr = mod( Jahr, 4);
let vL.SiebnerKadenz = mod( Jahr, 7);
let vL.GoldeneZahl = mod( Jahr, 19);

let temp = floor( (19 * vL.GoldeneZahl) + M);
let d = mod( temp , 30);

let temp = floor((2 * vL.Schaltjahr) + (4 * vL.SiebnerKadenz) + (6 * d) + N);
let e = mod( temp , 7);

// Formel für Berechnung des Ostertags:
let Ostertag = floor ( (vL.GoldeneZahl + (11 * d ) + (22 * e) ) / 451 ) ;

if Ostertag > 31 then
let temp = floor(22 + d + e - (7 * Ostertag) );
let Ostersonntag = MakeDate(Jahr, 3, temp);
else
// Wenn dieses Ergebnis größer als 31, so liegt Ostern im April. Dann muss folgende Formel benutzt werden:


let temp = d + e - (7 * Ostertag) -9;
let Ostersonntag = MakeDate(Jahr, 4, temp);

end if

trace Ostersonntag des Jahres $(Jahr): $(Ostersonntag);

Viel Spass beim testen und nutzten. Schreib mir doch eure Erfahrungen.

Nun kann man ja die Formel und den Sckript oben dran kombinieren und dann wird alles dynamisch.

 

Zugriffe: 3571