PQQ: Jahreskalender mit Power Query erstellen (1)

Xtract: Mit Pow­er Query über eine Formel in der PQ-Sprache M einen Kalen­der für 1 Jahr in 1 Spalte erstellen lassen. Der Ein­fach­heit wegen keine Automatik für Schalt­jahre.

  Wis­sens­stand: Lev­el 1 ⇒ Ein­steiger in PQ, keine/kaum Erfahrung   

Power Query Quickies: Einen Jahreskalender automatisch erstellen lassen

Auch in Pow­er Que­ry gibt es meh­re­re Wege, ei­nen Jahreskalen­der automa­tisch er­stel­len zu las­sen. In je­dem Fal­le wer­den Sie dazu Funk­tio­nen der Abfrage­sprache M ein­set­zen. Und den­noch brau­chen Sie kei­ne Pro­gram­mi­er-Erfahrung, wenn die hier dar­ge­leg­ten Schrit­te ex­akt nachvol­lziehen. Ein grundle­gen­der Hin­weis vor­weg: Acht­en Sie unbe­d­ingt dar­auf, die Groß- Klein­schrei­bung ge­nau so zu schrei­ben, wie hier im Bei­trag dar­ge­stellt.

(1) Die Funk­ti­on List.​Dates()

In der über­wiegen­den Zahl der Fäl­le kön­nen Sie die Funk­tion List.​Dates() ohne weit­ere Ein­schränkun­gen ein­set­zen. Die Syn­tax die­ser Funk­tion ist fol­gen­der­maßen:
List.​Dates(Start­da­tum, An­zahl Inter­valle, Län­ge des Inter­valls)

