Dynamischer Power BI Kalender – Feiertagsliste

Im ersten Teil haben wir einen dynamischen Kalender aufgrund einer Faktentabelle erstellt. Diesem Kalender fehlen noch die Feier- und Arbeitstage. In diesem Beitrag zeige ich, wie die Feiertagsliste einfach erstellt werden kann.

Feiertagsliste erstellen

Ständige Feiertage

In einer neuen Query definieren wir als Erstes eine Feiertagsliste mit den ständigen, das heisst unveränderlichen Feiertagen.
Neujahr = Number.From(DateTimeZone.From("01.01." & Text.From(Jahr))),
Bundesfeier = Number.From(DateTimeZone.From("01.08." & Text.From(Jahr))),
Weihnachtstag = Number.From(DateTimeZone.From("25.12." & Text.From(Jahr))),
Stephanstag = Number.From(DateTimeZone.From("26.12." & Text.From(Jahr))),
Neujahr = Number.From(DateTimeZone.From("01.01." & Text.From(Jahr))),
Bundesfeier = Number.From(DateTimeZone.From("01.08." & Text.From(Jahr))),
Weihnachtstag = Number.From(DateTimeZone.From("25.12." & Text.From(Jahr))),
Stephanstag = Number.From(DateTimeZone.From("26.12." & Text.From(Jahr))),

Ostern berechnen

Für die Berechnung von Ostern sowie der von diesem Datum abhängigen Feiertagen benötigen wir eine Formel. Ich gehe hier nicht im Detail darauf ein. Die Formel findet ihr hier.

Diese Formel wandeln wir in folgende Skript um:

Ostersonntag=
Number.Round
(
Number.From
(
Number.From
(
Date.From
(
DateTimeZone.From("01.04."&Text.From(Jahr))
), type date
), Int64.Type
)/7 +
Number.Mod
(
19*Number.Mod(Jahr,19)-7,30
)*0.14
,0
)*7-6,

Von diesem Datum ausgehend können wir nun die restlichen Feiertage berechnen:
Karfreitag = Ostersonntag-2,
Ostermontag = Ostersonntag+1,
Auffahrt = Ostersonntag+39,
Pfingstmontag = Ostersonntag+50,

Mit diesen Werten erstellen wir nun die ganze Feiertagsliste:
Feiertagsliste= Table.FromList
(
{
[A="Neujahr", B=Neujahr],
[A="Karfreitag", B=Karfreitag],
[A="Ostersonntag", B=Ostersonntag],
[A="Ostermontag", B=Ostermontag],
[A="Auffahrt", B=Auffahrt],
[A="Pfingstmontag", B=Pfingstmontag],
[A="Bundesfeier", B=Bundesfeier],
[A="Weihnachtstag", B=Weihnachtstag],
[A="Stephanstag", B=Stephanstag]
Record.FieldValues, {"Feiertag", "Datum"}

Das ganze Skript soll uns für die nächsten Schritte als Funktion dienen. Wir ergänzen es deshalb in der ersten Zeile um folgenden Befehl:
(Jahr) =>

Das ganze Skript

Das ganze Skript sieht wie folgt aus:
(Jahr) =>
let
Neujahr = Number.From(DateTimeZone.From("01.01." & Text.From(Jahr))),
Bundesfeier = Number.From(DateTimeZone.From("01.08." & Text.From(Jahr))),
Weihnachtstag = Number.From(DateTimeZone.From("25.12." & Text.From(Jahr))),
Stephanstag = Number.From(DateTimeZone.From("26.12." & Text.From(Jahr))),
Ostersonntag=
Number.Round
(
Number.From
(
Number.From
(
Date.From
(
DateTimeZone.From("01.04."&Text.From(Jahr))
), type date
), Int64.Type
)/7 +
Number.Mod
(
19*Number.Mod(Jahr,19)-7,30
)*0.14
,0
)*7-6,
Karfreitag = Ostersonntag-2,
Ostermontag = Ostersonntag+1,
Auffahrt = Ostersonntag+39,
Pfingstmontag = Ostersonntag+50,

Feiertagsliste= Table.FromList
(
{
[A=”Neujahr”, B=Neujahr],
[A=”Karfreitag”, B=Karfreitag],
[A=”Ostersonntag”, B=Ostersonntag],
[A=”Ostermontag”, B=Ostermontag],
[A=”Auffahrt”, B=Auffahrt],
[A=”Pfingstmontag”, B=Pfingstmontag],
[A=”Bundesfeier”, B=Bundesfeier],
[A=”Weihnachtstag”, B=Weihnachtstag],
[A=”Stephanstag”, B=Stephanstag]
},
Record.FieldValues, {“Feiertag”, “Datum”}
)
in
Feiertagsliste
Sobald wir die Funktion aufrufen wird die Angabe des Jahres verlangt. Danach erstellt die Funktion die Feiertagsliste des eingegebenen Jahres. Die Spalte „Datum“ wandeln wir in das Datumsformat – eh voilà!
Feiertagsliste

Im nächsten Beitrag ergänzen wir unser Query aus dem ersten Teil um die Arbeitstage unter Berücksichtigung der Feiertage.
Mehr Artikel über Power Query findet Ihr im Power Query Online Buch.

Happy Querying!