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
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
Kommentar veröffentlichen