Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Запуск макроса в редакторе скрипта (через Ctrl+E)

Привет всем.


У меня вопрос по запуску макросов в редакторе скрипта.

Дело в следующем.

У меня есть загруженные файлы и одна логическая таблица.

На основе этой таблицы я создаю "Сводную таблицу" через диаграммы (объект 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 Replies
Sergey_Polekhin
Employee
Employee

Какова исходная задача обработки данных?

Возможно, стоит пересмотреть способ решения задачи?

Использования макросов стоит избегать любыми возможными способами, т.к. получаемое решение не масштабируется, сложно переносимо и имеет еще кучу нежелательных эффектов.

Not applicable
Author

Есть около 10 эксельных файлов.

Из них информация попадает в один единый (или "консолидированный") эксельный файл.

Данные попадают через ссылки: ='D:\[Файл.xlsx]Лист!Ячейка.

Также в этом "консолидированном" файле часть данных расчитывается построчно (в пределах одной строки), а часть по столбцам (в пределах одного столбца).

Объем "консолидированного" файла: 750 строк и 120 столбцов.

Надо перевести все на QV для упрощения отчетности.

Вот у меня и получается что вначале я загружаю данные, потом собираю их в некое подобие исходной структуры и начинаю всяко вертеть эту конечную таблицу.

И пока мне требуется 3-4 файла для верного транспонирования и расчета данных. А я хочу засунуть все в один скрипт

QV в столбце расчет же не делает? Только по всему столбцу, а не по 2-3 строкам.

Sergey_Polekhin
Employee
Employee

Если я правильно понимаю идею, то:

1. Вы можете загрузить данные из ~10 исходных файлов

2. У вас есть набор правил, в соответствии с которыми исходные данные пересчитываются в целевые. Т.е.:
     1) Есть описание того, какие конкретно наборы данных (столбцы/строки/ячейки используются в расчетах)

     2) Есть описание формул, агрегирующих значения их этих наборов данных

В таком случае вы имеете возможность описать всю последовательность преобразований (агрегирования) данных в теле скрипта, без необходимости выполнения экспорта/повторного импорта данных. Экспорт данных из объектов визуализации и повторный импорт этих данных является кривым сценарием решения задачи.

В зависимости от сложности преобразований, вы можете получить более простой или более сложный скрипт, но это уже просто вопрос времени и опыта разработки.

В плане гибкости и скорости расчетов данных в столбцах, большинство операций (функций) скрипта изначально рассчитаны на обработку именно табличных данных и нужно стремиться к обработке именно табличных представлений данных, даже если они будут таблицами из минимального количества строк и столбцов (например, 100 строк на 10 столбцов) .

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

Нужно только не забывать, что любое подобное процедурное программирование работает существенно медленнее, чем обработка таблиц.

Вы можете дать примеры данных, вызывающих сложность обработки и полагаю, что мы вместе сможем найти оптимальные варианты их преобразования.

Not applicable
Author

Ок. Во вложении пример структуры нужной мне таблицы.

Кратенький пример.

В файле 2 листа, на первом сама таблица, на втором исходные данные (по факту они разнесены на десяток разных файлов).

Я хотел загрузить фактические данные.

Затем повернуть таблицу (показатели сделать столбцами) и рассчитать оранжевые значение.

После этого еще раз повернуть таблицу и рассчитать уже синие значения.

И еще раз, напоследок повернуть таблицу и обработать оставшиеся значения.

И т.д.

Sergey_Polekhin
Employee
Employee

В аттаче - примеры приложений, демонстрирующих несколько возможных подходов к решению задачи.

В предложенных примерах (v.1.2 и v.2.1) реализованы простейшие сценарии загрузки. Агрегация выполняется в объектах визуализации.

Но никто не мешает выполнять предагрегацию и в сценарии загрузки (см. ниже).

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

Поэтому если весь расчет выполнять в объектах визуализации, то вижу два варианта:

  1. Отделить сводные данные по расходам и доходам (одна таблица) от итоговой таблицы остатков (вторая таблица).
    Этот пример приведен в приложении (v.1.2)
  2. Если требуется отобразить информацию в единственной сводной таблице, то можно пойти на хитрость и считать все расходы отрицательными числами. В этом случае для подсчета всех агрегатов можно использовать единую формулу.
    Очевидно, что в этом случае предложенная мной таблица будет отличаться от желаемого вами вида итоговой таблицы тем, что в статьях расходов числа будут представлены отрицательными значениями.
    Этот пример приведен в приложении (v.2.1)

Если хочется выполнить агрегацию с скрипте загрузки, то пример таких расчетов приведен в приложении (v.3.0)

Также приаттачил созданный мной справочник для отображения иерархии показателей.

vadimtsushko
Partner - Creator III
Partner - Creator III

Сергей, очень информативные примеры, спасибо.

Еще один подход для моделирования нестандартных агрегаций (чаще всего для подобных финансовых отчетов) - использование Excel шаблонов, в которых такие правила агрегации определены.

Хороший пример такого подхода: QlikView Examples: Developing a Profit and Loss Statement in QlikView ,

Есть еще документ How to Create a Profit and Loss Statement in QlikView , в нем этот прием и многие другие продемонстрированы.

Но это наверное довольно тяжеловесные решения для данного случая.

Not applicable
Author

Сергей, спасибо за ответ.

Интересные решения, буду пробовать их сам уже.

Но я там ввел вас в заблуждение, таблица оказалась сложнее чем я думал изначально.

В ней не только сложения по уровням, а еще и другие формулы. В каких-то ячейках сложении 2-3-4 разных параметров со всего документа, где-то произведение и т.д.

Во вложении три файла - то как я это реализовал (маленькая модель отчета, в реальном отчете около 750 параметров (т.е. строк) и 10 разделов (столбцов), сгруппированных по месяцам и годам.

Метод может и кривоват, но лучшего я пока не нашел.

Также, по уровням на основе ваших примеров пока не раскидывал.

Eugeny_Ilyin
Creator II
Creator II

Дмитрий, а вариант с транспонированием таблицы не рассматривали?
В этом случае есть минусы, но у вас не так много показателей, которые придется задавать выражениями.

Not applicable
Author

Пробовал.

Транспонирование подходит для небольшой таблицы, тогда все конечные данные формируются в виде простой таблицы.

А когда пять лет, 12 месяцев, и по каждому месяцу с десяток показателей...

Проще кросстаблицей делать и формировать сводную таблицу.

Правда и тут свои минусы, например, сложно посчитать разницу между предыдущим и текущим месяцем, или разницу между одним и тем-же месяцем разных лет.