Программирование и ИИ
Язык M в Power Query: как прочитать и безопасно поправить код запроса
Язык M в Power Query — это код шагов запроса для тех, кто собрал запрос кнопками и хочет поправить его вручную. Каждый щелчок в редакторе добавляет строку внутри конструкции let … in. По документации Microsoft, M — функциональный и чувствительный к регистру, как F#[1]. Ниже — примеры кода для Excel, порядок шагов и ошибки, которые ломают запрос после ручной правки.
Запрос собран кнопками и работает, но в шаге фильтра нужен другой порог, а в источнике переименовали столбец. Справка о Power Query в Excel прямо разрешает изменять и писать свои шаги на языке Power Query M в расширенном редакторе[2]. Пересобирать запрос с нуля ради одной цифры незачем — достаточно поправить строку кода.
Путь здесь такой. Сначала поймите задачу: что именно в запросе нельзя сделать кнопкой. Затем выберите инструмент — правку существующего шага вместо нового запроса. Освойте основы: let, in, шаги и слово each, попробуйте прочитать код в тренажёре и примените навык к своему запросу. Главный риск — опечатка в регистре: справочник функций не прощает строчную букву там, где нужна прописная.
Ключевые факты: язык M в Power Query
- Язык M — функциональный язык формул Power Query, чувствительный к регистру и похожий на F#[1].
- Весь код запроса открывается командой Advanced Editor на вкладке View редактора[3].
- Имя шага с пробелом допускается только в форме #"…"[4].
- Шаг с each отличается от формулы листа тем, что применяет условие сразу ко всем строкам таблицы.
- Справка Microsoft разрешает писать собственные шаги на языке Power Query M в Excel для Microsoft 365, Excel 2024, Excel 2021, Excel 2019 и Excel 2016[2].
Что такое язык M в Power Query и как открыть расширенный редактор
Язык M в Power Query описывает каждый шаг запроса текстом внутри конструкции let … in. Справка Microsoft пишет, что любая комбинация данных в Power Query описывается с помощью языка формул Power Query M[1]. Что умеет язык M сверх кнопок, видно в расширенном редакторе: там можно собрать свой шаг, функцию или условие. Код запроса создают кнопки редактора: удалили столбец — появилась строка, поменяли тип — ещё одна. Русская версия справки переводит let expression как «разрешить выражение» — машинный перевод, ключевое слово в коде остаётся let[4].
| Где смотреть | Что видно | Когда удобно |
|---|---|---|
| список Applied steps | названия шагов по порядку | найти, где таблица стала неправильной |
| строка формул | код одного выбранного шага | поправить порог фильтра или имя столбца |
| Advanced Editor | весь запрос целиком | переставить шаги, вставить готовый код |
Чтобы открыть весь код, выберите на ленте редактора вкладку View и команду Advanced Editor — так путь описан в английской справке[3]. В расширенном редакторе английская справка показывает весь существующий код, индикатор синтаксических ошибок и кнопки Done и Cancel[3].
Редактор и язык M в Power Query встроены в Excel для Microsoft 365, Excel 2024, Excel 2021, Excel 2019 и Excel 2016[2]. Сам Power Query доступен в Excel для Windows, Excel для Mac и Excel в Интернете[2]. В Google Таблицах языка M нет: документация перечисляет среди сред Power Query книги Excel, Power BI, Analysis Services и онлайн-службы Microsoft[1]. Если запросов в книге ещё нет, начните с обзора Power Query и первого запроса из таблицы: к коду имеет смысл переходить, когда запрос уже собран.
Разобравшись с тем, где лежит код, переходим к его устройству — конструкции let … in.
Как читать запрос на языке M: let, in и шаги по порядку
Запрос на языке M состоит из шагов-переменных после let и результата после in[4]. Каждый шаг — имя, знак равенства и выражение, которое обычно ссылается на предыдущий шаг. Вот запрос с маленькой таблицей заказов и фильтром крупных сумм:
let
Заказы = Table.FromRecords({
[Ресторан = "Бриз", Сумма = 54000],
[Ресторан = "Тарантино", Сумма = 8600],
[Ресторан = "Сакура", Сумма = 31000]
}),
Крупные = Table.SelectRows(Заказы, each [Сумма] > 10000)
in
Крупные
- Найдите слово in и имя после него — это шаг, который станет результатом.
- Прочитайте код шагов после let: «Крупные» берёт таблицу «Заказы» и возвращает строки, где сумма больше порога.
- Поменяйте порог в коде шага и закройте редактор кнопкой Done.
Имя шага с пробелом записывают только в форме #"имя идентификатора"[4] — так выглядят шаги, которые создают кнопки русского интерфейса. Между шагами стоит запятая, после последнего шага перед in её нет.
Порядок строк внутри let не равен порядку вычисления. Выражения let вычисляются отложенно, только по мере необходимости[5]: шаг, от которого результат не зависит, просто не выполнится.
Прочитайте такой код в тренажёре: урок покажет шаги let … in и попросит найти ошибку в условии.
Однако чтение кода — половина дела: функции и условия устроены иначе, чем формулы листа.
Функции, each и if: чем код M отличается от формул листа
Функции языка M работают с целыми таблицами, различают регистр и не похожи на формулы листа. Имена строятся по схеме «Категория.Действие»: Table.SelectRows, Text.Proper. Если набрать имя функции не тем регистром, строка кода не выполнится: справка называет язык чувствительным к регистру[1].
| Вопрос | Формула листа | Код M |
|---|---|---|
| где записывают | в ячейке | в шаге запроса или в Advanced Editor |
| условие | функция ЕСЛИ | выражение if … then … else |
| обработка строк | формулу протягивают вниз | each применяет условие к каждой строке |
| когда пересчитывается | при изменении ячеек | при обновлении запроса |
Функция Table.SelectRows принимает таблицу и условие-функцию и возвращает строки, которые ему соответствуют[6]; слово each в примере выше и есть такое условие. Выражение if 2 > 1 then 2 + 2 else 1 + 1 по справке возвращает 4[7], потому что условие истинно. В настраиваемом столбце то же условие пишут для каждой строки:
if [Сумма] >= 30000 then "крупный" else "обычный"
Свою функцию объявляют стрелкой: тело функции следует за символом =>, например (x, y) => x + y[8]. Справка Microsoft перечисляет десять примитивных типов значений — от Binary и Даты до Текста и Времени[4].
Остаётся понять, когда в код лучше не лезть вовсе.
Когда язык M не подойдёт
Язык M в Power Query не нужен, если задачу закрывают кнопки редактора или нужно оформление. Код запроса возвращает только таблицу данных, поэтому вид листа и подсветку ячеек решают другие инструменты.
- Если нужное действие есть на ленте редактора — фильтр, тип, удаление столбца, — нажмите кнопку: шаг запишется сам, без риска опечатки.
- Когда заказы меньше порога надо подсветить красным на листе, нужен не код, а условное форматирование.
- При задаче вроде рассылки писем или печати листов по списку нужен VBA и макросы для действий с файлами, а не запрос.
- Если результат должен меняться сразу при вводе числа в ячейку, пишите формулу листа: запрос обновляется только по команде.
Перед ручной правкой скопируйте код из Advanced Editor в текстовый файл — так легко вернуть рабочую версию. Индикатор синтаксических ошибок в окне редактора[3] ловит пропущенную запятую, но не неверный порог: результат всё равно проверяйте на листе. Соседние темы собраны среди всех уроков тренажёра по программированию в Excel.
Частые вопросы
Где в Excel найти расширенный редактор Power Query?
Расширенный редактор открывается внутри редактора Power Query: английская справка называет путь View → Advanced Editor[3]. В окне будет весь код запроса, а индикатор внизу покажет, есть ли синтаксические ошибки.
Чем язык M отличается от формул Excel?
Язык M работает с таблицами и столбцами целиком, а формулы листа — с ячейками. Шаги пересчитываются при обновлении запроса, и регистр букв в именах функций важен[1].
Можно ли писать код M без знания программирования?
Да, писать такой код можно без опыта программирования, если запрос собран кнопками, а правка точечная: порог фильтра, имя столбца, тип. С нуля запрос пишут редко, а справка описывает let как набор именованных значений[4].
Почему запрос перестал работать после правки кода?
Запрос ломается чаще всего из-за регистра в имени функции или из-за запятой: регистр в именах важен[1], а между шагами нужна запятая. Ещё одна причина — переименованный шаг, на который ссылается следующий шаг.
Нужен ли язык M, если есть VBA?
Язык M в Power Query готовит данные внутри запроса и не трогает оформление листа или файлы. Для действий с самим Excel — рассылки, печати, кнопок — подходит VBA, а для очистки и объединения таблиц удобнее шаги запроса.
Источники
- [1] Microsoft, справка «Язык формул Power Query M», 2026
- [2] Microsoft, справка «Сведения о Power Query в Excel», 2026
- [3] Microsoft, справка «Use Power Query to transform data» (английская версия), 2026
- [4] Microsoft, справка «Выражения, значения и разрешить выражение», 2026
- [5] Microsoft, справка «Общие сведения о языке формул Power Query M», 2026
- [6] Microsoft, справка «Table.SelectRows» (английская версия), 2026
- [7] Microsoft, справка «Expressions, values, and let expression» (английская версия), 2026
- [8] Microsoft, справка «Основные сведения о функциях Power Query M», 2026