Power Query как рецепт: убираем ручную магию из отчёта
В книге «Продажи_финал_точно.xlsx» аналитик удаляет две верхние строки, заменяет запятые в суммах и протягивает формулы. Через неделю он делает то же самое — чуть иначе.
Power Query полезен не потому, что умеет удалять строки. Его ценность в записи последовательности действий. Исходный файл остаётся неизменным, каждый шаг имеет вход и выход, а обновление воспроизводит тот же процесс на новых данных.
Сначала фиксируем контрольный результат
У нас CSV с выгрузкой заказов: две служебные строки, заголовок, даты вида 23.08.2026, сумма с запятой и иногда пустой регион. До открытия редактора запишем ожидания:
- после очистки должно остаться 1 248 заказов;
- уникальных
OrderIDтакже 1 248; - сумма
Amountравна 8 431 920,50 ₽; - пустой регион не удаляется, а получает метку «Не указан».
Эти числа превращают настройку запроса в проверяемую работу. Если после нового шага сумма изменилась, мы ищем причину сразу, а не после отправки отчёта директору.
Читаем запрос сверху вниз
let
Source = Csv.Document(
File.Contents(ReportPath),
[Delimiter=";", Encoding=65001, QuoteStyle=QuoteStyle.Csv]
),
SkipServiceRows = Table.Skip(Source, 2),
PromoteHeaders = Table.PromoteHeaders(
SkipServiceRows,
[PromoteAllScalars=true]
),
SetTypesRu = Table.TransformColumnTypes(
PromoteHeaders,
{
{"OrderID", type text},
{"OrderDate", type date},
{"Amount", Currency.Type},
{"Region", type text}
},
"ru-RU"
),
FillRegion = Table.ReplaceValue(
SetTypesRu, null, "Не указан",
Replacer.ReplaceValue, {"Region"}
)
in
FillRegion
Названия шагов описывают намерение, а не кнопку. SkipServiceRows лучше автоматического Removed Top Rows: через месяц другой человек поймёт, почему удалены именно две строки. Параметр локали в преобразовании типов объясняет Power Query, что 1 245,70 — русская запись числа, а 23.08.2026 — дата.
Не удаляем ошибки вслепую
Команда «Удалить ошибки» выглядит удобно, но может спрятать целый новый формат даты. Сначала создаём отдельный диагностический запрос: оставляем строки с ошибками и добавляем имя исходного файла. Если ошибка единичная — исправляем данные или явно обрабатываем исключение. Если ошибочен весь новый файл, вероятно, изменился контракт источника.
Пустое значение тоже имеет смысл. Пустой регион означает «неизвестно», а не «Москва» и не нулевую продажу. Мы заменили его на читаемую категорию, потому что отчёту нужно показывать качество данных. В другой задаче правильнее было бы оставить null.
Куда загружать результат
Для небольшой таблицы результат можно загрузить на лист. Если он нужен только как промежуточный источник для другого запроса, выбираем «Только подключение»: книга не хранит лишнюю копию. Решение о загрузке относится к потреблению данных и не должно менять шаги очистки.
Ревизия: закройте редактор, замените исходный CSV файлом следующей недели и нажмите «Обновить всё». Затем сверьте число строк, уникальные заказы и сумму. Любая ручная правка между этими действиями — сигнал, что рецепт неполон.
Первый хороший запрос не обязан быть сложным. Он обязан иметь понятный источник, осмысленные имена шагов, раннее назначение типов и контрольные числа. Именно это отличает автоматизацию от записанной последовательности случайных кликов.