Power Query, zeitliche Differenz in Kalender-, Arbeitstagen, Stunden und Minuten berechnen

Im Folgenden wird eine Methode mit Power Query beschrieben, wie man ausgehend von

Startdatum, Startuhrzeit / Enddatum, Enduhrzeit


zeitliche Differenzen (Kalender-, Arbeitstagen, Stunden, Minuten)
berechnen kann

Wie man optional eine Liste mit Feiertagen erstellen kann sehen Sie hier

Language M Code

--- SCHNIPP ---

let

fxArbeitstage = (start as date, end as date, optional Feiertage as list) as number =>

        let

           Liste_Feiertage = if Feiertage = null then {} else Feiertage,

           Liste_Tage = {Number.From(start)..Number.From(end)},

           Liste_Differenz  = List.Difference(Liste_Tage, Liste_Feiertage),

           Liste_Mod = List.Transform(Liste_Differenz, each Number.Mod(_, 7)),

           Liste_Sel = List.Select(Liste_Mod, each _>1),

           Ergebnis = List.Count(Liste_Sel)

         in

           Ergebnis,



    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Start", Int64.Type}, {"Start_Uhrzeit", type number}, {"Ende", Int64.Type}, {"Ende_Uhrzeit", type number}}),
    Differenz = Table.AddColumn(#"Geänderter Typ", "Differenz", each ([Ende]+[Ende_Uhrzeit])-([Start]+[Start_Uhrzeit])),
    Differenz_Stunden = Table.AddColumn(Differenz, "Differenz_Stunden", each [Differenz]*24),
    Kalendertage = Table.AddColumn(Differenz_Stunden, "Kalendertage", each Number.RoundDown([Differenz_Stunden]/24)),
    Stunden = Table.AddColumn(Kalendertage, "Stunden", each Number.Mod(Number.RoundDown(Number.Mod([Differenz_Stunden],24)),24)),
    #"Geänderter Typ1" = Table.TransformColumnTypes(Stunden,{{"Start", type date}, {"Ende", type date}}),
    Arbeitstage = Table.AddColumn(#"Geänderter Typ1", "Arbeitstage", each fxArbeitstage([Start],[Ende])-1),
    Kalendertage_ohne_WE = Table.AddColumn(Arbeitstage, "Kalendertage_ohne_WE", each if [Kalendertage]>[Arbeitstage] then [Kalendertage]-([Kalendertage]-[Arbeitstage]) else [Kalendertage]),
    Minuten = Table.AddColumn(Kalendertage_ohne_WE, "Minuten", each Number.Mod(Number.RoundUp(Number.Mod([Differenz]*24*60,1440)),60))
in
    Minuten

--- SCHNAPP ---


benutzerdefinierte Funktion zur Ermittlung von Arbeitstagen

--- SCHNIPP

(start as date, end as date, optional Feiertage as list) as number =>

        let

           Liste_Feiertage = if Feiertage = null then {} else Feiertage,

           Liste_Tage = {Number.From(start)..Number.From(end)},

           Liste_Differenz  = List.Difference(Liste_Tage, Liste_Feiertage),

           Liste_Mod = List.Transform(Liste_Differenz, each Number.Mod(_, 7)),

           Liste_Sel = List.Select(Liste_Mod, each _>1),

           Ergebnis = List.Count(Liste_Sel)

         in

           Ergebnis

--- SCHNAPP


weiterführende links

Arbeitstage berechnen

Kommentare

Beliebte Posts aus diesem Blog

Vergleich mit 2 Bedingungen, INDEX(), VERGLEICH()

Dropdown Liste mit Mehrfachauswahl

nützliche Text Funktionen in Power Query