Автор: Евгений Курдюков

Здравствуйте, уважаемые коллеги!

Буквально на днях наша компания завершила проект по автоматизации процесса построения маркетинговой отчётности средствами IBM Cognos 8 для одного крупного заказчика. До этого специалисты заказчика формировали отчёты вручную при помощи Excel и предоставляли их руководству в виде презентаций Power Point. Соответственно, одним из требований к автоматизации стало требование автоматического формирования таких презентаций. Причём структура и формат презентаций не должны были измениться, так как к этому моменту они стали корпоративным стандартом.

После изучения вопроса о выборе инструмента для реализации этого требования мы остановились на использовании IMB Cognos 8 SDK как наиболее гибком решении, предоставляющем, по утверждению производителя, возможности аналогичные штатному Report Studio. Тем не менее, все оказалось не настолько радужно, как утверждает производитель.

В этой статье я хочу поделиться опытом использования IBM Cognos 8 SDK для генерации презентаций в MS Power Point.

Разумеется, я начал с изучения документации. И первое с чем пришлось столкнуться – её большой объём. «SDK Software Developer Guide» занимает почти 3000 страниц и при этом ссылается ещё на десяток сравнимых по объёму документов. Документация выполнена в общем для продуктов линейки Cognos стиле. Лаконизм, как смысл жизни. Шаг вправо, шаг влево от того, что разработчик счел возможным описать – и понять ничего невозможно. То есть, чтение документации, собственно как чтение, процесс бессмысленный.

К моему удовольствию, оказалось, что в составе документации имеется «Getting Started» на пятьдесят страниц, где кратко и по делу описан процесс установки и описание самых необходимых примеров использования SDK для Java, .NET и VB6. Именно в этих примерах я нашёл основные функции необходимые для нашей утилиты. К слову, большинство примеров работало, спасибо разработчикам! Наличие этого документа, позволило использовать «SDK Software Developer Guide» как «толстый» справочник. Ниже я расскажу о некоторых проблемах, ответов на которые в документации найти не удалось.

Как известно, Cognos позволяет получать отчёты в различных форматах: html (основной), файлы Excel, pdf, XML и некоторых других. К сожалению штатной выгрузки в PPT не предусмотрено. Поэтому единственным доступным вариантом оказалась работа через Content store. Первоначально мы предполагали, что сможем выгружать графики и таблицы из отчёта в формате html, как картинки по ссылкам. Это должно было позволить полностью перенести форматирование из отчёта. Оказалось, что данный подход применим только для графиков. Таблицы содержатся в самом html и не могут быть получены в виде картинок. Парсить html-код и подгружать таблицы стилей я не решился.

С другой стороны, таблицы, удобные для вставки в презентацию, можно получить, если выводить результаты отчёта в виде Excel файла (еще один штатный для Cognos вариант). То есть, казалось бы, что для работы с MS Power Point с использованием VB лучше всего подходят файлы Excel. Но на практике при этом возникают проблемы с форматом графиков, так как Excel их переформатирует. Например, подписи данных на графиках в Excel имели другое форматирование, нежели заданное в проекте отчёта (в Report Studio). То есть, скажем, подписи данных на html-страничке имеют два знака после запятой, как и было указано в проекте, а в Excel – восемь, что выглядит, «мягко говоря», немного неряшливо.

В итоге было принято решение: графики брать как картинки (PNG) из html-версии отчёта, а таблицы из Excel-версии. Хотя в документации утверждается, что можно сразу задавать нужный формат отчёта, на практике сначала приходится получить отчёт в виде html (по-умолчанию), а затем сделать рендеринг (rendering) в нужный формат.

Cognos может генерировать следующие варианты таблиц Excel:

  • single spreadsheet (xls)
  • spreadsheet (xls Excel 97/2003)
  • Open XML (xlsx Excel 2007)

Методом «научного тыка» мы остановились на «single spreadsheet», так как в нем обнаружилось более полное соответствие исходному (заданному в Report Studio) форматированию. В xlsx, например, почему то размножались ячейки, то есть вместо одного столбца появлялось пять объединённых построчно.

Ещё одна трудность возникла с отчётами, которые используют параметры (prompt) типа MUN (Member Unique Name). Например, параметр PRODUCTS одновременно может принимать значения: PRODUCT1, PRODUCT2 и т.д. При запуске через штатный веб-интерфейс, параметры задаются флажками напротив нужных значений на странице параметров отчета.

Cognos не выявленным нами пока способом сам определяет по условиям использования параметра его тип данных. То есть, разработчик отчета в Report Studio, как правило, не занимается явным приведением типов данных параметров. При этом при работе через SDK требуется выполнять явное приведение типов.

В результате нам пока не удалось найти способа, чтобы отчёт мог принимать один и тот же параметр типа список MUN и из веб-интерфейса и через функции SDK. То есть, для автоматизации формирования презентаций, приходится либо создавать копии отчетов с заменой prompt–ов на «альтернативные» или строить достаточно сложные условия работающие сразу с двумя вариантами promt.

После этого не самого красивого решения с prompt, некоторое время приложение развивалось без препятствий параллельно разработке отчётов, обрастая настройками и опциями. Однако при тестировании оказалось, что некоторые отчёты не выводятся в Power Point. После пары дней мучительных разборок с кодом приложения стало понятно, что проблема вызвана внешней причиной. А именно, нестыковкой версий компонента WebChart используемых в Cognos и Excel.

Дело в том, что хотя мы использовали для размещения в Power Point графики из html-версии отчёта, но при выполнении рендеринга в Excel-версию в соответствующем Excel-файле график тоже формируется. При этом происходит конфликт между версиями WebChart используемых Excel и Cognos. Как результат, работа Excel по созданию и сохранению файла не завершается, и программа не может открыть файл (его просто нет) – слайд презентации не создаётся. К счастью, это происходит только с графиками в виде «пирогов» (pie), если указать формат вывода отличный от xlsx (по крайней мере, с другими подобными случаями мы пока не сталкивались). Видимо в них Cognos всё таки использует новые библиотеки для компонентов, именно те, которые понадобились нам для соответствия «корпоративному стилю», а не соответствующие версии Excel.

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

В результате получилось приложение работающее следующим образом:

  1. Утилита получает параметры либо из командной сроки, либо из файла параметров. В последнем случае в командной строке передаётся полный путь к файлу параметров.
  2. Авторизуется на сервере Cognos.
  3. Далее в цикле запускаются отчёты с указанными параметрами и с сервера извлекаются для каждого отчета график в виде PNG-файла и табличные значения в виде Excel-файла.
  4. Картинка размещается на указанный в параметрах слайд презентации согласно указанным координатам и размерам.
  5. Для таблиц помимо координат и размеров нужно указать диапазон ячеек и, при необходимости, ширину столбцов. Из одного файла можно скопировать сколько угодно диапазонов и разместить их произвольно на одном или разных слайдах.
  6. Дополнительно можно добавить произвольные картинки или таблицы, которые не являются результатами отчётов, а служат как статические элементы презентации.
  7. Файл презентации сохраняется с заданным именем.

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

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

Желающие ознакомиться с нашим результатом подробнее, могут скачать дистрибутив утилиты ppt-maker здесь. Там же вы найдёте её подробное описание и инструкцию по настройкам.


Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.

Читайте также: