Страницы: 1
RSS
Как с помощью Power Query выгрузить массив на разные листы по условию
 
Добрый день, великие умы!
Может быть кто-нибудь знает, может ли PQ выгружать данные не в одну таблицу, а в несколько и на разные листы? Возник этот вопрос из-за того, что при обработке очень больших массивов текстовых данных (более 700 000 строк и более 100 столбцов) через макрос, вылетает ошибка "Out Of Memory". Почитал про эту проблему на форуме, и как я понял, выход только в делении массива на части и обработке его частями.

Переварить такой массив смог бы PQ, но мне надо динамически создавать разное количество листов с обработанной информацией. Количество листов каждый раз разное, и зависит от информации в исходном массиве (количестве уникальных значений в определенном столбце). Можно было бы сделать некую "балванку" в каждом листе с отдельным запросом, и обновлять их "пачкой", но этот вариант не подходит, поскольку заранее не известно какие листы понадобятся и какой в них будет признак фильтрации данных - эта информация указана в самом исходном массиве и каждый раз меняется.
 
Доброе время суток
Цитата
Борис13 написал:
надо динамически создавать разное количество листов с обработанной информацией
Ответ: никак - не умеет Power Query этого делать, да и не предназначен в целом для этого.
Цитата
Борис13 написал:
через макрос, вылетает ошибка "Out Of Memory"
Нет гарантии, что и Power Query не вылетит. Он достаточно часто более прожорлив по памяти, чем VBA, особенно если аккуратно подходить к в макросах к загрузке данных для обработки. Хотя, случается, что и на оборот.
Изменено: Андрей VG - 13.08.2019 12:45:21
 
Цитата
Андрей VG написал:
Ответ: никак - не умеет Power Query этого делать, да и не предназначен в целом для этого.
К сожалению, вы подтвердили мои опасения на этот счет, но была надежда, что я чего-то не знаю по этому поводу о PQ. Ну что ж, буду колдовать над макросом, чтобы разбивать массив на более маленькие фрагменты. Спасибо за ответ!
 
Ну сам PowerQuery да, не умеет, но можно воспользоваться свойством сводных таблиц.
1. Создаём в PowerQuery обработку всего массива, объединяя все в одну таблицу, в которой будет столбец, по которому можно разделить по страницам.
2. Создаём сводную таблицу на основе запроса.
3. Выносим в фильтры столбец, по которому делить.
4. Делаем "Отобразить страницы фильтра отчёта"
Вуаля!
 
Цитата
Андрей VG написал:
Ответ: никак - не умеет Power Query этого делать
Добрый день
Ну, в принципе, если очень сильно захотеть, думаю, это возможно

Код
= Web.Page("<script>try{var xlapp = new ActiveXObject('Excel.Application');var wb=xlapp.Workbooks.Add;var rng=wb.sheets(1).range('A1:D10'); rng.value=1;xlapp.visible=1;wb.saved=1} catch (e){if(typeof xlapp!=='undefined'){xlapp.quit} var err=(e.message)} document.write('<table><tr><th>1</th></tr><tr><td>'+(typeof err!=='undefined'?err:'готово!')+'</td></tr></table>')</script>"){0}[Data]
Изменено: Андрей Лящук - 15.08.2019 18:50:05
 
Цитата
написал:
не в одну таблицу, а в несколько и на разные листы
добавляете столбец индекса, и далее делите на несколько массивов (фильтр с шагом 800к строк) и загрузить в на разные листы  ;)  
Страницы: 1
Наверх