Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una durata in Power Query M rappresenta la differenza tra due punti nel tempo, espressi in giorni, ore, minuti e secondi. Sia che si stia calcolando il tempo tra le interazioni con i clienti, il filtro dei record in base al tempo trascorso o la creazione di una logica dinamica basata sul tempo, le durate sono essenziali per la creazione di modelli di dati affidabili e intelligenti.
Questo articolo illustra la struttura, la creazione e la modifica delle durate in Power Query M. Include esempi pratici e condivisioni suggerimenti che consentono di usare in modo efficace le durate nei flussi di lavoro dei dati.
Creare una durata
Una durata è definita dalla #duration(<days>, <hours>, <minutes>, <seconds>) funzione . Ad esempio, #duration(2, 3, 0, 0) rappresenta una durata di 2 giorni e 3 ore. Power Query M offre diversi modi per creare una durata, a seconda del contesto e del livello di precisione richiesto.
Usare la funzione #duration
Il modo più diretto per creare una durata è la #duration(<days>, <hours>, <minutes>, <seconds>) sintassi . Ogni argomento deve essere un numero e il risultato è un valore di durata.
#duration(2, 5, 30, 0) // 2 days, 5 hours, 30 minutes
Questa funzione supporta anche i secondi frazionari:
#duration(0, 0, 0, 1.75) // 1.75 seconds
Creare durate dai valori di data e ora
È anche possibile creare durate sottraendo un valore di data e ora da un altro. Il risultato è una durata che rappresenta l'intervallo di tempo tra i due.
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
Annotazioni
Sottraendo un tipo di data e ora da un tipo di data e ora diverso (ad esempio, sottraendo un date valore da un datetime valore) viene generato un errore. Se è necessario usare tipi di data e ora diversi per determinare una durata, usare le Date.Fromfunzioni , DateTime.FromDateTimeZone.From, o Time.From per modificare in modo esplicito uno dei tipi di data e ora.
Converti da valori compatibili
La Duration.From funzione può convertire valori compatibili in durate. Per altre informazioni, vedere Duration.From(valore).
Usare le durate
Una volta creata una durata in Power Query M, può essere modificata usando varie operazioni e funzioni. Queste funzionalità rendono le durate estremamente versatili per la logica e i calcoli basati sul tempo.
Operazioni aritmetiche
Le durate supportano operazioni aritmetiche standard:
Addizione e sottrazione: aggiungere o sottrarre durate tra loro o da valori di data e ora.
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 SourceNegazione: una durata può essere negata per invertire la direzione.
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
Moltiplicazione e divisione
Le durate possono essere moltiplicate o divise per valori numerici:
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
Questo calcolo è utile per la scalabilità di durate o intervalli di tempo medi.
Confronti
È possibile confrontare le durate usando gli operatori di confronto standard:
let
Source = #duration(1, 0, 0, 0) > #duration(0, 23, 59, 59)
// Result: true
in
Source
Questo calcolo consente l'uso delle durate nella logica condizionale, ad esempio il filtro delle righe in base al tempo trascorso.
Compatibilità del tipo
Le durate sono compatibili con i valori di data e ora nelle espressioni aritmetiche, ma non intercambiabili con essi. Ad esempio, la sottrazione di due valori di data e ora restituisce un durationoggetto , ma l'aggiunta di due valori di data e ora non è valida.
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
Funzioni di durata in M
Power Query M include un set di funzioni predefinite per l'uso delle durate. Queste funzioni consentono la conversione, l'estrazione di componenti e l'aggregazione dei valori di durata, rendendoli strumenti essenziali per le trasformazioni basate sul tempo.
Duration.From(valore)
La Duration.From funzione converte un valore compatibile in una durata. I valori compatibili sono costituiti da un numero interpretato come frazione di un giorno o come rappresentazione testuale di una durata. Passare a Duration.FromText per informazioni sui formati di rappresentazione testuale.
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
Funzioni di accesso ai componenti
Queste funzioni estraggono parti specifiche di una durata:
Duration.Days(<duration>)Restituisce il numero di giorni interi nella durata.
Duration.Hours(<duration>)Restituisce il numero di ore successive all'intero giorno.
Duration.Minutes(<duration>)Restituisce il numero di minuti oltre le ore intere.
Duration.Seconds(<duration>)Restituisce il numero di secondi oltre i minuti interi.
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
Funzioni valore totale
Queste funzioni restituiscono il valore totale di una durata in una singola unità, incluse le parti frazionarie:
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
Normalizzazione della durata
Nella maggior parte dei casi, la durata è costituita da giorni, ore (massimo 23 ore), minuti (massimo 59 minuti) e secondi (massimo 59,9999999 secondi). Tuttavia, in alcuni casi è possibile superare i valori massimi nei parametri di durata. In questo caso, Power Query M normalizza automaticamente questi valori:
- Overflow di secondi in minuti
- Minuti di overflow in ore
- Overflow di ore in giorni
Si supponga, ad esempio, di avere una colonna che fornisce la data e l'ora di inizio per un processo in esecuzione. Inoltre, si dispone di una colonna che mostra quanto tempo è necessario per il completamento del processo, in secondi. Si vuole creare una terza colonna che mostri la data e l'ora di completamento del processo.
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
La tabella seguente è il risultato di questi calcoli.
Pertanto, anche se si dispone solo del numero di secondi in cui è stato eseguito un processo, Power Query M esegue il rollup del valore di durata in minuti, ore e giorni in cui viene valutato il risultato.
Rappresenta settimane, mesi e anni
Poiché le durate sono basate su unità fisse (giorni, ore, minuti, secondi), non esiste un concetto nativo di settimane, mesi o anni, che variano in lunghezza. Un duration tipo in Power Query M è una struttura fissa che non tiene conto delle regole del calendario. Per un intervallo di tempo accurato in mesi o anni, sottrarre una data e un'ora da un'altra invece di usare durate fisse. Questo approccio gestisce correttamente gli anni bisestili, le lunghezze dei mesi variabili e l'ora legale.This approach correctly handle leap years, varying month lengths, and daylight savings time (DST). Si noti tuttavia che un comportamento di data e ora può variare a seconda che la query venga eseguita localmente (in Power Query Desktop) o online (in Power Query Online). Per informazioni dettagliate, passare a Varianti locali, fisse e UTC della data e dell'ora correnti. In generale, evitare di basarsi su durate fisse per i calcoli a lungo termine.