Как ссылаться на промежуточный шаг другого запроса в Power Query

Сегодня мы поговорим о том, как можно быстро создавать ссылки на промежуточные шаги одного запроса из другого запроса в Power Query. Этот подход особенно полезен при работе со сложными цепочками преобразований данных или когда нужно разделить обработку данных на несколько этапов.

Почему это полезно?

Создание ссылок между запросами позволяет повысить гибкость обработки данных, упрощает отладку сложных запросов и улучшает структуру проекта в целом.

Представьте, что у вас есть запрос в котором вы подготовили данные (убрали лишние символы, заменили наименования номенклатур или артикулы, сгруппировали данные и добавили столбец с объединяющим признаком). Но иногда нужен не весь итоговый набор, а только одна промежуточная часть обработки — например, очищенные данные перед группировкой. Тут и пригодится создание ссылок на отдельные части.

Вместо того чтобы переписывать один и тот же код в нескольких местах, вы можете просто сослаться на нужный этап другого запроса.

Как это сделать?

Для создания такой ссылки используется комбинация функций Value.Metadata и метаданных (meta), которая позволит нам указать путь до нужного шага внутри существующего запроса

=meta [ПридумываемИмяМетаданным = #"Название шага запроса, который хотим сохранить"]
Поля записи метаданных можно использовать для хранения целых таблиц (шагов запроса)

=Value.Metadata(#"Название запроса, в котором хранятся нужные нам данные")[ИмяМетаданных]
Функция языка Power Query M, которая помогает извлекать сохраненные метаданные заданного значения. Значение может быть столбцом, таблицей или даже ячейкой в таблице.
Принцип сохранения метаданных и их извлечение Вводная часть
Шаг 1: Добавляем метку к нужной части запроса

Предположим, у вас уже есть запрос "Исходный запрос_Метаданные", состоящий из нескольких этапов подготовки данных. Нужно обозначить один из этапов (например шаг "Измененный тип"), чтобы потом легко его использовать.

Урок 11 Шаг 1 Подготовка ссылки на данные

Подготовка к сохранению метаданных
Копируем название шага, который хотим сохранить в метаданных

Урок 11 Шаг 2 Сохранение шага в метаданные

Сохранение метаданных с помощью meta
Создаем ссылку на промежуточный шаг "Измененный тип" (сохраняем его в метаданных) с помощью функции meta

="Удаленные столбцы" meta [Метаданные = #"Измененный тип"]
К последнему шагу "Удаленные столбцы" добавляем метаданные в виде таблицы, хранящейся в шаге "Измененный тип" с помощью функции "meta" и присваиваем имя этим метаданным "Метаданные" чтобы потом легко на них сослаться.

Шаг 2: Создаем ссылку на промежуточный шаг первого запроса
Урок 11 Шаг 3 Извлекаем метаданные

Извлекаем мета-данные
Для извлечения мета-данных используем функцию Value.Metadata

Теперь, когда нужный нам шаг первого запроса отмечен, можно обратиться к нему прямо из нового запроса. Переходим туда, где хотим использовать данные, и пишем:

=Value.Metadata(#"Исходный запрос_Метаданные")[Метаданные]
Извлекаем метаданные "Метаданные" в виде таблицы, хранящейся в шаге "Измененный тип" с помощью функции "Value.Metadata".

Таким образом, наш второй запрос начинает работу прямо с нужного шага первого запроса, не повторяя всю предварительную логику преобразования данных.

Объединение запроса с промежуточным шагом другого запроса Объединение запроса с метаданными основного запроса
Шаг 1: Объединение запросов обычным способом

Для начала объединим обычным способом текущий запрос с тем запросом, из которого нам нужен промежуточный шаг.

Урок 11 Часть 2 Шаг 1 Объединение запросов

Объединяем запросы
Пока что объединяем запросы привычным нам способом

Шаг 2: Ссылка на метаданные при объединении запросов

Теперь нам необходимо скорректировать формулу объединения запросов:

Урок 11 Часть 2 Шаг 2 Ссылка на метаданные при объединении

Корректируем формулу объединения запросы
Дописываем функцию Value.Metadata в формулу объединения запросов и указываем название метаданных: [Метаданные]

Итоговая формула будет выглядеть так в нашем примере:
=Table.NestedJoin(
Источник, {"Группа", "Номенклатура"},
Value.Metadata(#"Исходный запрос_Метаданные")[Метаданные], {"Группа", "Номенклатура"},
"т_Данные (метаданные)",
JoinKind.LeftOuter)
Table.NestedJoin - функция для объединения запросов
Источник и Value.Metadata(#"Исходный запрос_Метаданные")[Метаданные] - название таблиц, которые объединяем
{"Группа", "Номенклатура"} - столбцы по которым идет объединение
"т_Данные (метаданные)" - название столбца в котором будут сохранены объединенные таблицы
JoinKind.LeftOuter - метод объединения запросов

Остается лишь раскрыть столбец для получения нужных данных.

Заключение

Мы разобрались, как ссылаться на отдельный шаг обработки данных в Power Query. Так проще работать с большими массивами информации, избегая повторений и делая обработку быстрее.

Надеюсь, этот урок поможет вам упростить свою жизнь и сделает ваши проекты в Power Query более структурированными и удобными!

Если у вас остались вопросы – пишите в комментариях ниже. Удачи вам и пусть ваш Power Query всегда будет мощнее остальных инструментов!

2 комментария для “Как ссылаться на промежуточный шаг другого запроса в Power Query

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *