Kestotuki Power Query M:ssä

Power Query M:n kesto edustaa kahden pisteen eroa ajassa ilmaistuna päivinä, tunteina, minuutteina ja sekunteina. Kestot ovat välttämättömiä luotettavien ja älykkäiden tietomallien luomisessa, olipa kyseessä asiakkaiden vuorovaikutusten välinen aika, tietueiden suodattaminen kuluneen ajan perusteella tai dynaamisen aikapohjaisen logiikan luominen.

Tässä artikkelissa tutkitaan kestojen rakennetta, luontia ja käsittelyä Power Query M:ssä. Se sisältää käytännön esimerkkejä ja jakovinkkejä, joiden avulla voit käyttää kestoja tehokkaasti omissa tietotyönkuluissasi.

Keston luominen

Funktio määrittää keston #duration(<days>, <hours>, <minutes>, <seconds>) . Ilmaisee esimerkiksi kahden #duration(2, 3, 0, 0) päivän ja kolmen tunnin keston. Power Query M tarjoaa useita tapoja luoda keston kontekstin ja tarvittavan tarkkuustason mukaan.

Käytä toimintoa #duration

Suorin tapa luoda kesto on #duration(<days>, <hours>, <minutes>, <seconds>) syntaksi. Kunkin argumentin on oltava luku, ja tulos on kestoarvo.

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

Tämä funktio tukee myös murtosekunteja:

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

Kestojen luominen päivämäärä- ja aika-arvoista

Kestoja voidaan myös luoda vähentämällä yksi päivämäärä- ja aika-arvo toisesta. Tulos on kesto, joka edustaa näiden kahden välistä aikaväliä.

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

Note

Yhden päivämäärä- ja aikatyypin vähentäminen eri päivämäärä- ja aikatyypistä (esimerkiksi arvon date vähentäminen datetime arvosta) aiheuttaa virheen. Jos sinun on käytettävä eri päivämäärä- ja aikatyyppejä keston määrittämiseksi, voit muuttaa jotakin päivämäärä- ja aikatyyppiä eksplisiittisesti käyttämällä Date.From- DateTime.From, -, DateTimeZone.From- tai Time.From -funktioita.

Yhteensopivista arvoista muuntaminen

Funktio Duration.From voi muuntaa yhteensopivat arvot kestoiksi. Lisätietoja on kohdassa Duration.From(arvo)..

Kestojen käsitteleminen

Kun kesto on luotu Power Query M:ssä, sitä voidaan muokata käyttämällä erilaisia toimintoja ja funktioita. Nämä ominaisuudet tekevät kestoista erittäin monipuolisia aikapohjaiseen logiikkaan ja laskutoimituksiin.

Aritmeettiset operaatiot

Kestot tukevat vakioaritmeettisia toimintoja:

  • Yhteenlasku ja vähennyslasku: Lisää tai vähennä kestoja toisistaan tai päivämäärä- ja aika-arvoista.

    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: Kesto voidaan kumota sen suunnan kääntämiseksi.

    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
    

Kertolasku ja jakolasku

Kestot voidaan kertoa tai jakaa numeerisilla arvoilla:

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

Tästä laskelmasta on hyötyä kestojen skaalaamisessa tai aikavälien keskiarvon laskemisessa.

Vertailut

Kestoja voi verrata käyttämällä vakiovertailuoperaattoreita:

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

Tämä laskutoimitus sallii kestojen käytön ehdollisessa logiikassa, kuten rivien suodattamisessa kuluneen ajan perusteella.

Tyypin yhteensopivuus

Kestot ovat yhteensopivia aritmeettisten lausekkeiden päivämäärä- ja aika-arvojen kanssa, mutta ne eivät ole niiden kanssa vaihdettavissa. Esimerkiksi kahden päivämäärä- ja aika-arvon vähentäminen durationtuottaa arvon , mutta kahden päivämäärä- ja aika-arvon lisääminen ei kelpaa.

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

M:n kestofunktiot

