Getagged: Kalender

Kalendertabelle in Power Query erzeugen

Mit dem folgenden Code könnt Ihr eine Kalendertabelle aus eueren Daten in Excel oder Power BI erzeugen. Ich habe hier in diesem Fall eine Datei mit einer Tabelle namens factSales. Diese hat eine Spalte namens Datum.

Der Clou an dieser Formel ist, dass nicht nur der Kalender dynamisch erzeugt wird, sondern auch Kalenderwoche, Quartal und Monat zusammen für die Auswertung erzeugt werden.

Ich verlasse mich nicht auf die Kalendertabelle, die man automatisch erzeugen kann, da hier ich einfach mehr Kontrolle über die Daten habe.

BlogKalender

In einem späteren Video werde ich den Code erläutern und dann noch per API-Abfrage um die Feiertage eines Bundeslandes erzeugen.

Diesen Code nun einfach Kopieren und in den Power Query-Editor einer leeren Abfrage einfügen.

Code startet hier:

let

Quelle = Excel.CurrentWorkbook(){[Name="factSales"]}[Content],

DatumZuDate = Table.TransformColumnTypes(Quelle,{"Datum", type date}),

// greift auf Tabelle factSales zu. Dort ist nur die Spalte Datum interessant und wird als Datum formatiert

BerechneterJahresbeginn = Table.TransformColumns(DatumZuDate,{{"Datum", Date.StartOfYear, type date}}),

JahresbeginnZuZahl = Table.TransformColumnTypes(BerechneterJahresbeginn,{{"Datum", Int64.Type}}),

DatumStart = List.Min(JahresbeginnZuZahl[Datum]),

/* Jedes Datum wird auf Jahresanfang gesetzt. Somit erhält man das kleineste Datum des frühesten Jahres
Es resultiert dann ein Wert, der als Listenwert abgerufen werden kann*/

BerechnetesJahresende = Table.TransformColumns(DatumZuDate,{{"Datum", Date.EndOfYear, type date}}),

JahresendeZuZahl = Table.TransformColumnTypes(BerechnetesJahresende,{{"Datum", Int64.Type}}),

DatumEnde = List.Max(JahresendeZuZahl[Datum]),

/* Jedes Datum wird auf Jahresende gesetzt. Somit erhält man das größte Datum des letzten Jahres
Es resultiert dann ebenfallsein Wert, der als Listenwert abgerufen werden kann*/

Liste = {DatumStart .. DatumEnde},

