Freigeben über


Dauerunterstützung in Power Query M

Eine Dauer in Power Query M stellt die Differenz zwischen zwei Punkt in der Zeit dar, ausgedrückt in Tagen, Stunden, Minuten und Sekunden. Unabhängig davon, ob Sie die Zeit zwischen Kundeninteraktionen berechnen, Datensätze basierend auf verstrichener Zeit filtern oder dynamische zeitbasierte Logik erstellen, sind Daueren für die Erstellung robuster und intelligenter Datenmodelle unerlässlich.

In diesem Artikel werden die Struktur, Erstellung und Manipulation von Dauer in Power Query M beschrieben. Sie enthält praktische Beispiele und gibt Tipps frei, mit denen Sie Die Dauer in Ihren eigenen Datenworkflows effektiv nutzen können.

Erstellen einer Dauer

Eine Dauer wird durch die #duration(<days>, <hours>, <minutes>, <seconds>) Funktion definiert. Stellt beispielsweise #duration(2, 3, 0, 0) eine Dauer von 2 Tagen und 3 Stunden dar. Power Query M bietet verschiedene Möglichkeiten zum Erstellen einer Dauer, abhängig vom Kontext und der erforderlichen Genauigkeitsstufe.

Verwenden der #duration Funktion

Die direkteste Methode zum Erstellen einer Dauer ist die #duration(<days>, <hours>, <minutes>, <seconds>) Syntax. Jedes Argument muss eine Zahl sein, und das Ergebnis ist ein Dauerwert.

#duration(2, 5, 30, 0) // 2 days, 5 hours, 30 minutes

Diese Funktion unterstützt auch Bruchsekunden:

#duration(0, 0, 0, 1.75) // 1.75 seconds

Erstellen von Dauer aus Datums- und Uhrzeitwerten

Die Dauer kann auch erstellt werden, indem ein Datums- und Uhrzeitwert von einem anderen subtrahiert wird. Das Ergebnis ist eine Dauer, die die Zeitspanne zwischen den beiden darstellt.

let
    Source = 
    {
        #date(2025, 7, 24) - #date(2025, 7, 23),
        // Result: #duration(1, 0, 0, 0)
        #time(12, 0, 0) - #time(11, 30, 30),
        // Result: #duration(0, 0, 29, 30)
        #datetime(2025, 7, 24, 12, 0, 0) - #datetime(2025, 7, 23, 12, 0, 0),
        // Result: #duration(1, 0, 0, 0)
        #datetimezone(2025, 7, 24, 12, 0, 0, 7, 0) - #datetimezone(2025, 7, 23, 10, 30, 0, 4, 0),
        // Result: #duration(0, 22, 30, 0)
        #datetime(2025, 7, 24, 12, 0, 0) - DateTime.From(#date(2025, 7, 23))
        // Result: #duration(1, 12, 0, 0)
    }
in
    Source

Hinweis

Das Subtrahieren eines Datums- und Uhrzeittyps von einem anderen Datums- und Uhrzeittyp (z. B. Subtrahieren eines date Werts) führt zu einem datetime Fehler. Wenn Sie unterschiedliche Datums- und Uhrzeittypen verwenden müssen, um eine Dauer zu ermitteln, verwenden Sie die Date.From, DateTime.From, , DateTimeZone.Fromoder Time.From Funktionen, um einen der Datums- und Uhrzeittypen explizit zu ändern.

Konvertieren aus kompatiblen Werten

Die Duration.From Funktion kann kompatible Werte in Dauer konvertieren. Weitere Informationen hierzu können Sie zu Duration.From(Wert) aufrufen.

Arbeiten mit Dauer

Sobald eine Dauer in Power Query M erstellt wurde, kann sie mithilfe verschiedener Vorgänge und Funktionen bearbeitet werden. Diese Funktionen machen Daueren für zeitbasierte Logik und Berechnungen sehr vielseitig.

Arithmetische Vorgänge