Bei­spiel: =List.Dates(#date(2018,1,1), 365, #duration(1,0,0,0))

Im Pow­er Que­ry-Edi­tor stellt sich das dann zu Be­ginn so dar:

Direkt nach der Eingabe der Funktion in die Eingabe-Leise

Di­rekt nach der Ein­ga­be der Funk­tion in die Ein­ga­be-Lei­se

Wie für alle von mir inter­pretierten Pow­er Que­ry-Funk­tio­nen gilt der Hin­weis, dass Sie nach Mög­lich­keit auch auf die Orig­i­nal-Doku­men­ta­tion von Mi­cro­soft (in englis­ch­er Spra­che) zu­grei­fen soll­ten. Hier wäre es die­ser Link:
msdn.​microsoft.​com/​en-​us/Que­ry-bi/m/list-dates bzw. in deutsch: msdn.​microsoft.​com/​de-​de/Que­ry-bi/m/list-dates

Die Argu­mente die­ser Funk­tion nä­her betra­chtet:

  • Start­da­tum ist bei ei­nem Jahreskalen­der na­tur­ge­mäß der 1. Jan­u­ar des entsprechen­den Jah­res. Wol­len Sie ei­nen beliebi­gen Zeit­raum (beispiel­sweise ein Fis­kal- bzw. Geschäft­s­jahr) dar­stel­len, dann ist die­ses der ers­te Tag des darzustel­len­den Zeit­raums. Das Start­da­tum muss im For­mat date (Daten­typ: Da­tum) vor­liegen.
  • An­zahl Inter­valle ist ein numerisch­er Wert. Wenn sie die Tage ei­nes Jah­res dar­stel­len wol­len, dann wird dies in der Re­gel die Zahl 365 sein. Das ent­spricht der oben dargestell­ten For­mel. Das The­ma „Schalt­jahr” wird weit­er un­ten disku­tiert.
  • Das Argu­ment Län­ge des Inter­valls er­war­tet ei­nen Wert in Form ein­er #dura­tion()-Funk­tion. Die Ar­gu­men­te/Pa­ra­me­ter hier sind: (Tag, Stun­de, Mi­nu­te, Se­kun­de) und die­se sind natür­lich vom Typ Zahl.

Er­stel­len der Ab­fra­ge „Jah­res­ka­len­der” auf die­ser Ba­sis

Ide­al­er­weise begin­nen Sie mit ei­nem lee­ren Arbeits­blatt. In Ex­cel 2016 ge­hen Sie über Dat­en | Neue Ab­fra­ge | Aus an­de­ren Quel­len | Lee­re Ab­fra­ge und tra­gen in die obe­re Ein­ga­be­zei­le für das Jahr 2018 die­se For­mel mit dem führen­den Gle­ich­heit­sze­ichen ein:
= List.Dates(#date(2018,1,1), 365, #duration(1,0,0,0))

Noch ein­mal zur Erin­nerung: Es soll im End­ef­fekt eine Ab­fra­ge mit kalen­darischen Dat­en er­stellt wer­den, Be­ginn ist der 1. Jan­u­ar 2018, die Lis­te um­fasst 365 Zei­len und das Inter­vall, der zeit­li­che Sprung zum jew­eils näch­sten Ele­ment soll 1 Tag, 0 Stun­den, 0 Mi­nu­ten, 0 Sekun­den sein. Und wenn Sie nach Ein­ga­be des Tex­tes, der For­mel die Einga­betaste drück­en oder irgend­wo in den frei­en Bere­ich unter­halb der Ein­ga­be­zei­le Klick­en, wird eine Lis­te im Datum-For­mat mit al­len 365 Ta­gen er­stellt:

Die per Funktion erstelle Liste mit den Jahresdaten

Die per Funk­tion er­stel­le Lis­te mit den kalen­darischen Jahres­dat­en

Bleibt ei­gent­lich nach ein­er Kon­trolle nur noch ein Klick auf das Sym­bol Zu Ta­bel­le, da­mit eine Ab­fra­ge aus die­ser Lis­te er­stellt wird. An­schlie­ßend wer­den Sie ge­wiss noch die Über­schrift an­pas­sen, aber das ist ja Rou­tine. Und ein Blick auf den Daten­typ die­ser Spal­te wird ver­mut­lich Be­lie­big zei­gen. In die­sem Fall bit­te auf Da­tum än­dern, da­mit an­schlie­ßend in der Ex­cel-Ta­bel­le auch kalen­darische Dat­en und kei­ne se­ri­el­len Zah­len an­ge­zeigt wer­den. Nach Schlie­ßen & la­den oder Schlie­ßen & la­den in… ha­ben Sie eine ein­spal­ti­ge Ta­bel­le mit dem Da­tum je­des Ta­ges des Jah­res. In Ex­cel kön­nen Sie dann natür­lich noch be­lie­bi­ge For­matierun­gen des Da­tums vor­neh­men. Und natür­lich kann die­se Ab­fra­ge auch weit­er in Pow­er Que­ry ge­nutzt wer­den, denn der Auf­wand für „nur” ei­nen Jahreskalen­der für Ex­cel wäre ge­wiss zu hoch.

▲ nach oben …

Schalt­jahr

Mit schön­er Re­gel­mä­ßig­keit (mit ex­trem weni­gen Aus­nah­men) sind alle Jah­re, de­ren Jah­res­zahl sich „glatt” durch 4 tei­len las­sen Schalt­jahre. Da gibt es am 29. Feb­ru­ar ei­nen zusät­zlichen Tag im Mo­nat und das Jahr hat dann ent­spre­chend 366 Tage. Und wie kön­nen Sie das berück­sichti­gen? Sie erin­nern sich ge­wiss, dass ich Sie habe kon­trol­lieren las­sen, ob der let­zte Ein­trag in der Ab­fra­ge auch der 31. Dezem­ber bzw. der let­zte Tag des Geschäft­s­jahres ist. Und hier set­zt mei­ne prag­ma­tis­che Kor­rek­tur-Möglichkeit an: Wenn in ei­nem Schalt­jahr ein Tag zu we­nig an­ge­zeigt wird, dann än­dern Sie ein­fach die For­mel:
= List.Dates(#date(2018,1,1), 366, #duration(1,0,0,0)) 
und das Jahr ist wie­der „kom­plett”.

Und für „Spe­zis” hier der Hin­weis, dass es in der Formel­sprache M auch noch eine Funk­tion gibt wel­che erken­nt, ob es sich bei dem Jahr ei­nes de­fi­nier­ten Da­tums um ein Schalt­jahr han­delt oder nicht. Das Such­wort dazu: Date.​IsLeapYear().

▲ nach oben …

zum The­ma „Jahreskalen­der in/mit Pow­er Que­ry” gibt es noch mehr Bei­trä­ge in un­se­rem Blog:
  • Teil 2 → Funk­tion List.​Range (für be­lie­bi­ge Zeit­räu­me) und nach Wahl Wochn­tage in getren­nte Spal­te schrei­ben.
  • Teil 3 → Nur Arbeit­stage (ohne Woch­enende, Fei­er­ta­ge, Betrieb­surlaub).

Hat Ih­nen der Bei­trag ge­fal­len?
Er­leich­tert die­ser Bei­trag Ihre Ar­beit?

Dann wür­de ich mich über ei­nen Bei­trag Ihrer­seits z.B. 1,00  freu­en …

Dieser Beitrag wurde unter Datum & Zeit, Power Query, PQ-Quickies abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.