Power Query M sisältää joukon valmiita funktioita kestojen käsittelemiseen. Nämä funktiot mahdollistavat muunnoksen, osien poimimisen ja kestoarvojen koostamisen, minkä ansiosta ne ovat olennaisia työkaluja aikapohjaisia muunnoksia varten.

Duration.From(arvo)

Funktio Duration.From muuntaa yhteensopivan arvon kestoksi. Yhteensopivat arvot koostuvat joko luvusta, joka tulkitaan päivän murtoluvuksi tai keston tekstiesitykseksi. Siirry kohteeseen Duration.FromText , jos haluat lisätietoja tekstimuotoilumuodoista.

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

Osien käyttöoikeuden myöntäjät

Nämä funktiot poimivat keston tietyt osat:

  • Duration.Days(<duration>)

    Palauttaa kokonaisten päivien määrän kestossa.

  • Duration.Hours(<duration>)

    Palauttaa tuntien määrän koko päivien jälkeen.

  • Duration.Minutes(<duration>)

    Palauttaa minuuttien määrän koko tuntien jälkeen.

  • Duration.Seconds(<duration>)

    Palauttaa sekuntien määrän koko minuuttien jälkeen.

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

Arvofunktiot yhteensä

Nämä funktiot palauttavat keston kokonaisarvon yksittäisessä yksikössä, mukaan lukien murto-osat:

  • 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

Keston normalisointi

Useimmissa tapauksissa kesto koostuu päivistä, tunneista (enintään 23 tuntia), minuutista (enintään 59 minuuttia) ja sekunnista (enintään 59,9999999 sekuntia). Joissakin tapauksissa saatat kuitenkin ylittää kestoparametrien enimmäisarvot. Tässä tapauksessa Power Query M normalisoi nämä arvot automaattisesti:

  • Sekunnit tulvivat minuutteihin
  • Minuutit tulvivat tunneiksi
  • Tunnit tulvivat päiviin

Oletetaan, että sinulla on esimerkiksi sarake, joka antaa käynnissä olevan prosessin alkamispäivämäärän ja -kellonajan. Lisäksi sinulla on sarake, joka näyttää sekunteina, kuinka kauan prosessin valmistuminen kesti. Haluat luoda kolmannen sarakkeen, joka näyttää prosessin valmistumispäivän ja -kellonajan.

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

Seuraava taulukko on näiden laskutoimitusten tulos.

Näyttökuva taulukosta, joka sisältää alkamisajasta ja kestosta johdettu päättymispäivä- ja aikasarakkeen sekunteina.

Vaikka sinulla oli vain prosessin suorittamien sekuntien määrä, Power Query M säilöi kestoarvon minuutteina, tunteina ja päivinä, jolloin tulos arvioidaan.

Esitetään viikot, kuukaudet ja vuodet

Koska kestot perustuvat kiinteisiin yksiköihin (päivät, tunnit, minuutit, sekunnit), ei ole alkuperäistä viikkojen, kuukausien tai vuosien käsitettä, jonka pituus vaihtelee. duration Power Query M:n tyyppi on kiinteä rakenne, joka ei sisällä kalenterisääntöjä. Jos tarkka kesto kattaa kuukaudet tai vuodet, vähennä yksi päivämäärä ja aika toisesta kiinteiden kestojen käyttämisen sijaan. Tämä lähestymistapa käsittelee oikein karkausvuodet, vaihtelevat kuukauden pituudet ja DST (daylight savings time). Huomaa kuitenkin, että päivämäärän ja ajan toiminta saattaa vaihdella sen mukaan, suoritetaanko kysely paikallisesti (Power Query Desktopissa) vai verkossa (Power Query Onlinessa). Lisätietoja on kohdassa Paikalliset, kiinteät ja UTC-versiot nykyisestä päivämäärästä ja ajasta. Yleensä kannattaa välttää kiinteisiin kestoihin luottaminen pitkän aikavälin laskutoimituksissa.