PQQ: Kalender für einen definierten Zeitbereich (Arbeitstage)

Per Power Query einen Kalender für einen Zeitbereich erstellen.

Was mit Excel prinzip­iell recht ein­fach möglich ist, näm­lich durch Aus­füllen einen Kalen­der zu erstellen (je Tag eine Zeile) ist in Pow­er Query eben­falls möglich, allerd­ings geht es nicht nur mit eini­gen Mausklicks son­dern es bedarf ein­er Formel mit ver­schiede­nen Funk­tio­nen der Sprache M. Dafür ist es anschließend aber auch leichter, den Anfangs-und in Endw­ert in der Aus­gangsta­belle anzu­passen und dann mit einem einzi­gen Mausklick das neue Ergeb­nis zu sehen.

Jeder Tag eines Zeitraums

Erstellen Sie eine kleine Tabelle mit den Über­schriften Start und Ende in den Zellen A1 und B1. Darunter tra­gen Sie in Zeile 2 das Datum des 1. bzw. des let­ztens Tages ein. In der Beispiel­d­atei habe ich den 14.2.2016 bzw. den 15.11.2016 als Eck­dat­en gewählt. Das Ziel ist, dass für jeden dieser Tage (ein­schließlich des 29. Feb­ru­ar 2016) eine einzelne Zeile ein­er neu zu erstel­len­den Tabelle gefüllt wird.

Wie immer begin­nen Sie damit, dass sie die Dat­en als Tabelle for­matieren, beispiel­sweise per StrgL oder StrgT. Ich gebe der Tabelle auch immer gle­ich einen „sprechen­den” Namen, weil dieser dann auch automa­tisch im Pow­er Query-Edi­tor ver­wen­det wird: Kalen­der:

Ein "sprechender" Tabellen-Name

Ein „sprechen­der” Tabellen-Name

Nach dem Import wird der Daten­typ der bei­den Felder automa­tisch angepasst, wobei meis­tens der Daten­typ Datum/Uhrzeit ver­wen­det wird. In der über­wiegen­den Anzahl der Fälle ist dieses kein Prob­lem, höch­stens eine Frage der Optik wegen der automa­tis­chen Ergänzung 00:00:00 (Uhr). Hier ist es jedoch aus­nahm­sweise zwin­gend erforder­lich, den Daten­typ auf Datum zu ändern, da eine Funk­tion der einzuset­zen­den Formel expliz­it genau diesen Daten­typ ver­langt. Ändern Sie also bei­de Spal­ten auf den Daten­typ Datum.

