Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Привет всем.
У меня вопрос по запуску макросов в редакторе скрипта.
Дело в следующем.
У меня есть загруженные файлы и одна логическая таблица.
На основе этой таблицы я создаю "Сводную таблицу" через диаграммы (объект CH01).
Далее эту сводную таблицу мне необходимо выгрузить в эксель, а затем загрузить снова в QV.
Как это сделать?
Макрос на выгрузку XLS файла:
sub exportCH03toExcel
set obj = ActiveDocument.GetSheetObject("CH03")
obj.ExportEx "D:\12345.xls", 5
end sub
Если я правильно понимаю алгоритм, то он должен быть следующий:
1. Запускаем макрос в редакторе скрипта;
2. Ждем 1-2 секунда (для создания файла);
3. Выкидываем текущую логическую таблицу;
4. Загружаем новый файл XLS (ранее выгруженный через макрос).
Спасибо.
Какова исходная задача обработки данных?
Возможно, стоит пересмотреть способ решения задачи?
Использования макросов стоит избегать любыми возможными способами, т.к. получаемое решение не масштабируется, сложно переносимо и имеет еще кучу нежелательных эффектов.
Есть около 10 эксельных файлов.
Из них информация попадает в один единый (или "консолидированный") эксельный файл.
Данные попадают через ссылки: ='D:\[Файл.xlsx]Лист!Ячейка.
Также в этом "консолидированном" файле часть данных расчитывается построчно (в пределах одной строки), а часть по столбцам (в пределах одного столбца).
Объем "консолидированного" файла: 750 строк и 120 столбцов.
Надо перевести все на QV для упрощения отчетности.
Вот у меня и получается что вначале я загружаю данные, потом собираю их в некое подобие исходной структуры и начинаю всяко вертеть эту конечную таблицу.
И пока мне требуется 3-4 файла для верного транспонирования и расчета данных. А я хочу засунуть все в один скрипт
QV в столбце расчет же не делает? Только по всему столбцу, а не по 2-3 строкам.
Если я правильно понимаю идею, то:
1. Вы можете загрузить данные из ~10 исходных файлов
2. У вас есть набор правил, в соответствии с которыми исходные данные пересчитываются в целевые. Т.е.:
1) Есть описание того, какие конкретно наборы данных (столбцы/строки/ячейки используются в расчетах)
2) Есть описание формул, агрегирующих значения их этих наборов данных
В таком случае вы имеете возможность описать всю последовательность преобразований (агрегирования) данных в теле скрипта, без необходимости выполнения экспорта/повторного импорта данных. Экспорт данных из объектов визуализации и повторный импорт этих данных является кривым сценарием решения задачи.
В зависимости от сложности преобразований, вы можете получить более простой или более сложный скрипт, но это уже просто вопрос времени и опыта разработки.
В плане гибкости и скорости расчетов данных в столбцах, большинство операций (функций) скрипта изначально рассчитаны на обработку именно табличных данных и нужно стремиться к обработке именно табличных представлений данных, даже если они будут таблицами из минимального количества строк и столбцов (например, 100 строк на 10 столбцов) .
Но функциональность скрипта не мешает "опуститься" до уровня обычного процедурного программирования, в котором вы можете обрабатывать данные даже в цикле, анализируя номера строк, флаги и т.п. уникальные признаки данных, определяющие не столбец целиком, а конкретные наборы интересующих вас значений.
Нужно только не забывать, что любое подобное процедурное программирование работает существенно медленнее, чем обработка таблиц.
Вы можете дать примеры данных, вызывающих сложность обработки и полагаю, что мы вместе сможем найти оптимальные варианты их преобразования.
Ок. Во вложении пример структуры нужной мне таблицы.
Кратенький пример.
В файле 2 листа, на первом сама таблица, на втором исходные данные (по факту они разнесены на десяток разных файлов).
Я хотел загрузить фактические данные.
Затем повернуть таблицу (показатели сделать столбцами) и рассчитать оранжевые значение.
После этого еще раз повернуть таблицу и рассчитать уже синие значения.
И еще раз, напоследок повернуть таблицу и обработать оставшиеся значения.
И т.д.
В аттаче - примеры приложений, демонстрирующих несколько возможных подходов к решению задачи.
В предложенных примерах (v.1.2 и v.2.1) реализованы простейшие сценарии загрузки. Агрегация выполняется в объектах визуализации.
Но никто не мешает выполнять предагрегацию и в сценарии загрузки (см. ниже).
В желаемой итоговой таблице, предложенной вами есть только одна потенциальная сложность. Визуально она является похожей на сводную, однако на самом деле таковой не является, т.к. в ней используются различные формулы агрегации (сначала статьи расходов и доходов суммируются, а затем из общих доходов вычитаются общие расходы).
Поэтому если весь расчет выполнять в объектах визуализации, то вижу два варианта:
Если хочется выполнить агрегацию с скрипте загрузки, то пример таких расчетов приведен в приложении (v.3.0)
Также приаттачил созданный мной справочник для отображения иерархии показателей.
Сергей, очень информативные примеры, спасибо.
Еще один подход для моделирования нестандартных агрегаций (чаще всего для подобных финансовых отчетов) - использование Excel шаблонов, в которых такие правила агрегации определены.
Хороший пример такого подхода: QlikView Examples: Developing a Profit and Loss Statement in QlikView ,
Есть еще документ How to Create a Profit and Loss Statement in QlikView , в нем этот прием и многие другие продемонстрированы.
Но это наверное довольно тяжеловесные решения для данного случая.
Сергей, спасибо за ответ.
Интересные решения, буду пробовать их сам уже.
Но я там ввел вас в заблуждение, таблица оказалась сложнее чем я думал изначально.
В ней не только сложения по уровням, а еще и другие формулы. В каких-то ячейках сложении 2-3-4 разных параметров со всего документа, где-то произведение и т.д.
Во вложении три файла - то как я это реализовал (маленькая модель отчета, в реальном отчете около 750 параметров (т.е. строк) и 10 разделов (столбцов), сгруппированных по месяцам и годам.
Метод может и кривоват, но лучшего я пока не нашел.
Также, по уровням на основе ваших примеров пока не раскидывал.
Дмитрий, а вариант с транспонированием таблицы не рассматривали?
В этом случае есть минусы, но у вас не так много показателей, которые придется задавать выражениями.
Пробовал.
Транспонирование подходит для небольшой таблицы, тогда все конечные данные формируются в виде простой таблицы.
А когда пять лет, 12 месяцев, и по каждому месяцу с десяток показателей...
Проще кросстаблицей делать и формировать сводную таблицу.
Правда и тут свои минусы, например, сложно посчитать разницу между предыдущим и текущим месяцем, или разницу между одним и тем-же месяцем разных лет.