Файлы к уроку:
Ссылки:
Создание записи
Запись позволяет в одном объекте хранить несколько значений.
// Пример записи
[Band = "Iron Maiden",
Album = "A Matter of Life and Death",
Year = 2006]
Ссылаемся на строку таблицы
Запись — это строка таблицы. Если мы сошлемся на таблицу и укажем индекс строки, то получим значения этой строки в виде записи.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
ref = tab{1}
in
ref
Точная ссылка на строку таблицы
Сошлемся на строку таблицы, в которой значения в столбце Year = 2015.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
ref = tab{[Year=2015]}
in
ref
Пустая запись
Запись может быть и пустой.
[]
Получить конкретное значение одного из полей таблицы
Получим значение из столбца Album из строки с индексом 2.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
val = tab[Album]{2}
in
val
Получим значение из столбца Year для строки, в которой поле Album = «The Book of Souls».
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
val = tab{[Album="The Book of Souls"]}[Year]
in
val
Получим значение поля Album для строки с индексом 2.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
val = tab{2}[Album]
in
val
Если сослаться на несуществующее поле, то вернется ошибка.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
ref = tab{[Album="Dance of Death"]}
in
ref
Если же в ссылке дописать символ «?», то вместо ошибки будет возвращено значение null.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
ref = tab{[Album="Dance of Death"]}?
in
ref
Получить только значения некоторых полей записи
Получим только значения полей Band и Album из строки с индексом 0.
let
tab = #table({"Band", "Album", "Year"},
{{"Iron Maiden", "A Matter of Life and Death", 2006},
{"Iron Maiden", "The Final Frontier", 2010},
{"Iron Maiden", "The Book of Souls", 2015},
{"Iron Maiden", "Senjutsu", 2021}}),
ref = tab{0}[[Band], [Album]]
in
ref
Ссылки на поля записи внутри записи
Внутри одно записи поле может ссылаться на другое поле.
[Band = "Iron Maiden",
Album = "Dance of Death",
Year = 2003,
Full_Name = Band & ", " & Album & ", " & Text.From(Year)]
Сравнение записей
Если сравнить 2 одинаковых записи, то вернется значение true. При этом порядок полей не важен.
Если сравнить 2 записи с разными именами полей, то вернется false. Регистр имеет значение.
Если сравнить 2 записи с одинаковыми названиями полей, но разными значениями, то вернется false.
#table({"Сравнение", "Результат"},
{{"[x=1, y=2] = [x=1, y=2]", [x=1, y=2] = [x=1, y=2]}, // true
{"[x=1, y=2] = [y=2, x=1]", [x=1, y=2] = [y=2, x=1]}, // true
{"[x=1] = [X=1]", [x=1] = [X=1]}, // false
{"[x=1] = [x=2]", [x=1] = [x=2]}, // false
{"[x=1] <> [X=1]", [x=1] <> [X=1]}}) // true
Комбинирование значений
Если комбинировать 2 записи с разными полями, то получится одна большая запись, содержащая все поля этих записей.
let
rec_1 = [x = 1],
rec_2 = [y = 2],
combine = rec_1 & rec_2
in
combine
Замена значений в записи
Если комбинировать 2 записи с одинаковыми названиями полей, но разными значениями, то значения полей первой записи будут заменены на значения полей второй записи.
let
rec_1 = [x = 1],
rec_2 = [x = 50],
combine = rec_1 & rec_2
in
combine
Курс по Языку М
Номер урока | Урок | Описание |
---|---|---|
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. |