Dauer unterstützt standardmäßige arithmetische Vorgänge:

  • Addition und Subtraktion: Addieren oder Subtrahieren von Dauer zu oder voneinander oder von Datums- und Uhrzeitwerten.

    let
        Source = {
            #duration(1, 2, 0, 0) + #duration(0, 3, 30, 0),
            // Result: #duration(1, 5, 30, 0)
            #duration(1, 2, 0, 0) - #duration(0, 3, 30, 0),
            // Result: #duration(0, 22, 30, 0)
            #datetime(2025, 7, 24, 12, 0, 0) + #duration(0, 2, 0, 0),
            // Result: #datetime(2025, 7, 24, 14, 0, 0)
            #datetime(2025, 7, 24, 12, 0, 0) - #duration(0, 2, 0, 0),
            // Result: #datetime(2025, 7, 24, 10, 0, 0)
            #time(12, 0, 0) - #duration(0, 3, 30, 0)
            // Result: #time(8, 30, 0)
        }
    in
        Source
    
  • Negation: Eine Dauer kann negiert werden, um die Richtung umzukehren.

    let
        Source = {
            #datetime(2025, 7, 24, 12, 0, 0) + -#duration(0, 2, 0, 0),
            // Result (subtracts two hours): #datetime(2025, 7, 24, 10, 0, 0)
            #datetime(2025, 7, 23, 12, 0, 0) - #datetime(2025, 7, 24, 12, 0, 0)
            // Result: -#duration(1, 0, 0, 0)
        }
    in
        Source
    

Multiplikation und Division

Die Dauer kann mit numerischen Werten multipliziert oder dividiert werden:

let
    Source = {
        #duration(0, 2, 0, 0) * 2,
        // Result (4 hours): #duration(0, 4, 0, 0)
        #duration(1, 0, 0, 0) / 2
        // Result (12 hours): #duration(0, 12, 0, 0)
    }
in
    Source

Diese Berechnung ist nützlich für die Skalierungsdauer oder die durchschnittlichen Zeitintervalle.

Vergleiche

Die Dauer kann mithilfe von Standardvergleichsoperatoren verglichen werden:

let
    Source = #duration(1, 0, 0, 0) > #duration(0, 23, 59, 59)
        // Result: true
in
    Source

Diese Berechnung ermöglicht die Verwendung von Dauer in bedingter Logik, z. B. das Filtern von Zeilen basierend auf verstrichener Zeit.

Typkompatibilität

Die Dauer ist mit Datums- und Uhrzeitwerten in arithmetischen Ausdrücken kompatibel, aber nicht austauschbar. Das Subtrahieren von zwei Datums- und Uhrzeitwerten führt beispielsweise zu einem durationWert, das Hinzufügen von zwei Datums- und Uhrzeitwerten ist jedoch ungültig.

let
    Source = 
    {
        #datetime(2025, 7, 24, 12, 0, 0) - #datetime(2025, 7, 23, 12, 0, 0),
        // Result: #duration(1, 0, 0, 0)
        #datetime(2025, 7, 24, 12, 0, 0) + #datetime(2025, 7, 23, 12, 0, 0)
        // Result: Error
    }
in
    Source

Dauerfunktionen in M

Power Query M enthält eine Reihe integrierter Funktionen für die Arbeit mit Dauer. Diese Funktionen ermöglichen die Konvertierung, Extraktion von Komponenten und Aggregation von Dauerwerten, wodurch sie wesentliche Tools für zeitbasierte Transformationen sind.

Duration.From(Wert)

Die Duration.From Funktion konvertiert einen kompatiblen Wert in eine Dauer. Kompatible Werte bestehen entweder aus einer Zahl, die als Bruchteil eines Tages oder einer Textdarstellung einer Dauer interpretiert wird. Informationen zu den Textdarstellungsformaten finden Sie unter .Go to Duration.FromText for information about the textual representation formats.

let
    Source =
    {
        Duration.From(1.5),
        // Result: 1.5 days = #duration(1, 12, 0, 0)
        Duration.From("2.05:55:20.242")
        // Result: #duration(2, 5, 55, 20.242)
    }
in
    Source

Komponentenaccessoren

Diese Funktionen extrahieren bestimmte Teile einer Dauer:

  • Duration.Days(<duration>)

    Gibt die Anzahl der ganzen Tage in der Dauer zurück.

  • Duration.Hours(<duration>)

    Gibt die Anzahl der Stunden zurück, die über die gesamten Tage hinausgehen.

  • Duration.Minutes(<duration>)

    Gibt die Anzahl der Minuten zurück, die über die gesamten Stunden hinausgehen.

  • Duration.Seconds(<duration>)

    Gibt die Anzahl der Sekunden zurück, die über die gesamten Minuten hinausgehen.

