Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Длительность в Power Query M представляет разницу между двумя точками времени, выраженными в днях, часах, минутах и секундах. Вы вычисляете время взаимодействия с клиентом, фильтрацию записей на основе истекшего времени или создание динамической логики на основе времени, длительность необходима для создания надежных и интеллектуальных моделей данных.
В этой статье рассматривается структура, создание и манипуляция длительностью в Power Query M. В ней содержатся практические примеры и советы по общим папкам, которые помогут эффективно использовать длительность в рабочих процессах данных.
Создание длительности
Длительность определяется функцией #duration(<days>, <hours>, <minutes>, <seconds>) . Например, #duration(2, 3, 0, 0) представляет длительность 2 дня и 3 часа. Power Query M предоставляет несколько способов создания длительности в зависимости от контекста и требуемого уровня точности.
Используйте функцию #duration
Самый прямой способ создания длительности — с синтаксисом #duration(<days>, <hours>, <minutes>, <seconds>) . Каждый аргумент должен быть числом, а результатом является значение длительности.
#duration(2, 5, 30, 0) // 2 days, 5 hours, 30 minutes
Эта функция также поддерживает дробные секунды:
#duration(0, 0, 0, 1.75) // 1.75 seconds
Создание длительности из значений даты и времени
Длительность также можно создать, вычитая одно значение даты и времени из другого. Результатом является длительность, представляющая интервал времени между двумя.
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
Замечание
Вычитание одного типа даты и времени из другого типа даты и времени (например, вычитание date значения из datetime значения) приводит к ошибке. Если необходимо использовать различные типы дат и времени для определения длительности, использования Date.FromDateTime.Fromфункций DateTimeZone.Fromили Time.From функций для явного изменения одного из типов даты и времени.
Преобразование из совместимых значений
Функция Duration.From может преобразовывать совместимые значения в длительности. Дополнительные сведения см. в <
Работа с длительностью
После создания длительности в Power Query M его можно управлять различными операциями и функциями. Эти возможности позволяют обеспечить высокую гибкость длительности для логики и вычислений на основе времени.
Арифметические операции
Длительность поддерживает стандартные арифметические операции:
Добавление и вычитание: добавление или вычитание длительности в другую или из значений даты и времени.
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Отрицание: длительность может быть отрицаема, чтобы изменить направление.
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
Умножение и деление
Длительность может быть умножена или разделена числовыми значениями:
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
Это вычисление полезно для масштабирования длительности или усреднения интервалов времени.
Сравнения
Длительность можно сравнить с помощью стандартных операторов сравнения:
let
Source = #duration(1, 0, 0, 0) > #duration(0, 23, 59, 59)
// Result: true
in
Source
Это позволяет использовать длительность в условной логике, например фильтрацию строк на основе истекшего времени.
Совместимость типов
Длительность совместима со значениями даты и времени в арифметических выражениях, но не взаимозаменяемых с ними. Например, вычитание двух значений даты и времени дает durationзначение, но добавление двух значений даты и времени недопустимо.
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
Power Query M включает набор встроенных функций для работы с длительностью. Эти функции позволяют преобразовывание, извлечение компонентов и агрегирование значений длительности, что делает их важными инструментами для преобразований на основе времени.
Duration.From(значение)
Функция Duration.From преобразует совместимое значение в длительность. Совместимые значения состоят из числа, интерпретированного как доля дня или текстового представления длительности. Duration.FromText Перейдите к сведениям о текстовых форматах представления.
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
Методы доступа к компонентам
Эти функции извлекают определенные части длительности:
Duration.Days(<duration>)Возвращает количество целых дней в течение длительности.
Duration.Hours(<duration>)Возвращает количество часов, превышающее целые дни.
Duration.Minutes(<duration>)Возвращает количество минут, превышающее целые часы.
Duration.Seconds(<duration>)Возвращает количество секунд за все минуты.
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
Общие функции значений
Эти функции возвращают общее значение длительности в одной единице, включая дробные части:
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
Нормализация длительности
В большинстве случаев длительность состоит из дней, часов (максимум 23 часа), минут (максимум 59 минут) и секунд (максимум 59,99999999 секунд). Однако в некоторых случаях максимальные значения в параметрах длительности могут превышаться. В этом случае Power Query M автоматически нормализует следующие значения:
- Переполнение секунд в минутах
- Время переполнения минут в часах
- Переполнение часов в дни
Например, предположим, что у вас есть столбец, предоставляющий дату начала и время выполнения процесса. Кроме того, у вас есть столбец, показывающий, сколько времени потребовалось для завершения процесса в секундах. Вы хотите создать третий столбец, показывающий дату и время завершения процесса.
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
Следующая таблица является результатом этих вычислений.
Таким образом, несмотря на то, что у вас было только количество секунд, в течение которого произошел процесс, Power Query M свертит значение длительности в минуты, часы и дни, когда результат вычисляется.
Представление недель, месяцев и лет
Так как длительность основана на фиксированных единицах (дни, часы, минуты, секунды), нет собственной концепции недель, месяцев или лет, которые зависят от длины.
duration Тип в Power Query M — это фиксированная структура, которая не учитывает правила календаря. Для точной длительности в течение нескольких месяцев или лет вычитайте одну дату и время из другого вместо использования фиксированных длительности. Этот подход правильно обрабатывает високосные годы, различные длины месяца и летнее время (DST). Однако также обратите внимание, что некоторые действия даты и времени могут отличаться в зависимости от того, выполняется ли запрос локально (в Power Query Desktop) или в Сети (в Power Query Online). Дополнительные сведения см. в локальных, фиксированных и UTC-вариантах текущей даты и времени. Как правило, избегайте использования фиксированной длительности для долгосрочных вычислений.