Разбиение данных в 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. Ссылка на архив с примером.
Спасибо за подробные примеры. На BI-пиве презентации на эту тему не будет?
ОтветитьУдалитьИван, конкретные примеры - это очень длительный разговор будет.
ОтветитьУдалитьЕсли есть конкретные вопросы - прошу писать мне сразу на мыло. Буду стараться максимально быстро разобраться и опубликовать развернутый ответ.
Кстати, вы первый комментатор этого блога. Оказывается, кто-то его все-таки читает =)
Спасибо!
Сергей, твой блог читает не один Ivan. Пиши ещё :)
ОтветитьУдалитьА можно, например, в шаблоне наложить условие, какие листы выводить, какие нет?
ОтветитьУдалитьнапишите пожалуйста как создавать таблицы срезов с помощью этих шаблонов
ОтветитьУдалитьИлья, наверняка, уже неактуально, но...
ОтветитьУдалитьВы пробовали использовать XPath?
Например, для свойства XDO_SHEET_?
задать значение
<?/ARXCOBLX/G_CUSTOMER[CUSTOMER_NAME='Vision Operations']?>
Чтобы выводились лишь кастомеры с определенным именем.
П.С. Илья, если есть срочные вопросы - пишите в почту.
Дмитрий, к сожалению, у меня сейчас нет готового решения по использованию XDO_CROSSTAB.
ОтветитьУдалитьЕсли вы уже разобрались и готовы поделиться информацией - напишите пожалуйста.
Отличные статьи про Excel-шаблоны. Простор для творчества громадный. Спасибо.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьА можно использовать такие шаблоны для сохранения отчетов на файловой системе и как должен выглядеть блок "Дробление"?
ОтветитьУдалитьСейчас при попытке запустить берстинг ошибка:
Ключ доставки 1855
Тип доставки FILE
Статус Сбой
Системное сообщение Start of root element expected.
Спасибо!
Этот комментарий был удален автором.
ОтветитьУдалитьРасскажите подробно, как можно реализовать пакетную выгрузку отчетов. Вообще это реально сделать? Я читала, что BIP не поддерживает такие возможности.
ОтветитьУдалить"После генерации отчета в системной временной папке появляются XSL и XML файлы."
ОтветитьУдалитьВо временной папке на сервере? Если отчет запускаешь через TemplateBuilderforExcel (BI Publisher Desktop 11.1.1.7), есть возможность увидеть эти файлы?
Добрый день. Можете мне помочь в одном вопросе.
ОтветитьУдалитьУ меня есть sheet в кором я вывожу инфо о валюте. В Bİ я поставил параметр, в зависимости от введеной валюты, выходит нужная информация. А можно ли по этому параметру менять название sheet-а. То есть если доллар, то название sheet ДОЛЛАР, если Рубль то название sheet РУБЛЬ.
Добрый день! Это можно сделать так:
Удалить1) Используйте шаблон с разбиением по листам.
2) В качестве ключа разбиения по листам - "XDO_SHEET_?" - используйте верхний узел DataSet'а с данными (например, PAYMENTSUMMARY).
3) В качестве ссылки на имя листа - "XDO_SHEET_NAME_?" - используйте ссылку на параметр (например, P_VALUT).
4) Не забудьте задать в свойствах модели данных выводить в XML output значения параметров.