Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Power Query Nettoarbeitstage

Power Query Nettoarbeitstage
02.08.2022 11:11:11
Tom
Hallo zusammen,
ich möchte mit Power Query die Nettoarbeitstage (ohne Wochenenden) und mit ausländischen Feiertagen berechnen lassen.
Der Code für die Tage abzgl. den Wochenenden habe ich gegoogelt. Wie lassen sich jetzt noch meine spezifischen Feier- und evtl. Brückentage davon abziehen?
Code Liste aller Tage

List.Dates([Datum von], Number.From([Datum bis] - [Datum von]) + 1, #duration(1,0,0,0))
Liste aller Tage abzgl. Wochenenden

List.Select( [Liste aller Tage als Datum], each Date.DayOfWeek(_) 
Danke & viele Grüße, Tom
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Power Query Nettoarbeitstage
02.08.2022 11:34:50
ChrisL
Hi Tom
Die ausländischen Feiertage habe ich in einer separaten Liste "Feiertage" abgelegt:

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle3"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Feiertage", type date}}),
Feiertage = #"Geänderter Typ"[Feiertage]
in
Feiertage
Die Anzahl mittels benutzerdefinierter Spalte in der Hauptabfrage:

=List.Count([Liste ohne WE])-List.Count(List.Intersect({[Liste ohne WE],Feiertage}))
cu
Chris
Anzeige
AW: Power Query Nettoarbeitstage
03.08.2022 13:37:48
Tom
Hi Chris,
danke für die Antwort. Den ersten Teil mit der List der Feiertage verstehe ich. Mit der Anzahl in die Hauptabfrage komme ich nicht klar. Woher kommen die Spalte "Liste ohne WE"?

=List.Count([Liste ohne WE])-List.Count(List.Intersect({[Liste ohne WE],Feiertage}))
Der Code aus meinem Post wirft auch ein Error heraus. Ich habe meine Spalten Datum von und Datum bis als Ganze-Zahl formatiert, aber auch es als Datum versucht. An was liegt das?

