Шаги преобразования и язык M
Знакомимся с логикой Power Query: цепочка шагов и язык M за кулисами.
Power Query — инструмент подготовки данных, который записывает каждое действие как шаг и хранит всю цепочку как код на языке M.
Зачем чистить данные
Сырые данные почти всегда «грязные»: лишние столбцы, пустые строки, числа-как-текст, кривые даты, дубли. Если загрузить это в модель как есть, расчёты будут врать. Power Query — место, где данные приводят в порядок один раз, после чего очистка повторяется автоматически при каждом обновлении.
Применённые шаги
Главная идея Power Query — повторяемость. Каждое ваше действие (удалить столбец, отфильтровать строки, сменить тип) записывается в панель «Применённые шаги» (Applied Steps) справа. Это как макрос, но наглядный: вы видите всю историю и можете вернуться к любому шагу, отредактировать или удалить его. Когда придут новые данные, Power BI прогонит ту же цепочку шагов заново.
Источник
└─ Повышенные заголовки
└─ Изменённый тип
└─ Удалённые столбцы
└─ Отфильтрованные строки
└─ ✓ результат в модельЯзык M
Под капотом каждый шаг — это строка кода на функциональном языке M (Power Query Formula Language). Откройте «Расширенный редактор», и увидите всю цепочку как программу. Читать M полезно даже если вы не пишете его руками:
let
Источник = Csv.Document(File.Contents("sales.csv"), [Delimiter=";"]),
Заголовки = Table.PromoteHeaders(Источник),
Типы = Table.TransformColumnTypes(Заголовки, {{"Сумма", type number}}),
Фильтр = Table.SelectRows(Типы, each [Сумма] > 0)
in
ФильтрВидно главное свойство M: каждый шаг получает результат предыдущего (по имени) и возвращает новую таблицу. Конструкция let ... in ... объявляет шаги и указывает, какой из них вернуть.
M против DAX
Новички путают два языка Power BI. Запомните разделение труда:
| M (Power Query) | DAX | |
| Когда работает | при загрузке/обновлении | при расчёте визуала |
| Задача | подготовить таблицы | посчитать показатели |
| Где пишут | редактор Power Query | модель/отчёт |
| Стиль | пошаговый, функциональный | формулы как в Excel |
Как работает под капотом
Когда Power BI обновляет данные, он не «помнит» результат прошлой очистки — он заново выполняет M-программу запроса от первого шага до последнего. Многие источники поддерживают query folding: Power Query умеет «свернуть» цепочку шагов обратно в один SQL-запрос и переложить работу на базу данных. Тогда фильтрация и группировка происходят на сервере, а в Power BI приходит уже готовый результат — это резко ускоряет обновление.
Частые ошибки
- Чистить данные в самой модели/визуале. Подготовка — задача Power Query; DAX для этого не предназначен.
- Удалять шаг из середины, ломая последующие. Шаги ссылаются друг на друга по имени — удаление может оборвать цепочку.
- Убивать query folding. Некоторые операции «ломают сворачивание», и тогда вся очистка считается локально и медленно.
Итог
- Power Query записывает действия как повторяемые шаги — основу автоматического обновления.
- Каждый шаг — код на языке M; цепочку видно в «Расширенном редакторе».
- M готовит данные при загрузке, DAX считает показатели при отображении — не путайте их роли.