Dynamischer Power BI Kalender – Arbeitstage

Im ersten Teil haben wir einen dynamischen Kalender aufgrund einer Faktentabelle erstellt. Im zweiten Teil haben wir zur Ermittlung der Feiertage eine kleine Funktion geschrieben. Nun fügen wir die Feiertagsliste in den Kalender ein und erstellen eine Spalte für die Arbeitstage.

Feiertagsliste einfügen

Bis anin haben wir einen Kalender erstellt, der wie folgt aussieht:

Sämtliche Schritte aus dem ersten Teil werden wir für die Weiterführung der Lösung wiederum gebrauchen. Am besten kopiert Ihr also den Code in eine neue Power BI Desktop Datei und behaltet den Abfrageeditor gleich offen.

Nun ergänzen wir den Kalender um die Feiertage aus dem letzten Teil. Als erstes extrahieren wir eine Liste, die nur das Jahr umfasst. Dazu drücken wir im Editor direkt auf das Funktionszeichen. und geben ein:

#“Sortierte Zeilen“ war der letzte angewendete Schritt aus Teil 1. [Jahr] ist die Spalte, die wir ansprechen wollen. Aus der so erstellten Liste wollen wir nur die Unikate behalten, also pro Jahr ein Eintrag. Diese erreichen wir über => Listentools => Transformieren => „Duplikate ersetzen“.

Die Liste wandeln wir in eine Tabelle um und rufen über „Spalte hinzufügen“ die Funktion „Benutzerdefinierte Spalte“ auf. Im Dialog geben wir den Funktionsaufruf „fn_Feiertagsliste([Column1])“ ein. Der Wert in der Klammer ist das Jahr aus der erstellten Jahrestabelle.

Als nächstes erweitern wir die erstellte Spalte um die Einträge „Feiertag“ und „Datum“. Dann klicken wir auf die Spalte „Jahr“ und entfernen diese.

Da das Format der Spalte „Datum“ noch nicht stimmt, ändern wir dieses auf „Datum“ indem wir auf das Zeichen links neben dem Spaltennamen klicken und in der Dropdownliste „Datum“ wählen.

Abfragen zusammenführen

Und nun haben wir eine sauber formatierte Tabelle mit den Feiertagen sämtlicher Jahre. Aber wo ist der bis anhin erstellte Kalender? Dieser versteckt sich im Schritt „Sortierte Zeilen“ aus Teil 1. Diesen Schritt müssen wir mit der hier erstellten Tabelle zusammenführen.

Wir klicken auf => Start => „Abfrage zusammenführen“. Wir definieren, dass wir unsere Abfrage mit sich selber zusammenführen wollen. Die Verlinkung geschieht über die Spalte „Datum“.

Was haben wir hier gemacht?
Aus dem Code im Query Editor ist ersichtlich, dass wir den letzten Schritt mit sich selber zusammengeführt haben.

= Table.NestedJoin(
Datumsformat_aendern,{„Datum“},
Datumsformat_aendern,{„Datum“},
„NewColumn“,JoinKind.LeftOuter)

Leider gibt es über die Benutzeroberfläche keine Möglichkeit, den gewünschten Abfrageschritt auszuwählen. Deshalb müssen wir den Code manuell anpassen in:

= Table.NestedJoin(
#“Sortierte Zeilen“,{„Datum“},
Datumsformat_aendern,{„Datum“},
„NewColumn“,JoinKind.LeftOuter)

Wiederum erweitern wir die neue Spalte, wählen aber nur die Feiertage aus (Das Datum ist ja schon enthalten).

Arbeitstage einfügen

Über => „Spalte hinzufügen“ => „Benutzerdefinierte Spalte“ rufen wir den Dialog auf. In diesem erstellen wir nun die Logik der Arbeitstage:

  • Wenn in der Spalte „Feiertag“ ein Wert steht, so übernehmen wir diesen.
  • Ist der Wochentag 0 (=Sonntag) oder 5  (=Samstag), so entspricht dies dem Wochenende.
    Erläuterung:
    Im amerikanischen Kalender beginnt die Woche am Sonntag. Und da Power Query nullbasiert ist, ist der Wert des Sonntags eine 0, der Samstag eine 6.
  • Falls der Wochentag weder im Wochenende liegt noch ein Feiertag ist, so ist es ein Arbeitstag.

Der Code lautet:
if [Feiertag] <> null  then [Feiertag] else
if [Wochentag] = 0 then „Wochenende“ else
if [Wochentag] <5 then „Arbeitstag“ else
„Wochenende“

Zu guter Letzt entfernen wir die Spalten „Feiertag“ und „Wochentag“, da wir diese nicht mehr benötigen. Und so sieht das Resultat aus:

Und nachstehend noch der ganze Code:

Mehr Artikel über Power Query findet Ihr im Power Query Online Buch.

Happy Querying!