Я создал несколько достаточно сложных M-запросов и начал сталкиваться с некоторыми серьезными проблемами производительности. Мне интересно, имеет ли отношение к тому, как я когда-либо организовывал свой код.Excel Get & Transform (Power Query) M Стиль и производительность кода
Вопросы у меня были следующие:
1) Мощность запросов постоянно использует все несколько процессорных ядер, вычисляя что-то, даже если я не жду результата.
2) В диспетчере задач иногда можно увидеть, что потоки запроса мощности («Microsoft.mashup.Container.NetFX40.exe») почти простаивают, а Excel.exe использует 100% одного ядра в течение нескольких десятков минут - хотя, по крайней мере, я ищу значения в нескольких таблицах параметров, которые не содержат более пары десятков ячеек.
3) Некоторые шаги требуют очень много времени, чтобы вычислить, хотя задействованные операции тривиальны. Например, у меня есть список из 10 текстовых значений, взятых из таблицы Excel. Этот список появляется как один из моих шагов запроса, когда я его просматриваю. Затем я хочу удалить одно значение, поэтому следующий шаг = List.RemoveItems (myList, {"val"}). Он не вычислялся через 30 минут, хотя я мог видеть, что список был правильно загружен на предыдущем шаге.
4) Пользовательский интерфейс иногда перестает отвечать на запросы в течение нескольких минут после изменения кода. Можно по-прежнему щелкнуть правой кнопкой мыши по запросам слева, чтобы войти в расширенный редактор, и нажмите красный X в верхнем правом углу и выберите сохранить изменения, но все остальное не отвечает. Не сердитый, просто не отвечающий.
В любом случае, я просто хотел спросить, есть ли у кого-то подобные проблемы, и если кто-нибудь знает, что вызывает особенно плохую работу в PQ.
Я часто использовать что-то вроде следующего рисунка, чтобы сохранить общее количество запросов вниз в то же время иметь возможность легко проверять отдельные шаги:
let
ThisWB = Excel.CurrentWorkbook(),
CfgTbl = ThisWB{[Name="myCfgTbl"]}[Content],
x = aFn(CfgTbl),
y = bFn(CfgTbl),
output = [ThisWB=ThisWB, CfgTbl=CfgTbl, x=x, y=y]
in
output
Это может привести к каким-либо вопросам? Просто подумал, возможно, потому что в какой-то момент после долгого ожидания для простого результата функции я создал новый запрос = Excel.CurrentWorkbook() {[Name = "myCfgTbl"]} [Content], ссылался на него из другого запроса , и мой результат вычисляется немедленно. Не знаю, почему.
Какую версию Power Query вы используете? Некоторые проблемы с процессором могут быть вызваны фоновым анализом, который вы можете отключить для документа в диалоговом окне «Параметры» в разделе «Текущая рабочая книга | Загрузка данных | Разрешить предварительный просмотр данных в фоновом режиме. –