Die Vor­bere­itun­gen sind abgeschlossen. Fügen Sie nun eine Benutzerdefinierte Spalte hinzu. Als Neuer Spal­tenname kön­nen Sie beispiel­sweise (vorzugsweise) Tage oder Kalen­der ver­wen­den, als Benutzerdefinierte Spal­tenformel tra­gen Sie diese Formel ein:
List.Dates([Start], Number.From([Ende])-Number.From([Start])+1, #duration(1,0,0,0))
wobei sie die Feld­na­men (Spal­tenüber­schrift) Start und Ende ide­al­er­weise direkt aus dem recht­en Kas­ten des Dialogs per Dop­pelk­lick oder über die Schalt­fläche « Ein­fü­gen über­tra­gen. Pow­er Query erstellt eine neue Spalte mit ein­er einzi­gen Zeile, welche den Inhalt List hat.:

Die neu erstellte Spalte mit 1 Zeile

Die neu erstellte Spalte mit 1 Zeile

Wenn Sie an dieser Stelle eine Fehler­mel­dung bekom­men, dass ein Wort bzw. Name nicht erkan­nt wurde, dann liegt das in der Regel an ein­er fehler­haften Groß-Klein­schrei­bung oder einem Tippfehler ihrer­seits. Erweit­ern Sie diese Spalte durch einen Klick auf den Dop­pelpfeil Doppelpfeil in der Über­schrift Tage und in einem Drop­Down wählen Sie Auf neue Zeilen ausweit­en.

Fer­tig! Eine rasche Kon­trolle wird Ihnen zeigen, dass automa­tisch der 29. Feb­ru­ar erzeugt wurde und auch der Zeitraum Start/Ende exakt beachtet wor­den ist. Ein Recht­sklick in die Über­schrift dieser Spalte und sie wählen Andere Spal­ten ent­fer­nen, denn sie wollen ja auss­chließlich die Tage des definierten Zeitraums als Tabelle aufge­lis­tet haben.

▲ nach oben …

Nur Werktage

Diese Abfrage Datum kön­nen Sie gut als Basis ver­wen­den, um nur die Werk­tage (mit oder ohne Sam­stag) aufzuzeigen. Ich erstelle prinzip­iell eine Kopie dieser Abfrage (per Duplizieren), um das Orig­i­nal für weit­ere Exper­i­mente bzw. Auswer­tun­gen zu behal­ten. Fügen Sie hier nun eine weit­ere Benutzerdefinierte Spalte hinzu, die Über­schrift kann beispiel­sweise Werk­tage sein und als Formel geben Sie in exakt dieser Groß- Klein­schrei­bung ein:
Date.DayOfWeek([Tage], Day.Monday)

Als Ergeb­nis erhal­ten Sie zu jedem Datum einen numerischen Wert zwis­chen 0 und 6. Der Startwert 0 ist für uns „Nor­mal-User” etwas gewöh­nungs­bedürftig, aber in fast allen Fällen ist Pow­er Query 0‑basiert, was die Num­merierung bet­rifft. Und Sie soll­ten Sie auch nicht dazu ver­leit­en lassen, das in irgen­dein­er Form abzuän­dern. Wenn Sie in einem Kalen­der des Jahres 2016 nach­se­hen wer­den Sie erken­nen, dass der Mon­tag den Wert 0 und der Son­ntag den Wert 6 zugewiesen bekom­men hat.

Je nach Anforderung wer­den sie nun einen Fil­ter set­zen, dass alle Werte klein­er 6 (also ein­schließlich Sam­stag) oder klein­er 5 (Mon­tag bis Fre­itag) in der Tabelle erhal­ten bleiben.

Nur Werktage filtern (Feiertage nicht berücksichtigt)

Nur Werk­tage fil­tern (Feiertage nicht berück­sichtigt)

Auch diese Hil­f­ss­palte wer­den Sie  nun ver­mut­lich löschen, eventuell auch noch die verbleibende Über­schrift in Werk­tage oder Arbeit­stage ändern. Schließen & laden und Pow­er Query schreibt Ihnen (nacheinan­der) in ein neues Tabel­len­blatt jew­eils den Kalen­der für alle Tage und die (gefilterten) Arbeit­stage hinein. Diesen Stand der Dinge kön­nen Sie hier von unserem Serv­er herun­ter­laden.


Viele der Leser wer­den nun wahrschein­lich denken: „Und was ist mit den Feierta­gen?” Ich ver­sichere Ihnen, auch das ist mit Pow­er Query möglich, wenn sie in irgen­dein­er Form für den entsprechen­den Zeitraum eine Liste mit den passenden Feierta­gen haben. Zugegeben, es ist mit etwas kno­beln oder nach­denken ver­bun­den aber wenn sie etwas Zeit investieren, wer­den sie mit hoher Wahrschein­lichkeit zum Ziel gelan­gen. Das Inter­net ist „all­wis­send” und es gibt einige Quellen im englis­chen Sprach­bere­ich. – Als Alter­na­tive bietet sich an, dass sie mir eine E‑Mail mit dem Betr­e­ff „PQ Arbeit­stage ohne Feiertage” senden, dann erhal­ten Sie nach ein­er 5 €-Spende (auch mit diesem Ver­merk) die fer­tige Datei eben­falls als E‑Mail. Dort ist dann auch noch als klein­er Bon­bon eine Liste einge­fügt, wo (natür­lich auch per PQ) die Arbeit­stage des jew­eili­gen Monats berech­net wor­den sind.

▲ nach oben …

Dieser Beitrag wurde unter Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.