Страницы: 1
RSS
Последовательность (контроль) отработки запросов Power Query, Возможность контроля факта завершения отработки запроса Power Query
 
Добрый день!
Возникла следующая необходимость, в контроле последовательности выполнения запросов Power Query.
В качестве примера: на базе книги созданы 3 запроса (может быть существенно больше):
- 1-й загрузка данных и трансформация, с выгрузкой таблицы на лист;
- 2-й использование данных выгруженных на лист по факту отработки 1-го запроса для дальнейших расчетов;
- 3-й комбинирование по данным запроса 1 и 2, с формированием результирующей таблицы и выгрузке на лист.
У пользователей возникает проблема, что при запуске обновления всех запросов (RefreshAll), 2-й и 3-й запрос отрабатывается до завершения отработки 1-го запроса, соответственно в них используются не обновленные данные.
Существует ли возможность (в идеале на vba), определить факт завершения отработки (обновления) конкретного запроса, для последующего запуска отработки следующих?
 
Orlang, а с какой целью вы выгружаете 1 и 2 запросы на лист? Что мешает запросу №3 отдавать в качестве источников не таблицы, а сами запросы 1 и 2?
Вот горшок пустой, он предмет простой...
 
На лист выгружается только первый запрос, 2-й формируется на базе выгрузки 1-го. С замечанием согласен, в первоначальной задумке выгрузка на лист не предполагалась, должен был использовать как источник 1-й запрос, но столкнулся с проблемой корректного расчета доли каждой строки после проведения фильтрации значений в запросе 2 (для расчета общей суммы с помощью List.Sum, используется первоначальный источник без учета примененного фильтра).
 
Orlang, все равно не вижу причин выгружать промежуточные запросы на лист. Сделали запрос1, потом из него сделали запрос2, потом слиянием этих двух сделали запрос3. На лист то зачем выгружать?
Я даже больше скажу, наверняка вам вообще не нужно делить расчеты на разные запросы, а сделать все сразу в одном.
В чем конкретно задача состоит?
Изменено: PooHkrd - 12.12.2019 11:10:09
Вот горшок пустой, он предмет простой...
 
PooHkrd, Не смог я решить вопрос определения корректной доли каждого значения в общей сумме столбца. При данной структуре (пример):

let

Источник = Excel.CurrentWorkbook(){[Name="DB_test"]}[Content],

#"Измененный тип" = Table.TransformColumnTypes(Источник,{{"А", type text}, {"Эквивалент", type number}}),

#"Фильтр_АП" = Table.SelectRows(#"Измененный тип", each ([А] = "П")),

#"Расчет доли" = Table.AddColumn(#"Фильтр_АП", "Доля", each [Эквивалент]/List.Sum(Источник[#"Эквивалент"]))

in

#"Расчет доли"  

Доля рассчитывается от общей суммы всех значений поля "Эквивалент" находящихся в источнике, т.е. не учитывает проведенную фильтрацию, по столбцу "А", пришлось результат фильтрации выгрузить на лист и использовать его в качестве источника. Плюс, учитывая что в запросе 1, производится сборка данных из файлов с добавлением, нагрузка при расчете следующих запросов существенная.

Изменено: Orlang - 12.12.2019 11:42:55
 
А так?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="DB_test"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"А", type text}, {"Эквивалент", type number}}),
    #"Фильтр_АП" = Table.SelectRows(#"Измененный тип", each ([А] = "П")),
    #"Расчет доли" = Table.AddColumn(#"Фильтр_АП", "Доля", each [Эквивалент]/List.Sum(#"Фильтр_АП"[#"Эквивалент"]))
in
    #"Расчет доли"
Вот горшок пустой, он предмет простой...
 
PooHkrd, да, получилось расчет корректен, спасибо! Решает основную проблему.

И все же относительно первоначальной темы, существует возможность определить факт выполнения (обновления) запроса?
 
Orlang, у вас некорректно задан вопрос. Обновляется не запрос, обновляются данные в таблицах. И если вам нужно задать очередность этого обновления, то через VBA такое можно сделать, тут на форуме такие решения уже предлагались. Тыц и тыц.
Вот горшок пустой, он предмет простой...
 
PooHkrd, да, оно! Еще раз спасибо!
Страницы: 1
Наверх