power query разница дат в днях
Power Query. Погружение в М. Дата, время длительность
Создать значение с типом данных #date
Создаем значение #date.
Дата может быть в далеком будущем.
Дата может быть только после Рождества Христова. Дата до РХ вернет ошибку.
Создать значение с типом данных #time
Создать значение #time.
Секунды дробятся с точностью 100 наносекунд, т. е. до 7 знаков после запятой (точки).
Полночь
Следующий код выводит на экран значение 0:00:00.
Следующий код тоже выводит на экран значение 0:00:00.
Если мы сравним эти значения, то в результате получим FALSE, т. е. PQ не считает эти значения равными.
Преобразуем оба этих значения в число. Первая формула вернет 0, а вторая 1.
#datetime
Создадим значение с типом данных datetime.
Если объединить символом & значения #date и #time, то в результате получится значение #datetime. Порядок слагаемых не имеет значения.
#datetimezone
Значение datetimezone — это datetime и еще количество часов и минут относительно UTC. Если последние 2 числа — это 3 и 0, то это значит +3 часа 0 минут ко времени UTC.
#duration (длительность)
Создаем значение с типом данных длительность.
Длительность может быть отрицательной.
Одну и ту же длительность можно получить разными способами.
Параметры #duration могут быть с разным знаком. Результатом будет сложение всех параметров.
Преобразование типов данных
Преобразовать #date в #datetime. Время получится 00:00:00.
Превратим #datetime просто в #date или просто #time.
Превратить #date или #datetime в #datetimezone
При преобразовании #date или #datetime в #datetimezone в результате получим #datetimezone, в котором 2 последних параметра будут браться из настроек системы.
Превратим #datetimezone в #datetime. При преобразовании берется временная зона из настроек системы.
Сложение и вычитание
#duration можно прибавлять к/вычитать из #date, #time, #datetime, #datetimezone, #duration.
#date можно вычитать из #date, #time из #time, #datetime из #datetime, #datetimezone из #datetimezone.
Умножение и деление
Значение #duration можно умножать и делить на число.
Преобразовать в текст с помощью Text.From
Функция Text.From преобразовывает #date, #time, #datetime, #datetimezone, #duration в текст.
Преобразование в текст с указанием формата с помощью x.ToText
Функции x.ToText преобразовывают #date, #time, #datetime, #datetimezone, #duration с возможностью указать формат и язык. Формула Date.ToText(#date(2021, 9, 1), «d MMMM yy», «en-US») превратит дату 01.09.2021 в 1 September 21.
OLE Date
OLE Date — это количество дней, которое прошло от начальной даты. Формула Date.From(0) вернет начальную дату в Power Query. Формула Date.From(20) вернет дату, которая отстоит на 20 дней от начальной даты.
Преобразовать #date, #time, #datetime, #datetimezone, #duration в OLE Date.
Функции DateAdd, DateDiff и TimeZoneOffset в Power Apps
Добавление значения даты и времени или поиск разницы в значениях даты и времени, а также преобразование между местным временем и временем в формате UTC.
Описание
Функция DateAdd добавляет указанное число единиц измерения к значению даты и времени. Результатом является новое значение даты и времени. Можно также вычесть число единиц измерения из значения даты и времени, указав отрицательное значение.
Функция DateDiff возвращает разницу между двумя значениями даты и времени. Результатом является целое число единиц измерения.
Возможные единицы измерения, используемые в обеих функциях: Milliseconds, Seconds, Minutes, Hours, Days, Months, Quarters или Years. По умолчанию обе функции в качестве единиц используют Days.
Функция TimeZoneOffset возвращает число минут между местным временем пользователя и временем в формате UTC.
Можно совмещать функции DateAdd и TimeZoneOffset, чтобы выполнять преобразование между местным временем пользователя и временем в формате UTC. Добавляя результат TimeZoneOffset, можно преобразовать местное время в формат UTC, а вычитая его (добавляя отрицательное значение), можно преобразовать время в формате UTC в местное время.
Синтаксис
DateAdd( DateTime, Addition [, Units ] )
DateDiff( StartDateTime, EndDateTime [, Units ] )
TimeZoneOffset( [ DateTime ] )
Примеры
Во всех примерах предполагается, что текущие дата и время — 13:02 15 июля 2013 года.
Простой пример для функции DateAdd
Формула | Описание | Результат |
---|---|---|
Text( DateAdd( Now(), 3 ), «dd-mm-yyyy hh:mm» ) | Добавляет три дня (единицы измерения по умолчанию) к текущему значению даты и времени. | «18-07-2013 13:02» |
Text( DateAdd( Now(), 4, Hours ), «dd-mm-yyyy hh:mm» ) | Добавляет четыре часа к текущему значению даты и времени. | «15-07-2013 17:02» |
Text( DateAdd( Today(), 1, Months ), «dd-mm-yyyy hh:mm» ) | Добавляет один месяц к текущему значению даты без указания времени, так как Today не возвращает составляющую времени. | «15-08-2013 00:00» |
Text( DateAdd( Now(), ‑30, Minutes ), «dd-mm-yyyy hh:mm» ) | Вычитает 30 минут из текущего значения даты и времени. | «15-07-2013 12:32» |
Простой пример для функции DateDiff
Формула | Описание | Результат |
---|---|---|
DateDiff( Now(), DateValue(«1/1/2014») ) | Возвращает разницу между двумя значениями в днях, являющихся единицами измерения по умолчанию. | 170 |
DateDiff( Now(), DateValue(«1/1/2014»), Months ) | Возвращает разницу между двумя значениями в месяцах. | 6 |
DateDiff( Now(), Today(), Minutes ) | Возвращает разницу между текущим значением даты и времени и текущей датой (без указания времени) в минутах. Так как значение Now следует после значения Today, то результат будет отрицательным. | -782 |
Разница дат с дробными результатами
Функция DateDiff возвращает только целое число вычитаемых единиц, а точность задается в указанных единицах. Чтобы вычислить разницу с более высокой точностью, используйте меньшие единицы и соответствующим образом преобразуйте результат, как в примерах ниже.
Формула | Описание | Результат |
---|---|---|
DateDiff( TimeValue(«09:45:00»), TimeValue(«10:15:36»), Hours ) | Минуты/секунды игнорируются, разница основана на времени с точностью до часа. | 1 |
DateDiff( TimeValue(«09:45:00»), TimeValue(«10:15:36»), Minutes )/60 | Минуты используются для разницы, а результат делится на 60, чтобы получить разницу в часах. | 0.5 |
DateDiff( TimeValue(«09:45:00»), TimeValue(«10:15:36»), Seconds )/3600 | Минуты и секунды используются для разницы, а результат делится на 3600, чтобы получить разницу в часах. | 0.51 |
Преобразование в формат UTC
Чтобы выполнить преобразование в формат UTC, добавьте значение TimeZoneOffset для заданного времени.
Например, представьте, что сейчас 13:02 15 июля 2013 года по летнему тихоокеанскому времени США (UTC-7). Чтобы определить текущее время в формате UTC, используйте следующую команду:
По умолчанию TimeZoneOffset вычисляется для текущего времени, поэтому его не требуется передавать как аргумент.
Чтобы увидеть результат, используйте функцию Text в формате dd-mm-yyyy hh:mm. Она вернет 15-07-2013 20:02.
Преобразование из формата UTC
Чтобы преобразовать время из формата UTC в местное время, следует вычесть значение TimeZoneOffset (то есть добавить отрицательное значение) из заданного времени.
Для примера предположим, что значение даты и времени в формате UTC, 20:02 15 июля 2013 года, хранится в переменной StartTime. Чтобы настроить время в соответствии с текущим часовым поясом пользователя, используйте следующую команду:
Обратите внимание, на знак минус перед TimeZoneOffset, который позволяет вычесть смещение, а не добавить его.
Чтобы увидеть результат, используйте функцию Text в формате dd-mm-yyyy hh:mm. Она вернет 15-07-2013 13:02, если вы находитесь в часовом поясе тихоокеанского времени США (лето).
Функции для работы с датами и временем
В этой статье
Эти функции позволяют создавать значения параметров и zone и управлять ими.
Дата и время
Расчет разницы между датами из одной колонки в Power Query
Сообщений: 24 Регистрация: 27.05.2020
У моей модели в PBI есть одна колонка с датами, даты расположены хаотично, но это не принципиально.
В Power Query необходимо создать пользовательскую колонку, в которой будет рассчитано количество месяцев между минимальной и максимальной датой.
Как это сделать? Желательно в двух вариантах:
1. в котором не нужно будет создавать дубликат столбца с датами, т.е. минимальная и максимальная дата определяется только из одного столбца
2. с созданием дубликата столбца дат и поиска в одном столбце минимальную дату, в дубликате искать максимальную дату и в итоге на разнице дат, определять количество месяцев.
Сообщений: 6143 Регистрация: 22.02.2017
Цитата |
---|
Георгий Шкуро написал: даты расположены хаотично |
Умею писать хаотичный код, но не уверен что вам это поможет.
Вы бы в файлике хоть примерно структуру источника отобразили бы. А так я даже не знаю чем помочь.
Изменено: PooHkrd — 27.05.2020 17:35:21
Вот горшок пустой, он предмет простой…
Сообщений: 254 Регистрация: 03.12.2018
Георгий Шкуро, грубо:
Код |
---|
add = Table.AddColumn(YourTable, «diff», each let a = YourTable[sColumn] in Number.RoundDown(Number.From((List.Max(a) — List.Min(a))/30))) |
Георгий Шкуро Сообщений: 24 Регистрация: 27.05.2020
Изменено: Георгий Шкуро — 27.05.2020 23:30:44 Сообщений: 24 Регистрация: 27.05.2020 Попробовал, что-то пошло не так. Сообщений: 11749 Регистрация: 22.12.2012 Доброе время суток.
|
PooHkrd Сообщений: 6143 Регистрация: 22.02.2017
|