Страницы: 1
RSS
Параметризация выбора источника-ссылки для запроса Power Query, Как реализовать выбор источника-ссылки (из двух запросов) для итогового запроса Power Query
 
Уважаемые специалисты и эксперты в области Power Query, подскажите пожалуйста, можно ли параметризировать выбор источника-ссылки для запроса. Видела несколько рассмотренных тем о параметризации пути к файлу/папке, и успешно их применяю, а вот попыталась пойти по тому же пути но к запросу - не получается, название запроса воспринимается PQ как текст (что-то видимо не так делаю).
Задача следующая. Существует два больших запроса (в примере в файле схематично обозначены Размер1 и Размер2). Периодически используется то один, то другой, но выход, хотелось бы, чтобы всегда был один, так как далее с ним всегда производятся одни и те же действия.
Подскажите, пожалуйста, как реализовать выбор источника (только не таблицы, а именно одного из запросов) для итогового запроса Выход. Например, чтобы в зависимости от значения, указанного в таблице Выбор, источником был соответствующий запрос. И далее, также в зависимости от этого же выбора, запрос либо сразу выгружался (если Размер1), либо (если Размер2) перед выгрузкой выполнялось слияние еще с одним запросом (Вес).
Так можно?
Изменено: ЕленаЕлина - 12.09.2024 22:58:14
 
ЕленаЕлина, не мудрите, да не мудримы будете
добавил к вашим запросам еще 2:
1. загружаем в отдельный запрос таблицу "Выбор" - называем запрос например "выбор"
в таблице в этом запросе нажимаем пр кн на значение ячейки  и выбираем "Детализация" (так проще сразу) - получаем результат запроса как текст из ячейки таблицы "Выбор"
Скрытый текст


2. создаем пустой запрос, например с названием "результат" в котором пишем условие на значение в таблице "Выбор" - обратите внимание, что пишем после if просто название предыдущего запроса из п.1 (выбор) и названия запросов Выход и Размер1 безо всяких кавычек:
Скрытый текст


3. выгружаем запрос "результат" из п.2 на лист, потом после выбора значения в таблице Выбор (там выпадающий список будет??) надо обновить выгруженную таблицу из запроса "результат", либо написать тем же макрорекордером макрос: "после выбора значения из выпадающего списка обновляй таблицу, выгруженную из запроса"

ПС: естественно, вообще все запросы можно объединить в один
Изменено: voler83 - 12.09.2024 23:29:28
 
ЕленаЕлина, добрый вечер. Еще вариант во вложении.
 
voler83, спасибо большое! Все получается, но... не нравится, что добавляется еще один запрос.
Расшифруйте пожалуйста ваше "ПС", можно объединить?  
 
ЕленаЕлина, а чем вам не нравится?) у вас миллионы строк в запросах? если таблицы в неск десятков-сотен строк то можно и тысячу запросов создать и ничего не изменится....

Скрытый текст


либо как у Alex, либо вкладывать функции в друг друга...можно вообще все в одну строку написать....только на таком объеме, да и на объеме в 100 раз большем, ничего не будет заметно в приросте производительности, у вас нет ничего, чтобы тормозило
Изменено: voler83 - 13.09.2024 00:09:00
 
Alex, ого, круто! Спасибо. Первый раз вижу такое. Как бы это теперь на реальные данные перенести. Можете маленький комментарий сделать?
 
Цитата
ЕленаЕлина написал:
Первый раз вижу такое
если заинтересует что это такое (=решение вашей проблемы с восприятием имени запроса как текста):
https://baguzin.ru/wp/yazyk-m-power-query-upravlenie-globalnoj-sredoj-zamykanie/
Изменено: voler83 - 13.09.2024 00:16:38
 
Да, этот ресурс уже знаком, спасибо, что подсказали конкретно нужную тему.
 
ЕленаЕлина,  если кратко, то с помощью Expression.Evaluate и среды #shared мы дали понять, чтоб PQ текст из Таблицы Выбор определил как конкретный запрос. Можете в пустом запросе написать: =#shared и посмотреть, что будет :)
Ну а если более детально, то читайте справку по функции Expression.Evaluate и  ссылку из сообщения от voler83,  
Изменено: Alex - 13.09.2024 00:26:20
 
voler83, у меня и большие запросы, и в таблицах много строк (десятки-сотни тысяч), поэтому пытаюсь экономить во всем. Еще и опыта у меня маловато. Может по общим меркам все не так и долго... Вы правы. Спасибо еще раз.
 
Цитата
ЕленаЕлина написал:
в таблицах много строк (десятки-сотни тысяч
тогда делайте как Alex или пишите запрос единым текстом сразу начиная с if , а после if через вложенные let...in или пользовательские функции сразу запросы, выдающие результат конечный , т.к. если как у меня, то получение в качестве результата результат запроса "Вывод" приведет к его пересчету при обращении к нему, а в нем join, т.е. запрос "Вывод" будет пересчитан дважды - сам по себе и при обращении к нему по имени, это не годится.
Изменено: voler83 - 13.09.2024 01:03:28
 
Цитата
Alex написал:
если кратко, то с помощью
Record.FieldOrDefault(#shared, "имя_запроса")
Пришелец-прораб.
 
AlienSx, здравствуйте. Спасибо за вариант )
 
AlienSx, здравствуйте! Очень рада новой встречи с вами. Спасибо, оба варианта подходят. А эти варианты равнозначны по применению, не подскажете? Дело вкуса или существуют какие-нибудь рекомендации к применению.
 
Цитата
ЕленаЕлина написал:
здравствуйте!
Добрый вечер :)
Цитата
ЕленаЕлина написал:
А эти варианты равнозначны по применению, не подскажете?
Результат то они один дают в вашем конкретном случае. Expression.Evaluate, все-таки, не (столько) для того, чтобы вытянуть поле записи, которую выдает #shared, по имени этого поля. Record.FieldOrDefault имеет преимущество в данном случае - вы можете не беспокоиться об ошибке, если такого поля в записи нет. Мне очень нравится Expression.Evaluate, но здесь отдаю предпочтение Record.FieldOrDefault. Про performance ничего не скажу - едва ли уместно оценивать скорость в данном случае.
P.S. Вообще, как мне кажется, это своего рода стереотип - если #shared, то где-то поблизости должен быть Expression.Evaluate (и наоборот). Все от ситуации зависит. В данном конкретном случае Expression.Evaluate, кмк, применять особого смысла нет.
Изменено: AlienSx - 13.09.2024 22:20:10 (PS)
Пришелец-прораб.
 
AlienSx, Спасибо за ответ.  :)  
Страницы: 1
Наверх