List.Dates([Datum von], Number.From([Datum bis] - [Datum von]) + 1, #duration(1,0,0,0))
Grüße Tom
Anzeige
AW: Power Query Nettoarbeitstage
03.08.2022 15:41:00
ChrisL
Hi Tom
Woran es liegt, kann ich aus der Ferne nicht beurteilen (evtl. von-bis vertauscht?). Mein Test hatte 2 Spalten "Datum von" und "Datum bis". Beide Spalten als Datum-Kurz definiert.
Entsprechend deiner Vorgabe ergibt sich dann auch die Spalte "Liste ohne WE":
Benutzerdefinierte Spalte "Liste aller Tage als Datum":

= List.Dates([Datum von], Number.From([Datum bis] - [Datum von]) + 1, #duration(1,0,0,0))
Benutzerdefinierte Spalte "Liste ohne WE":

= List.Select( [Liste aller Tage als Datum], each Date.DayOfWeek(_) 
Benutzerdefinierte Spalte "Ergebnis":

= List.Count([Liste ohne WE])-List.Count(List.Intersect({[Liste ohne WE],Feiertage}))
Liste Feiertage hat den gleichen Datentyp (Datum kurz).
cu
Chris
Anzeige
AW: Power Query Nettoarbeitstage
03.08.2022 16:44:44
Tom
Hi Chris,
Dank Dir. Einen Schritt ging es jetzt weiter. Leider kommt wieder ein Error. Die Formatierung ist denke ich das Problem. Anbei eine Datei nachgebaut. Würdest Du bitte einen Blick drüber werfen?
https://www.herber.de/bbs/user/154497.xlsx
Grüße Tom
Anzeige
AW: Power Query Nettoarbeitstage
03.08.2022 17:04:40
ChrisL
Hi Tom
Die Liste darf nicht erweitert werden d.h. die Zwischenschritte weglassen (List.Intersect/List.Count bezieht sich auf Datentyp List und nicht auf Einzelwerte).

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Datum von", type datetime}, {"Datum bis", type datetime}}),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Geänderter Typ",{{"Datum von", type date}, {"Datum bis", type date}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ1", "Liste aller Tage als Datum", each List.Dates([Datum von], Number.From([Datum bis] - [Datum von]) + 1, #duration(1,0,0,0))),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Liste ohne WE", each List.Select([Liste aller Tage als Datum], each Date.DayOfWeek(_) 
cu
Chris
Anzeige
AW: Power Query Nettoarbeitstage
04.08.2022 16:31:22
Tom
Hi Chris,
danke für die Erläuterung. Mit der LIST Funktion hatte ich bisher noch nicht gearbeitet.
Jetzt hat es geklappt. Ich lasse statt dem "bis Datum" das heute Datum für die Berechnung der AT nehmen.

=List.Dates([Eingang], Number.From(Date.From(DateTime.LocalNow()) - [Eingang]) + 1, #duration(1,0,0,0))
Vielen Dank für die Unterstützung.
VG Tom
Anzeige
AW: Power Query Nettoarbeitstage
05.08.2022 08:46:57
ChrisL
Hi Tom
Danke für die Rückmeldung. Freut mich, dass es funktioniert hat.
Nachfolgend den ganzen Code noch etwas zusammengedampft. Der Quell-Bezug für Feiertage erfolgt direkt in der Hauptabfrage (keine separate Abfrage mehr benötigt). Die Funktionen zusätzlich noch etwas verschachtelt.
Schlussendlich das gleiche wie vorher, einfach etwas kompakter.

let
QuelleFeiertage = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
ListFeiertage = Table.TransformColumnTypes(QuelleFeiertage,{{"Feiertage", type date}})[Feiertage],
QuelleEingang = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Table.TransformColumnTypes(QuelleEingang,{"Eingang", type datetime}),{"Eingang", type date}),
Zwischenresultat = Table.AddColumn(#"Geänderter Typ", "Liste Tage ohne WE", each List.Select(List.Dates([Eingang], Number.From(Date.From(DateTime.LocalNow()) - [Eingang]) + 1, #duration(1,0,0,0)), each Date.DayOfWeek(_) 
cu
Chris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Berechnung von Nettoarbeitstagen in Power Query


Schritt-für-Schritt-Anleitung

Um die Nettoarbeitstage mit Power Query zu berechnen, befolge diese Schritte:

  1. Datenquelle erstellen: Lege eine Excel-Tabelle an, die deine Feiertage und Daten enthält. Benenne die Tabellen sinnvoll, z.B. "Feiertage" für die Feiertage und "Eingang" für die Datensätze, an denen du die Nettoarbeitstage berechnen möchtest.

  2. Power Query öffnen: Gehe in Excel zu Daten > Abfragen und Verbindungen und wähle Abfragen bearbeiten.

  3. Feiertage importieren: Verwende den folgenden Code, um die Feiertage aus deiner Tabelle zu importieren:

    let
       Quelle = Excel.CurrentWorkbook(){[Name="Feiertage"]}[Content],
       #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Feiertage", type date}}),
       Feiertage = #"Geänderter Typ"[Feiertage]
    in
       Feiertage
  4. Daten für Nettoarbeitstage vorbereiten: Füge eine benutzerdefinierte Spalte hinzu, um die Liste aller Tage zwischen zwei Datumswerten zu erstellen:

    = List.Dates([Datum von], Number.From([Datum bis] - [Datum von]) + 1, #duration(1,0,0,0))
  5. Wochenendtage herausfiltern: Erstelle eine weitere benutzerdefinierte Spalte, um die Tage ohne Wochenenden zu ermitteln:

    = List.Select([Liste aller Tage als Datum], each Date.DayOfWeek(_) < 5)
  6. Nettoarbeitstage berechnen: Füge eine letzte benutzerdefinierte Spalte hinzu, die die Nettoarbeitstage berechnet:

    = List.Count([Liste ohne WE]) - List.Count(List.Intersect({[Liste ohne WE], Feiertage}))

Häufige Fehler und Lösungen

  • Formatierungsfehler: Achte darauf, dass die Spalten "Datum von" und "Datum bis" als Datumswerte formatiert sind. Bei Fehlern könnte es daran liegen, dass die Datentypen nicht übereinstimmen.

  • Liste nicht gefunden: Wenn der Fehler "Liste nicht gefunden" auftritt, überprüfe, ob die Tabelle der Feiertage korrekt benannt und in Power Query importiert wurde.

  • Falsche Datumswerte: Stelle sicher, dass du die Datumswerte in der richtigen Reihenfolge eingibst, da einen vertauschten "von"- und "bis"-Wert zu unerwarteten Ergebnissen führen kann.


Alternative Methoden

Wenn du die Nettoarbeitstage auch in Power BI berechnen möchtest, kannst du ähnliche Schritte befolgen. Die DAX-Funktion WORKDAY kann auch verwendet werden, um Nettoarbeitstage unter Berücksichtigung von Feiertagen zu berechnen.

Ein Beispiel in DAX:

Nettoarbeitstage = 
    COUNTROWS(
        FILTER(
            CALENDAR([Datum von], [Datum bis]),
            NOT(WEEKDAY([Date], 2) IN {6, 7}) && 
            NOT([Date] IN VALUES(Feiertage[Feiertage]))
        )
    )

Praktische Beispiele

Beispiel 1: Berechnung der Nettoarbeitstage zwischen dem 1. Januar 2022 und dem 31. Januar 2022 unter Berücksichtigung von Feiertagen.

  1. Erstelle eine Tabelle mit Feiertagen, z.B. Neujahr (1. Januar), Tag der Arbeit (1. Mai).
  2. Verwende die oben genannten Schritte, um die Nettoarbeitstage für den Januar zu berechnen.

Beispiel 2: Wenn du die Nettoarbeitstage bis heute berechnen möchtest, kannst du die heute Funktion von Power Query verwenden:

= List.Dates([Eingang], Number.From(Date.From(DateTime.LocalNow()) - [Eingang]) + 1, #duration(1,0,0,0))

Tipps für Profis

  • Optimierung der Abfragen: Achte darauf, die Abfragen so schlank wie möglich zu halten, um die Ladezeiten zu optimieren. Vermeide unnötige Zwischenschritte.

  • Feiertage dynamisch: Halte die Feiertagstabelle aktuell, um sicherzustellen, dass die Berechnungen auch in Zukunft korrekt sind.

  • Verwendung von Named Ranges: Überlege, benannte Bereiche in Excel zu verwenden, um die Wartbarkeit deiner Abfragen zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich Feiertage in Power Query hinzufügen? Du kannst eine Tabelle in Excel erstellen, in der die Feiertage aufgeführt sind, und diese dann mit Excel.CurrentWorkbook() in Power Query importieren.

2. Was mache ich, wenn ich Feiertage in mehreren Ländern berücksichtigen möchte? Erstelle separate Tabellen für jedes Land und kombiniere die Feiertage in Power Query, bevor du die Nettoarbeitstage berechnest.

3. Kann ich Nettoarbeitstage auch für den aktuellen Monat berechnen? Ja, indem du die heute Funktion verwendest, kannst du Nettoarbeitstage bis zum aktuellen Datum berechnen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige