(Forum) PQ: Addition von Minuten zu Datum/Zeit

Quelle:  https://www.herber.de/cgi-bin/eachthread.pl?idx=1992819
Stand: 05.10.2024 22:00
Mehr zum The­ma „Her­ber-Forum find­en Sie hier.

Hier der Eröff­nungs­beitrag aus dem Forum:


Hal­lo,
hoffe mir kann hier ein­er Helfen 🙂

Ich habe eine Excel Datei in der ich gern ein Start­Da­tum und die Startzeit eines Auf­trages eingeben würde in Spalte A. In Spalte B gebe ich die Auf­tragszeit in Minuten an.
Eine Aus­gabe wann der Auf­trag fer­tig ist soll in Spalte C erfol­gen.
Ich abe eine Formel die das Aus­rech­net aber lei­der nicht über 24 Stun­den. Die Zeit wird Richtig angezeigt nur nicht das Datum das bleibt ste­hen.
Ich bitte um Info ob so was mach­bar ist.

Datei im Anhang
https://www.herber.de/bbs/user/172573.xlsm


Zugegeben, ich würde die Auf­gabe auch per Plain Excel lösen, wie von diesem oder jen­em Helfer im Thread vorgeschla­gen. Meine Pow­er Query-Beispiel­lö­sun­gen sollen in erster Lin­ie ein Denkanstoß für PQ-Berech­nun­gen mit Zei­tangaben sein.

Die Mus­ter­datei ist (wie so oft in xl-Foren) wieder ein Parade­beispiel für „so bitte nicht“. Es begin­nt damit, dass das File als *.xlsm gespe­ichert wurde, obwohl kein Makro darin enthal­ten ist. 🙁

Ich musste die Datei auf einem beson­ders gesicherten Rech­n­er herun­ter­laden, der Sicher­heit wegen…

Die Leerzeilen und leeren Spal­ten sind ein­fach ein echt­es „NoGo“. Und die bei­den Arbeits­blät­ter haben ja nun nicht wirk­lich viele Gemein­samkeit­en. Hier in diesem Beitrag beziehe ich mich mich auf das Arbeits­blatt DATUMZEIT, welch­es auch nach dem Aufruf der Mappe per Default aktiviert ist.

Wie schon angedeutet, biete ich Ihnen mehrere Lösungsvorschläge auf der Basis Pow­er Query an. Dabei ist das Ergeb­nis stets gle­ich (und kor­rekt), der Weg zum Ziel aber dahinge­hend unter­schiedlich, dass mit abnehmender Zahl der Arbeitss­chritte der Grad des erforder­lichen Vor­wis­sens, prinzip­iell der Schwierigkeits­grad steigt.

Ausschließlich Mausklicks

Wie es die Zwis­chen-Über­schrift schon aufzeigt, lässt sich das „Prob­lem“ dadurch lösen, dass Sie keine einzige Formel eingeben müssen. Hier der entsprechende M-Code, der wegen dieser Vor­gabe etwas umfan­gre­ich­er ist:

let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Geänderter Typ",{{"Spalte1", "Start"}, {"Spalte3", "Dauer in Minuten"}}),
    // Leere Spalten haben in einer ordentlichen Liste nichts zu suchen!
    #"Entfernte Spalten" = Table.RemoveColumns(#"Umbenannte Spalten",{"Spalte2"}),
    // So lassin sich die numerisch erfassten Minuten addieren
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Entfernte Spalten",{{"Start", type number}}),
    #"Duplizierte Spalte" = Table.DuplicateColumn(#"Geänderter Typ1", "Dauer in Minuten", "Dauer in Minuten - Kopie"),
    #"Umbenannte Spalten1" = Table.RenameColumns(#"Duplizierte Spalte",{{"Dauer in Minuten - Kopie", "Dauer in Minuten - dezimal"}}),
    // 24 (Stunden je Tag) und 60 (Minuten je Stunde)
    Divisionsspalte = Table.TransformColumns(#"Umbenannte Spalten1", {{"Dauer in Minuten - dezimal", each _ / 1440, type number}}),
    #"Addition eingefügt" = Table.AddColumn(Divisionsspalte, "Addition", each [Start] + [#"Dauer in Minuten - dezimal"], type number),
    #"Geänderter Typ2" = Table.TransformColumnTypes(#"Addition eingefügt",{{"Addition", type datetime}}),
    // Der höheren Transparenz wegen…
    #"Umbenannte Spalten2" = Table.RenameColumns(#"Geänderter Typ2",{{"Addition", "Fertigstellung"}})
in
    #"Umbenannte Spalten2"

Zwischenschritt mit Formel

In diesem Fall wer­den die Spal­tenüber­schriften so belassen, wie durch den Import der Dat­en vorgegeben. In der Benutzerdefinierten Formel wird das Datum aus Spalte 1 per Funk­tion in einen numerischen Wert kon­vertiert. Hier der Code:

let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Spalte2"}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Entfernte Spalten", "neu", each Number.From([Spalte1])+[Spalte3]/24/60),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Hinzugefügte benutzerdefinierte Spalte",{{"neu", type datetime}})
in
    #"Geänderter Typ1"

Lösung mit (prinzipiell) nur 1 Schritt

Die bei­den ersten Schritte (Geän­dert­er Typ) und (Ent­fer­nte Spal­ten) kön­nen Sie ent­fer­nen (löschen) oder ein­fach ignori­eren. In diesem Beispiel wer­den durch Ver­schachtelung mehrere Einzel-Funk­tio­nen in ein­er einzi­gen Funk­tions-Zeile zusam­menge­fasst:

let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Spalte2"}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Entfernte Spalten", "neu", each DateTime.From(Number.From([Spalte1])+[Spalte3]/1440))
in
    #"Hinzugefügte benutzerdefinierte Spalte"

Ob der Sinnspruch „In der Kürze liegt die Würze“ in diesem Fall zutrifft, über­lasse ich Ihrer per­sön­lichen Ein­schätzung. 😉



Und hier, beim Stich­wort last but not least find­en Sie noch einen Hin­weis, wo und wie Sie Antworten auf eventuelle Fra­gen oder auch die aus­gear­beit­ete Datei bekom­men kön­nen. Grundle­gen­des zum The­ma M-Code lesen Sie hier im Blog nach.

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