let
    Source = #duration(2, 5, 30, 45),
    TextFormat = Text.Format(
        "Duration = #{0} days, #{1} hours, #{2} minutes, and #{3} seconds.",
        {
            Duration.Days(Source), 
            Duration.Hours(Source), 
            Duration.Minutes(Source), 
            Duration.Seconds(Source)
        }
    )
    // Results: "Duration = 2 days, 5 hours, 30 minutes, and 45 seconds."
in
    TextFormat

Gesamtwertfunktionen

Diese Funktionen geben den Gesamtwert einer Dauer in einer einzelnen Einheit zurück, einschließlich Bruchteilen:

  • Duration.TotalDays(<duration>)
  • Duration.TotalHours(<duration>)
  • Duration.TotalMinutes(<duration>)
  • Duration.TotalSeconds(<duration>)
let
    Source = 
    {
        Duration.TotalDays(#duration(1, 12, 0, 0)),    // 1.5 days
        Duration.TotalHours(#duration(1, 12, 0, 0)),   // 36 hours
        Duration.TotalMinutes(#duration(1, 12, 0, 0)), // 2160 minutes
        Duration.TotalSeconds(#duration(1, 12, 0, 0))  // 129600 seconds
    }
in
    Source

Dauernormalisierung

In den meisten Fällen besteht die Dauer aus Tagen, Stunden (maximal 23 Stunden), Minuten (maximal 59 Minuten) und Sekunden (maximal 59,9999999 Sekunden). In einigen Fällen können Sie jedoch die Maximalwerte in den Dauerparametern überschreiten. In diesem Fall normalisiert Power Query M diese Werte automatisch:

  • Sekundenüberlauf in Minuten
  • Minutenüberlauf in Stunden
  • Stundenüberlauf in Tage

Angenommen, Sie haben eine Spalte, die das Startdatum und die Startzeit für einen laufenden Prozess bereitstellt. Darüber hinaus verfügen Sie über eine Spalte, die zeigt, wie lange der Vorgang in Sekunden abgeschlossen wurde. Sie möchten eine dritte Spalte erstellen, in der das Datum und die Uhrzeit angezeigt werden, zu dem der Prozess abgeschlossen ist.

let
    Source = #table(type table[StartTime = datetime, Seconds = Int64.Type],
    {
        {#datetime(2025, 7, 25, 8, 0, 0), 5400},
        {#datetime(2025, 7, 25, 13, 15, 0), 86400},
        {#datetime(2025, 7, 24, 22, 30, 0), 172800}
    }),
    AddSeconds = Table.AddColumn(
        Source, 
        "EndTime", 
        each [StartTime] + #duration(0, 0, 0, [Seconds]), 
        type datetime
    )
in
    AddSeconds

Die folgende Tabelle ist das Ergebnis dieser Berechnungen.

Screenshot der Tabelle mit der Enddatums- und Uhrzeitspalte, die von der Startzeit und Dauer in Sekunden abgeleitet ist.

Obwohl sie nur die Anzahl der Sekunden hatten, die ein Prozess ausgeführt hat, rollt Power Query M diesen Dauerwert in Minuten, Stunden und Tage, an denen das Ergebnis ausgewertet wird.

Darstellen von Wochen, Monaten und Jahren

Da Die Dauer auf festen Einheiten (Tage, Stunden, Minuten, Sekunden) basiert, gibt es kein systemeigenes Konzept von Wochen, Monaten oder Jahren, die in der Länge variieren. Ein duration Typ in Power Query M ist eine feste Struktur, die keine Kalenderregeln berücksichtigt. Für eine genaue Dauer über Monate oder Jahre hinweg subtrahieren Sie ein Datum und eine Uhrzeit von einem anderen, anstatt feste Dauer zu verwenden. Dieser Ansatz behandelt Schaltjahre, unterschiedliche Monatslängen und Sommerzeit (DST). Beachten Sie jedoch auch, dass ein Bestimmtes Datums- und Uhrzeitverhalten abhängig davon variieren kann, ob die Abfrage lokal (auf Power Query Desktop) oder online (in Power Query Online) ausgeführt wird. Ausführliche Informationen hierzu erhalten Sie unter " Lokale", "feste" und "UTC"-Varianten des aktuellen Datums und der aktuellen Uhrzeit. Im Allgemeinen vermeiden Sie die Verwendung von festen Daueren für langfristige Berechnungen.