logo

15 июн. 2010 г.

BIP: Excel-шаблоны разметки с разбиением по листам

Разбиение данных в Excel-отчете по листам – давнее требование многих пользователей BIPublisher.
Далеко не у всех стоит MS Excel 2007, позволяющий выводить миллион строк на листе.
(Согласен, тянуть все данные в Excel – нонсенс, но почему-то рано или поздно такая задача появляется у почти каждого разработчика BIP.)

Теперь, используя Excel-шаблоны разметки Bi Publisher, вы можете осуществить разбивку по листам просто и элегантно.




На примере отчета "Balance Letter" из стандартной поставки попробуем это реализовать. Продублируем данные – создадим новый элемент G_CUSTOMER в XML-файле данных.


Откроем скрытый лист XDO_METADATA, в котором пропишем 2 новые инструкции:


XDO_SHEET_? задает ключ, по которому будет идти разбиение данных по листам.
XDO_SHEET_NAME_? задает имя нового листа.

После генерации отчета в системной временной папке появляются XSL и XML файлы.


XSL – полученный из исходного Excel-файла разметки шаблон трансформации (Предполагаю, что механизм во многом схож с Apache POI).
XML – результирующий файл, полученный «наложением» XSL-шаблона на XML-файл с данными отчета.
(Этот XML-файл по аналогии с генерацией XSL-файла записывается в Excel-файл – являющийся результатом выполнения отчета.)

По содержимому файлов становится понятен метод разбиения:




P.S. Ссылка на архив с примером.

15 комментариев:

  1. Спасибо за подробные примеры. На BI-пиве презентации на эту тему не будет?

    ОтветитьУдалить
  2. Иван, конкретные примеры - это очень длительный разговор будет.
    Если есть конкретные вопросы - прошу писать мне сразу на мыло. Буду стараться максимально быстро разобраться и опубликовать развернутый ответ.

    Кстати, вы первый комментатор этого блога. Оказывается, кто-то его все-таки читает =)
    Спасибо!

    ОтветитьУдалить
  3. Сергей, твой блог читает не один Ivan. Пиши ещё :)

    ОтветитьУдалить
  4. А можно, например, в шаблоне наложить условие, какие листы выводить, какие нет?

    ОтветитьУдалить
  5. напишите пожалуйста как создавать таблицы срезов с помощью этих шаблонов

    ОтветитьУдалить
  6. Илья, наверняка, уже неактуально, но...
    Вы пробовали использовать XPath?
    Например, для свойства XDO_SHEET_?
    задать значение
    <?/ARXCOBLX/G_CUSTOMER[CUSTOMER_NAME='Vision Operations']?>

    Чтобы выводились лишь кастомеры с определенным именем.

    П.С. Илья, если есть срочные вопросы - пишите в почту.

    ОтветитьУдалить
  7. Дмитрий, к сожалению, у меня сейчас нет готового решения по использованию XDO_CROSSTAB.
    Если вы уже разобрались и готовы поделиться информацией - напишите пожалуйста.

    ОтветитьУдалить
  8. Отличные статьи про Excel-шаблоны. Простор для творчества громадный. Спасибо.

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. А можно использовать такие шаблоны для сохранения отчетов на файловой системе и как должен выглядеть блок "Дробление"?

    Сейчас при попытке запустить берстинг ошибка:

    Ключ доставки 1855
    Тип доставки FILE
    Статус Сбой
    Системное сообщение Start of root element expected.

    Спасибо!

    ОтветитьУдалить
  11. Этот комментарий был удален автором.

    ОтветитьУдалить
  12. Расскажите подробно, как можно реализовать пакетную выгрузку отчетов. Вообще это реально сделать? Я читала, что BIP не поддерживает такие возможности.

    ОтветитьУдалить
  13. "После генерации отчета в системной временной папке появляются XSL и XML файлы."

    Во временной папке на сервере? Если отчет запускаешь через TemplateBuilderforExcel (BI Publisher Desktop 11.1.1.7), есть возможность увидеть эти файлы?

    ОтветитьУдалить
  14. Добрый день. Можете мне помочь в одном вопросе.
    У меня есть sheet в кором я вывожу инфо о валюте. В Bİ я поставил параметр, в зависимости от введеной валюты, выходит нужная информация. А можно ли по этому параметру менять название sheet-а. То есть если доллар, то название sheet ДОЛЛАР, если Рубль то название sheet РУБЛЬ.

    ОтветитьУдалить
    Ответы
    1. Добрый день! Это можно сделать так:
      1) Используйте шаблон с разбиением по листам.
      2) В качестве ключа разбиения по листам - "XDO_SHEET_?" - используйте верхний узел DataSet'а с данными (например, PAYMENTSUMMARY).
      3) В качестве ссылки на имя листа - "XDO_SHEET_NAME_?" - используйте ссылку на параметр (например, P_VALUT).
      4) Не забудьте задать в свойствах модели данных выводить в XML output значения параметров.

      Удалить