ListeInTabelleKonvertiert = Table.FromList(Liste, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

// Aus DatumStart und Datumende wird eine Zahlenliste erzeugt, die dann in eine Tabelle gewandelt wird

ZahlenZuDatum = Table.TransformColumnTypes(ListeInTabelleKonvertiert,{{"Column1", type date}}),

DatumSpalte = Table.RenameColumns(ZahlenZuDatum,{{"Column1", "Datum"}}),
// Die Zahlen werden in ein Datum verwandelt, somit erhält man komplette Tage aller notwendigen Jahre

JahrEingefügt = Table.AddColumn(DatumSpalte, "Jahr", each Date.Year([Datum]), Int64.Type),

MonatEingefügt = Table.AddColumn(JahrEingefügt, "Monat", each Date.Month([Datum]), Int64.Type),

QuartalEingefügt = Table.AddColumn(MonatEingefügt, "Quartal", each Date.QuarterOfYear([Datum]), Int64.Type),

// Jahr, Monat und Quartal werden als Zahlen eingefügt

JahrQuartal = Table.AddColumn(QuartalEingefügt, "Jahr Quartal", each Text.Combine({Text.From([Jahr], "de-DE"),
Text.From([Quartal], "de-DE")}, "-"), type text),

// Jahr und Quartal werden für spätere Auswertungen vereint

MonatZweistellig = Table.AddColumn(JahrQuartal, "Jahr Monat",
each if [Monat] < 10 then Text.Combine( {Text.From([Jahr], "de-DE"), "-0", Text.From([Monat], "de-DE")} )
else Text.Combine( {Text.From([Jahr], "de-DE"), "-", Text.From([Monat], "de-DE")} ) ),

/*Jahr, Bindestrich und zweistellige Monatsnummer werden als neue Spalte ergänzt.
Die WENN-Funktion prüft, ob das Jahr einstellig ist */

Kalenderwoche = Table.AddColumn(MonatZweistellig, "KW", each if
Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)=0
then
Number.RoundDown((Date.DayOfYear(#date(Date.Year([Datum])-1,12,31))-(Date.DayOfWeek(#date(Date.Year([Datum])-1,12,31), Day.Monday))+9)/7)
else if
(Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)=53 and (Date.DayOfWeek(#date(Date.Year([Datum]),12,31), Day.Monday)<3))
then 1
else Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)),

// Die KW nach ISO 8601 wird ermittelt

JahrKWCalc = Table.AddColumn(Kalenderwoche , "JahrKW", each
if [Monat]=1 and [KW]>51
then [Jahr]-1
else if [Monat]=12 and [KW] = 1 then
[Jahr]+1
else [Jahr]),

// Das Jahr der entsprechenden KW wird ermittelt. Dies weicht eventuell vom Kalenderjahr ab.

ZahlenZuText = Table.TransformColumnTypes(JahrKWCalc ,{{"JahrKW", type text}, {"KW", type text}}),

JahrKWZusammen = Table.AddColumn(ZahlenZuText , "Jahr KW", each [JahrKW]&"-"& Text.End("0"&[KW], 2), type text),

// Jahr und KW werden vereint. Hier mal nicht die TextCombine-Formel von oben

SpaltenRaus = Table.RemoveColumns(JahrKWZusammen ,{"KW", "JahrKW"}),

// Überflüssige Spalten raus und noch

Wochentag = Table.AddColumn(SpaltenRaus, "Tag", each Date.DayOfWeekName([Datum]), type text),

WochentagZahl = Table.AddColumn(Wochentag, "Tag der Woche", each Date.DayOfWeek([Datum], 1) + 1, Int64.Type),

Monatsname = Table.AddColumn(WochentagZahl, "Monatsname", each Date.MonthName([Datum]), type text)

// Noch ein paar Informationen ergänzt

in

Monatsname

Code endet hier!

Hier ist die Datei zum Download mit ein paar Demodaten:

E1031 Verkäufe Kalendertabelle

Freue mich auf Feedback und Danke für die Unterstützung des Kanals!
Sonnige Grüße

Andreas

Kalendertabelle – volle 10 Jahre

Warum war ein Monat so umsatzschwach? Wie viele Verkaufstage hat ein Monat? Oder wie sieht mein aktueller Umsatz im Vergleich zum passenden Vorjahreszeitraum aus?

Zahlen sagen nur wenig aus, wenn man sie ohne Kontext betrachtet. Zeitraum, Zeitpunkt, parallel laufende Ereignisse etc.
Zudem sieht der Kalender auch nicht für jeden gleich aus.

Wir betrachten meist das Kalenderjahr – und das schon aus unterschiedlichem Blickwinkel. Für die einen beginnt die Woche am Montag und hat fünf Arbeitstage – für die andere jedoch 6 Verkaufs- und Arbeitstage. Für die einen beginnt die erste Kalenderwoche automatisch am 1. Januar einen Jahres (z. B. in den USA) – für uns in der Woche, in der mehr neue Tage als Tage des alten Jahres sind (also mindestens vier Januartage und somit auch der Donnerstag). Für das eine Unternehmen ist das Wirtschaftsjahr identisch mit dem Kalenderjahr – wenn man sich aber die Geschäftsberichte großer Unternehmen anschaut, beginnt zum Beispiel bei thyssenkrupp das Geschäftsjahr am 1. Oktober eines Jahres und endet am 30. September des Folgejahres. Entsprechend werden auch die Monate anders gezählt. Theater widerum haben neben Kalender- und Geschäftsjahr noch ein zusätzliches Spieljahr … ach ja, Ferien pro Bundesland und abweichende Feiertage gibt es ja auch noch.

Kalendertabellen selbst können Großteils automatisiert errechnet werden. Andere Informationen wie z. B. der Reformationstag aus dem Jahr 2018 und z. B. die Ferien eines Bundeslandes wie Nordrhein-Westfalen müssen manuell ergänzt werden.

In einer neuen Seminarreihe gehe ich auf die Kalendererstellung und Datumsberechnung in Excel selbst, in Power Query mit der eigenen Programmiersprache M, sowie der Erstellung in PowerPivot mit DAX-Funktionen (Data Analysis Expressions) ein. Als i-Tüpfelchen könnte noch die Kalenderberechnung in VBA folgen. Oder schreibt man das mittlerweile iTüpfelchen?

Einige sind ja schon auf mein PDF-Skript gestoßen. Das wird nach und nach fortgeführt: Excel – Datums- und Zeitfunktionen

Auch hatte ich an anderer Stelle schon mal eine Kalendertabelle zur Verfügung gestellt und die Feiertage und Schulferien von NRW ergänzt. Diese Informationen und weitere Ergänzungen gibt es nun zum Download in folgender Excel-Datei (aktualisiert!): Kalendertabelle

Die Datei liegt im XLSX-Format vor und beinhaltet auch Informationen zur Ermittlung von Geschäfts- bzw. Fiskaljahren.

Für alle, die nichts herunterladen wollen oder dürfen, die Spalten enthalten:

  1.  Spalte:   Datum –> Liste manuell gelistet
  2.  Spalte:   Jahr =JAHR([@Datum])
  3.  Spalte:   Monat_kurz =MONAT([@Datum])
  4.  Spalte:   Monat =TEXT([@Datum];”MMMM”)
  5.  Spalte:   Tag Monat =TAG([@Datum])
  6.  Spalte:   Tag Woche =WOCHENTAG([@Datum];2)
  7.  Spalte:   Wochentag =TEXT([@Datum];”TTTT”)
  8.  Spalte:   Tage im Monat =TAG(MONATSENDE(DATUM([@Jahr];[@[Monat_kurz]];1);0))
  9.  Spalte:   KW =KALENDERWOCHE([@Datum];21)
  10.  Spalte:   Quartal =”Q”&AUFRUNDEN([@[Monat_kurz]]/3;0)
  11.  Spalte:   Jahr Quartal =[@Jahr]&” “&[@Quartal]
  12.  Spalte:   Jahr Monat =TEXT([@Datum];”JJJJ-MM”)
  13.  Spalte:   Halbjahr =WENN([@[Monat_kurz]]<=6;”HJ 1″;”HJ 2″)
  14.  Spalte:   Jahr KW =JAHR([@Datum])-WENN(UND(MONAT([@Datum])=1;
    KALENDERWOCHE([@Datum];21)>51);1;0)+WENN(UND(MONAT([@Datum])=12;
    KALENDERWOCHE([@Datum];21)=1);1;0)&”-“&TEXT(KALENDERWOCHE([@Datum];21);”00”)
  15.  Spalte:   Feiern NRW –> manuell auf WAHR und FALSCH gesetzt
  16.  Spalte:   Feiertage NRW –> manuell auf WAHR und FALSCH gesetzt
  17.  Spalte:   Werktag =WENN([@[Tag Woche]]<=5;”Werktag”;”Wochenende”)
  18.  Spalte:   Verkaufstage Monat NRW =ZÄHLENWENNS([Tag Woche];”<=”&6;[Jahr];JAHR([Datum]);
    [Monat_kurz];MONAT([Datum]);[Feiertag NRW];FALSCH)
  19.  Spalte:   Werktage Monat NRW =ZÄHLENWENNS([Tag Woche];”<=”&5;[Jahr];
    JAHR([Datum]);[Monat_kurz];MONAT([Datum]);[Feiertag NRW];FALSCH)
  20.  Spalte:   FY =rngFYPräfix&WENN(rngStartFiskaljahr=1;[@Jahr];
    WENN([@[Monat_kurz]]<rngStartFiskaljahr;[@Jahr]-1&”/”&RECHTS([@Jahr];2);
    [@Jahr]&”/”&1*RECHTS([@Jahr];2)+1))
  21.  Spalte:   FY M =[@FY]&” – “&TEXT(WENN([@[Monat_kurz]]<
    rngStartFiskaljahr;12-rngStartFiskaljahr+[@[Monat_kurz]];[@[Monat_kurz]]-rngStartFiskaljahr)+1;”00”)
  22.   Spalte:   FY Q =[@FY]&” – Q”&AUFRUNDEN((WENN([@[Monat_kurz]]<
    rngStartFiskaljahr;12-rngStartFiskaljahr+[@[Monat_kurz]];
    [@[Monat_kurz]]-rngStartFiskaljahr)+1)/3;0)

Auf dem zweiten Tabellenblatt gibt es zwei Zellen benannte Zellen. Die mit rngStartFiskaljahr benannte Zelle muss auf Werte zwischen 1 und 12 gesetzt werden. Die benannte Zelle rngFYPräfix beinhaltet z. B. “GJ ” für Geschäftsjahr oder “FY ” für fiscal year.

Alle Angaben und Berechnungen sind ohne Gewähr. Also bitte noch einmal prüfen. Vielleicht mag sich auch jemand die Mühe machen und die Feiertage und Ferien für andere Bundesländer eintragen – dies allein war schon irre aufwendig.

So!!! Nun haben wir eine Basis, auf die ich in neuen Videos eingehen werde.
Freue mich auf Feedback bei YouTube und auch Danke an alle, die den Kanal supporten.

Bis bald
Andreas

Feiertage NRW von 2017 bis 2020

 

Hallo,

in meiner aktuellen Videoreihe zur Jahresübersicht nutzte ich eine Liste von Feiertagen und Ferienzeiten. In meinem Fall für NRW.

Wer die Übungen nachvollziehen möchte, kann auf die folgenden Feiertage (ohne Gewähr) zurückgreifen und diese eventuell sogar mit Power Query auslesen.

Es gibt auch sicher andere Quellen im Netz dafür.

Hier die Feiertage und anderen Ereignisse als Tabelle:

 

Datum Ereignis gesetzlich
01.01.2017 Neujahr ja
27.02.2017 Rosenmontag
14.04.2017 Karfreitag ja
16.04.2017 Ostersonntag ja
17.04.2017 Ostermontag ja
01.05.2017 1. Mai ja
25.05.2017 Christi Himmelfahrt ja
04.06.2017 Pfingstsonntag ja
05.06.2017 Pfingstmontag ja
15.06.2017 Fronleichnam ja
03.10.2017 Tag der Deutschen Einheit ja
31.10.2017 Reformationstag ja
01.11.2017 Allerheiligen ja
24.12.2017 Heiligabend
25.12.2017 1. Weihnachtstag ja
26.12.2017 2. Weihnachtstag ja
31.12.2017 Silvester
01.01.2018 Neujahr ja
12.02.2018 Rosenmontag
30.03.2018 Karfreitag ja
01.04.2018 Ostersonntag ja
02.04.2018 Ostermontag ja
01.05.2018 Maifeiertag ja
10.05.2018 Christi Himmelfahrt ja
20.05.2018 Pfingstsonntag ja
21.05.2018 Pfingstmontag ja
31.05.2018 Fronleichnam ja
03.10.2018 Tag der Deutschen Einheit ja
01.11.2018 Allerheiligen ja
24.12.2018 Heiligabend
25.12.2018 1. Weihnachtstag ja
26.12.2018 2. Weihnachtstag ja
31.12.2018 Silvester
01.01.2019 Neujahr ja
04.03.2019 Rosenmontag
19.04.2019 Karfreitag ja
21.04.2019 Ostersonntag ja
22.04.2019 Ostermontag ja
01.05.2019 Maifeiertag ja
30.05.2019 Christi Himmelfahrt ja
09.06.2019 Pfingstsonntag ja
10.06.2019 Pfingstmontag ja
20.06.2019 Fronleichnam ja
03.10.2019 Tag der Deutschen Einheit ja
01.11.2019 Allerheiligen ja
24.12.2019 Heiligabend
25.12.2019 1. Weihnachtstag ja
26.12.2019 2. Weihnachtstag ja
31.12.2019 Silvester
01.01.2020 Neujahr ja
24.02.2020 Rosenmontag
10.04.2020 Karfreitag ja
12.04.2020 Ostersonntag ja
13.04.2020 Ostermontag ja
01.05.2020 Maifeiertag ja
21.05.2020 Christi Himmelfahrt ja
31.05.2020 Pfingstsonntag ja
01.06.2020 Pfingstmontag ja
11.06.2020 Fronleichnam ja
03.10.2020 Tag der Deutschen Einheit ja
01.11.2020 Allerheiligen ja
24.12.2020 Heiligabend
25.12.2020 1. Weihnachtstag ja
26.12.2020 2. Weihnachtstag ja
31.12.2020 Silvester
15.02.2021 Rosenmontag
28.02.2022 Rosenmontag
20.02.2023 Rosenmontag
12.02.2024 Rosenmontag

 

Anbei die bisherigen Videotitel:

 

 

Videolink zur Preview: https://www.youtube.com/watch?v=6Ou1SD6dAkg

 

 

 

Videolink zu Teil 1: https://www.youtube.com/watch?v=O9nz1yVqeLA

 

Videolink zu Teil 2: https://www.youtube.com/watch?v=mV4QNy1IXdM

Stickbesitzer können die Dateien auch aus den Verzeichnissen E808 bis E810 ziehen und die Übungen direkt parallel zu den Videos nachvollziehen.

Besten Dank für das Super-Feedback zu diesen Videos. Würde mich freuen, wenn Ihr die Titel Euren Kollegen weiterempfehlt.

Sonnige Grüße
Andreas

Excel – Projektkalender

In einem Kalender soll der ausgewählte Projektzeitraum visualisiert werden.

Die Projekttage sind nachfolgend gelb dargestellt. Arbeitsfreie Zeiten grau und Feiertage Orange.
Zusätzlich heben sich die einzelnen Monate von einander ab.

PK1

Excel – Projektkalender – Preview https://youtu.be/WGvI6GPeuRM
Excel – Projektkalender – Feiertage aus Outlook übernehmen – Teil 1 https://youtu.be/ABMvbA4RadM
Excel – Projektkalender – Arbeitstage auswählen – Teil 2 https://youtu.be/bvwCsOW8te4
Excel – Projektkalender – Kalender dynamisch aufbauen – Teil 3 https://youtu.be/X3EBCXgpTY8
Excel – Projektkalender – Bedingte Formatierung – Monatslinien – Teil 4 http://youtu.be/fWODm5wPydM
Excel – Projektkalender – Bedingte Formatierung – Projekttage – Teil 5 http://youtu.be/mronPMZiHD0
Excel – Projektkalender – VBA – Feiertage ausblenden – Teil 6 http://youtu.be/_8N5fBiz84M
Excel – Projektkalender – Bedingte Formatierung – Monate abwechselnd einfärben – Teil 7 https://youtu.be/K5x4shLNsts
Excel – Projektkalender – Bedingte Formatierung – Ferientage – Teil 8 https://youtu.be/CscxikTm0qU

Hier ist der VBA-Teil:

Option Explicit

Sub Ellipse1_Klicken()

With ActiveSheet
.Protect DrawingObjects:=False, Contents:=False
If .Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “>” Then
.Columns(“A:G”).EntireColumn.Hidden = False
.Columns(“U:Z”).EntireColumn.Hidden = False
.Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “<”

Else

.Columns(“A:G”).EntireColumn.Hidden = True
.Columns(“U:Z”).EntireColumn.Hidden = True
.Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “>”

End If

.Range(“I1”).Select
.Protect DrawingObjects:=True, Contents:=True
End With

End Sub

Microsoft Project – Ausnahmen für Kalender per VBA aus Excel importieren

In den jeweiligen Kalendern von Project können Ausnahmen für arbeitsfreie Tage eingetragen werden. Liegt eine Liste mit diesen Ausnahmen in Excel vor, kann diese nicht einfach per Copy und Paste in ihrer Gesamtheit kopiert werden. Schade.

p01

Damit Project auf Excel im VBA zugreifen kann, muss in Extras – Verweise der Zugriff auf Microsoft Excel gewährt werden. Zunächst mit ALT + F11 den VBA-Editor öffnen, dann den Zugriff gewähren.

p11

Anschließend den unten stehenden Code in ein neues Modul kopieren und den Pfad zur Datei anpassen.

Folgender VBA-Code öffnet zunächst eine Excel-Datei und liest anschließend Zeilenweise die Daten der jeweiligen Ausnahmen in die Ausnahmeliste des Kalenders “Standard”:

Sub Feiertage_Importieren()
Dim xlApp As Excel.Application
Dim xlWkb As Workbook
Dim i As Long
Dim Bezeichnung As String
Dim Startdatum As Date
Dim Enddatum As Date

Set xlApp = CreateObject(“Excel.Application”)
Set xlWkb = xlApp.Workbooks.Open(“C:\Users\Andreas\Desktop\KalenderStandard.xlsx”)

i = 2

With xlWkb.Sheets(“Feiertage”)
Do Until .Cells(i, 1).Value = “”

Bezeichnung = .Cells(i, 1).Value
Startdatum = .Cells(i, 2).Value
Enddatum = .Cells(i, 3).Value

ActiveProject.BaseCalendars(“Standard”).Exceptions.Add Type:=1, Name:=Bezeichnung, Start:=Startdatum, Finish:=Enddatum

i = i + 1
Loop
End With

xlWkb.Close
Set xlWkb = Nothing
Set xlApp = Nothing
End Sub

Achtung: Das Makro beinhaltet noch keine Fehlerprozeduren und prüft nicht, ob die Termine eventuell schon vorhanden sind.

Nun kann das Makro z.B. mit Alt + F8 ausgeführt werden.
Unter Projekt – Arbeitszeit ändern lassen sich die neuen Ausnahmen einsehen.

p21

Videolink:

Link zum Video bei YouTube: http://youtu.be/3advDEF3iyo

Excel – PowerPivot – Kalendertabelle für alle Auswertungen

Ein gut gepflegter Kalender sollte mit den Datentabellen verknüpft sein. Zudem ist die Kalendertabelle als Datumstabelle zu markieren und die Sortierreihenfolge für Monate und Wochentage festzulegen.

Welche Informationen sollte eine Kalendertabelle tragen? Im Prinzip alle Informationen, die Sie später auch auswerten möchten.

Hier ein paar Vorschläge

  • Datum
  • Jahr
  • Monat in Zahlen
  • Monat ausgeschrieben
  • Tag des Monats
  • Wochentag als Zahl
  • Wochentag ausgeschrieben
  • Information zum Wochenende
  • Kalenderwoche
  • Quartal
  • Geschäftsjahr
  • Jahr und Quartal
  • Jahr und Monat
  • Anzahl Tage des Monats

Die Kalendertabelle aus dem Video zum Download:
Kalender PowerPivot

Hier ist das Video:
Videolink: http://youtu.be/FXf0wI4RQfs