Файлы к уроку:
Ссылки:
Создать значение с типом данных #date
Создаем значение #date.
// Создать дату
#date(1917, 11, 7)
Дата может быть в далеком будущем.
// Дата может быть из далекого будущего
#date(9999, 12, 7)
Дата может быть только после Рождества Христова. Дата до РХ вернет ошибку.
// Дата может быть только после Рождества Христова
{#date(0, 12, 7),
#date(-5, 12, 7)}
Создать значение с типом данных #time
Создать значение #time.
// Создать время
#time(23, 58, 0)
Секунды дробятся с точностью 100 наносекунд, т. е. до 7 знаков после запятой (точки).
// Секунды дробятся с точностью 100 наносекунд
#time(23, 58, 0.5)
Полночь
Следующий код выводит на экран значение 0:00:00.
// Полночь
#time(0, 0, 0)
Следующий код тоже выводит на экран значение 0:00:00.
// Второй способ задать полночь
#time(24, 0, 0)
Если мы сравним эти значения, то в результате получим FALSE, т. е. PQ не считает эти значения равными.
// Два вида полночи не равны
#time(24, 0, 0) = #time(0, 0, 0)
Преобразуем оба этих значения в число. Первая формула вернет 0, а вторая 1.
// Преобразуем каждый вид полночи в число
#table({"0:0:0", "24:0:0"},
{ {Number.From(#time(0, 0, 0)),
Number.From(#time(24, 0, 0))} })
#datetime
Создадим значение с типом данных datetime.
// Создать дату и время
#datetime(1984, 8, 6, 23, 58, 0)
Если объединить символом & значения #date и #time, то в результате получится значение #datetime. Порядок слагаемых не имеет значения.
// Оператором & можно из date и time создать datetime
#table({"col1", "col2"},
{ {#date(1984, 8, 6) & #time(23, 58, 0),
#time(23, 58, 0) & #date(1984, 8, 6)} })
#datetimezone
Значение datetimezone — это datetime и еще количество часов и минут относительно UTC. Если последние 2 числа — это 3 и 0, то это значит +3 часа 0 минут ко времени UTC.
// datetimezone - это datetime с указанием разницы со временем UTC
#datetimezone(1984, 8, 6, 23, 58, 0, -6, -30)
#duration (длительность)
Создаем значение с типом данных длительность.
// Создать длительность
#duration(3, 6, 15, 30.5)
Длительность может быть отрицательной.
// Длительность может быть отрицательной
#table({"col1", "col2"},
{ {#duration(-3, -6, -15, -30.5),
-#duration(3, 6, 15, 30.5)} })
Одну и ту же длительность можно получить разными способами.
// Разные способы указать одну и ту же длительность
#table({"col1", "col2", "col3"},
{ {#duration(2, 0, 0, 0),
#duration(0, 48, 0, 0),
#duration(0, 0, 48*60, 0)} })
Параметры #duration могут быть с разным знаком. Результатом будет сложение всех параметров.
// Параметры могут быть с разными знаками
#duration(3, -12, 0, 0)
Преобразование типов данных
Преобразовать #date в #datetime. Время получится 00:00:00.
// Преобразовать дату в datetime
DateTime.From(#date(1917, 11, 7))
Превратим #datetime просто в #date или просто #time.
// Извлечь date или time из datetime
#table({"col1", "col2"},
{ {Date.From(#datetime(1917, 11, 7, 12, 30, 0)),
Time.From(#datetime(1917, 11, 7, 12, 30, 0))} })
Превратить #date или #datetime в #datetimezone
При преобразовании #date или #datetime в #datetimezone в результате получим #datetimezone, в котором 2 последних параметра будут браться из настроек системы.
// Преобразовать в datetimezone. Зона определяется настройками системы
#table({"col1", "col2"},
{ {DateTimeZone.From(#date(1917, 11, 7)),
DateTimeZone.From(#datetime(1917, 11, 7, 12, 30, 0))} })
Превратим #datetimezone в #datetime. При преобразовании берется временная зона из настроек системы.
// При преобразовании берется системное время
DateTime.From(#datetimezone(1917, 11, 7, 12, 30, 0, 0, 0))
Сложение и вычитание
#duration можно прибавлять к/вычитать из #date, #time, #datetime, #datetimezone, #duration.
// Прибавляем и вычитаем #duration
#table({"date", "time", "datetime", "datetimezone", "duration"},
{ {#date(2021, 9, 1) + #duration(1, 12, 0, 0),
#time(23,58,00) + #duration(0, 0, 2, 0),
#datetime(2021, 9, 1, 23, 58, 0) + #duration(1, 1, 2, 0),
#datetimezone(2021, 9, 1, 23, 58, 0, 3, 0) + #duration(1, 0, 0, 0),
#duration(1, 12, 0, 0) + #duration(0, 12, 0, 0)},
{#date(2021, 9, 1) - #duration(1, 12, 0, 0),
#time(23,58,00) - #duration(0, 0, 2, 0),
#datetime(2021, 9, 1, 23, 58, 0) - #duration(1, 1, 2, 0),
#datetimezone(2021, 9, 1, 23, 58, 0, 3, 0) - #duration(1, 0, 0, 0),
#duration(1, 12, 0, 0) - #duration(0, 12, 0, 0)} })
#date можно вычитать из #date, #time из #time, #datetime из #datetime, #datetimezone из #datetimezone.
// Вычитать можно date из date, time из time и т. д.
// Результатом будет duration
#table({"date", "time", "datetime", "datetimezone"},
{ {#date(2021, 9, 1) - #date(2021, 8, 1),
#time(23,58,00) - #time(0, 2, 30),
#datetime(2021, 9, 1, 23, 58, 0) - #datetime(2021, 8, 1, 0, 2, 30),
#datetimezone(2021, 9, 1, 23, 58, 0, 3, 0) - #datetimezone(2021, 8, 1, 0, 2, 30, 3, 0)} })
Умножение и деление
Значение #duration можно умножать и делить на число.
// duration можно умножать и делить
#table({"mult", "div"},
{ {#duration(1, 0, 0, 0) * 3,
#duration(1, 0, 0, 0) / 3} })
Преобразовать в текст с помощью Text.From
Функция Text.From преобразовывает #date, #time, #datetime, #datetimezone, #duration в текст.
// Преобразовать в текст
#table({"date", "time", "datetime", "datetimezone", "duration"},
{ {Text.From(#date(2021, 9, 1)),
Text.From(#time(12, 30, 0)),
Text.From(#datetime(2021, 9, 1, 12, 30, 0)),
Text.From(#datetimezone(2021, 9, 1, 12, 30, 0, 3, 0)),
Text.From(#duration(30, 12, 0, 0))} })
Преобразование в текст с указанием формата с помощью 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.
// Преобразовать в текст с указанием формата
#table({"date", "time", "datetime", "datetimezone", "duration"},
{ {Date.ToText(#date(2021, 9, 1), "d MMMM yy", "en-US"),
Time.ToText(#time(12, 30, 0), "hh mm s"),
DateTime.ToText(#datetime(2021, 9, 1, 12, 30, 0), "dd MMMM yyyy hh:mm:ss", "en-UK"),
DateTimeZone.ToText(#datetimezone(2021, 9, 1, 12, 30, 0, 3, 0), "dd MMMM yyyy hh:mm:ss zz", "en-UK"),
Duration.ToText(#duration(30, 12, 0, 0), "dd, hh, mm, ss")} })
OLE Date
OLE Date — это количество дней, которое прошло от начальной даты. Формула Date.From(0) вернет начальную дату в Power Query. Формула Date.From(20) вернет дату, которая отстоит на 20 дней от начальной даты.
// Получить date, time, datetime, duration из OLE
{Date.From(0),
Date.From(20),
DateTime.From(20.5),
Time.From(0.5),
Time.From(0),
Time.From(1),
Duration.From(10.555)}
Преобразовать #date, #time, #datetime, #datetimezone, #duration в OLE Date.
// Получить OLE из date, datetime и т. д.
{Number.From(#date(2021, 9, 1)),
Number.From(#datetime(2021, 9, 1, 12, 30, 0)),
Number.From(#datetimezone(2021, 9, 1, 12, 30, 0, 5, 0)),
Number.From(#time(12, 0, 0)),
Number.From(#duration(10, 12, 0, 0))}
Курс по Языку М
Номер урока | Урок | Описание |
---|---|---|
1 | Power Query Язык М №1. Простые выражения, let | Что такое let, одна или несколько переменных в in, вложенные блоки let. |
2 | Power Query Язык М №2. Создание функций М | Функции без выражения let, функции внутри выражения let. |
3 | Power Query Язык М №3. Создание функций М 2 | Функция как параметр функции, ключевое слово each. |
4 | Power Query Язык М №4. Переменные и идентификаторы | Идентификаторы с кавычками и без, допустимые и недопустимые идентификаторы. |
5 | Power Query Язык М №5. Текстовый тип данных | Особенности работы с текстовым типом данных. |
6 | Power Query Язык М №6. Числовой тип данных (Ввод, Сравнение, Точность, Бесконечность) | В этом уроке мы узнаем, что из себя представляет числовой тип данных. |
7 | Power Query Язык М №7. Дата, время, длительность и прочее(date, datetime, time, datetimezone) | Как создать значение с типом данных #date, #time, #datetime, #datetimezone, #duration. Преобразование значений одного типа данных в другой, арифметические операции, тонкости. |
8 | Power Query Язык М №8. Типы данных Logical, Null | Изучим логический тип данных и значение null. |
9 | Power Query Язык М №9. Объект Record / Запись | Что такое объект Record / Запись. Как создать запись, как сослаться на значения записи, как сравнивать записи, как объединять записи, как изменять записи. |
10 | Power Query Язык М №10. Объект List / Список | Зачем нужны списки, создание списков, сравнение списков, функции для работы со списками. |
11 | Power Query Язык М №11. Объект Table / Таблица | Получить строку, столбец. Объединение таблиц по вертикали. |
12 | Power Query Язык М №12. Как PQ работает с таблицами | В этом уроке вы узнаете как думает Power Query. |
13 | Power Query Язык М №13. Ключевое слово each | Зачем нужно ключевое слово each. |