В данном руководстве описываются рекомендации по работе с Pentaho Report Designer для более быстрого и аккуратного создания отчетов с возможностью более удобного форматирования в дальнейшем в случае необходимости.
В качестве примера в руководстве будет использована база данных компьютерных игр.
Псевдонимы для запрашиваемых полей
Бывают ситуации, в которых при построении запроса необходимо вывести поля с одинаковыми именами из разных таблиц. Например, с помощью запроса нужно вывести название игры, ее цену, жанр и компанию, которая ее разработала. Запрос будет выглядеть следующим образом:
SELECT
"dbo"."Genres"."Name",
"dbo"."Games"."Name",
"dbo"."Games"."Price",
"dbo"."Companies"."Name"
FROM
"dbo"."Companies" INNER JOIN "dbo"."Games" ON "dbo"."Companies"."Id" = "dbo"."Games"."Companies_Id"
INNER JOIN "dbo"."Genres" ON "dbo"."Games"."Genres_Id" = "dbo"."Genres"."Id"
Если в запросе имеются поля с одинаковыми именами, то расположить в отчете можно только одно из них.
Чтобы появилась возможность расположить все поля запроса, необходимо присвоить им уникальные (в пределах данного запроса) alias’ы (псевдонимы). Например, Genre
, Game
, Price
и Company
. В этом случае в отчете можно будет отобразить все поля запроса.
В отчете должен быть обязательно выбран выполняемый запрос
Может возникнуть ситуация, при которой для отчета не будет выбран выполняемый запрос (в этом случае он будет иметь значок черной точки). Это может происходить, например, при создании нового запроса или при переименовании уже имеющегося. Если для данного отчета не выбран выполняемый запрос, то никакие данные выводиться не будут. Чтобы задать выполняемый запрос, необходимо нажать ПКМ по запросу и выбрать пункт Select Query
. Рядом с выполняемым запросом должен стоять значок папки.
Размещение запросов, возвращающих несколько записей, в области Details
Элементы, которые представляют собой результаты запроса, рекомендуется помещать в область Details
.
Области, отличные от Details
, отображают только первую запись запроса, в то время как Details
выводит все записи запроса, при условии, что в атрибуте limit
отчета установлено стандартное значение. Если в атрибуте, например, будет установлено значение 3, то в отчете будут отображаться первые 3 записи (как если бы в самом запросе было прописано TOP (3)
или LIMIT 3
).
Рекомендуется для разных типов полей запроса выбирать соответствующие элемент отображения
При переносе полей выполняемого запроса дизайнер автоматически подбирает для него соответствующий элемент отображения в зависимости от типа данного поля (number-field
для числовых типов, date-field
для типа даты и т.д.). Рекомендуется для вывода результатов запроса использовать именно такой способ (вместо ручного добавления элемента из панели инструментов и задания ему результирующего поля в атрибуте field
), т.к. если элемент отображения не соответствует типу поля в запросе, то при экспорте запроса могут получиться некорректные значения (так Excel будет думать, что числа в ячейках – это строки).
Выполнение нескольких запросов
В одном отчете может быть только один выполняемый запрос. Чтобы создать несколько запросов, есть два способа:
- Соединение двух разных запросов в один;
- Создание подотчета.
Первый способ предпочтительнее благодаря возможности более гибкой настройки отчета, быстрому размещению полей, удобному форматированию. Хотя этот способ сложнее в реализации, т.к. принуждает к ручному написанию сложного запроса вместо использования визуального конструктора.
Подотчет является таким же отчетом, как и Master Report, со своим выполняемым запросом. При создании подотчета также важно выбрать выполняемый запрос, иначе никакие данные не будут отображены.
В общем случае стоит порекомендовать использовать первый способ как в плане удобства форматирования, так и в плане оптимизации запросов.
Подотчеты стоит создавать в том случае, если запрос в нем никак не пересекается с исходным (другая база данных, другой набор таблиц и т д). Подотчет также можно использовать в целях более удобной отладки.
Циклический вызов запроса
При создании подотчета может возникнуть проблема циклического вызова запроса. Она возникает при условии, что подотчет расположен в области Details
главного отчета, а поля выполняемого запроса в подотчете также расположены в области Details
подотчета, и в обоих отчетах в атрибуте limit
становлено стандартное значение (отображающее все результаты запроса).
Так, например, если результатом запроса является таблица из 7 записей, то в отчете будет отображено 49 записей.
Эту проблему можно решить, установив значение атрибута limit
главного запроса в 1.
Если установить это значение в подотчете, то в результате получится 7 одинаковых записей.
Создание элементов с динамическим размером
Особенности создания элементов с динамическим размером изложены на форуме Pentaho Community Forums.
Названия псевдонимов не помещаются в поле
При указании поля, которое будет выводится в элементе, внутри выписывается псевдоним поля. Если псевдоним будет очень длинный, а ячейка маленькая, то она может раздвинуться, что приведет к некорректному отображения в предпросмотре отчета. Рекомендуется давать псевдонимам короткие имена, так, чтобы они входили в ячейки.
Не рисуются границы
Иногда в некоторых полях при выводе отчета могут пропадать границы. Это может происходит из-за того, что в данной ячейке запрос вернул значение NULL
. Границы с пустыми значениями не рисуются.
Чтобы исправить это, достаточно в данном элементе прописать пробел в свойстве if-null
.
Проблема с накладыванием полей друг на друга
Пусть в отчете необходимо сначала вывести список игр, и сразу за ним список компаний-разработчиков.
Для этой задачи можно создать два подотчета (в одном вывести список игр, а в другом список компаний) и расположить их в области Details
(установив для атрибута limit
главного отчета значение 1). В этом случае может возникнуть проблема с накладывание текста одного подотчета на текст другого подотчета.
Можно было бы создать запрос в главном отчете и расположить оба поля в нем (поле игры над полем компании). Однако в этом случае отчет выведет в один столбец значения «Игра», «Компания», «Игра», «Компания», «Игра», «Компания» и т.д.
Чтобы расположить в одном столбце сначала все игры, а потом все компании без проблемы с наложением полей можно установить свойство layout области Details
в значение block
. В этом случае все элементы, которые располагаются в области Details
будут растянуты на всю ширину отчета и расположены друг над другом.
«Пустые» столбцы и строки при экспорте в Excel
Часто при экспорте в Excel могут возникать пустые столбцы и строки маленьких размеров. Как правило, это происходит из-за неаккуратного расположения элементов в дизайнере.
Например, пусть в отчете выводятся список игр (text-field с шириной 200 и координатами (0, 0)) и рядом список компаний-разработчиков (text-field с шириной 268 и координатами (201, 0)).
Таким образом общая ширина, занимаемая этими двумя элементами равна 200 + 268 = 468 пунктов плюс 1 пункт между ними = 469.
Так как стандартная ширина отчета равна 468, то один лишний пункт будет выходить за пределы отчета, из-за чего при экспорте в Excel образуется лишний столбец с очень маленькой шириной.
Чтобы располагать элементы более аккуратно рекомендуется поставить флажок в свойстве Snap to
Elements
в меню View
. Таким образом, при расположении элементов они будут «приклеиваться» друг к другу и между ними не будет появляться лишних промежутков.
Однако есть более удобный способ, позволяющий автоматизировать аккуратное расположение элементов в отчете. Для этого служит элемент band
. В него необходимо сложить все элементы, которые будут отображены в одной строке и задать в свойстве layout
значение row
, чтобы элементы в группе шли друг за другом слева направо. Так они будут пристыковываться друг к другу по горизонтали и между ними не будет возникать промежутков.
Чтобы band’ы
также пристыковывались друг к другу по вертикали необходимо для области Details
задать в свойстве layout
значение block
.
!
Failed Query при попытке посмотреть отчет на сервере
Иногда может возникнуть ситуация, когда запрос, который работает в Pentaho Report Designer
, проваливается при попытке сформировать его на сервере. Возможно причина в том, что для соединения, в котором работает запрос, не установлены необходимые параметры.
Чтобы это исправить, необходимо зайти в настройки соединения (окно Database Connection
), выбрать слева options
и задать параметр stringtype
, а значение unspecified
(если они не заданы).
Пропали результаты запроса в пред просмотре
Если запрос возвращает слишком много записей, они могут не поместиться на первый лист. В этом случае они переносятся на следующие листы, однако при экспорте в файл, все записи будут выводиться вместе («начиная с начала»).
Обращение к параметрам отчета
Чтобы обратиться к параметру отчета в запросе, необходимо обернуть его в фигурные скобки и поставить перед ними знак доллара (например, если имя параметра Company
, то в запросе нужно написать ${Company}
).
Если необходимо обратиться к параметру отчета из выражения (например, чтобы составить заголовок «Отчет по компании Square Enix»), то в это случае вместо фигурных скобок ставятся круглые (тогда выражение в поле заголовка будет таким «Отчет по компании $(Company)
»).
Пустая область при пред просмотре
Иногда может случится ситуация, когда при пред просмотре появляется пустая область, между которой выписываются результаты запросов. Это может происходить, когда запрос, результаты которого должны были появиться в этом месте, не выполнился (в этом случае, действительно, его результаты и сопутствующие заголовки выводиться не будут, при условии, что они находились вместе в band’е
или в подотчете).
При установке параметра автоматического подбора высоты элемента, его размеры, указанные в параметрах width и height
, могут быть некорректными, хотя сам элемент на области имеет всегда один и тот же размер независимо от этих двух параметров. Пустая область возникает, когда параметр height
больше действительной высоты элемента. В этом случае нужно уменьшить параметр height
, так чтобы он был меньше или равен истинному размеру элемента (либо потянуть за край элемента, либо прописать значение высоты вручную). Размер самого элемента при этом не изменится, а в пред просмотре пропадет пустая область.
Параметры отчета
Для параметра даты рекомендуется выбирать тип Date (SQL)
, т.к. в SQL формат даты отличается от остальных. В качестве формата даты можно указать, например, dd.MM.yyyy
(именно MM, т.к. mm отвечают за минуты), тогда дата будет выведена в соответствии с российским форматом.
Если в параметрах отчета участвует GUID
, то для него необходимо выбирать тип Object
.
Если в пользовательском интерфейсе необходимо отобразить отчет с указанным параметром, то необходимо в URL запроса в область параметров добавить требуемое значение параметра:
<имя_парметра=UUENCODE_значение>
Например:
http://localhost:4200/pentaho/api/repos/:home:msp:report1.prpt/generatedContent?orgId=f5078a44-2ef6-49d9-ad2e-0099ba1cf02d
При этом в URL можно указать и требуемый тип файла отчета:
http://localhost:4200/pentaho/api/repos/:home:msp:report1.prpt/generatedContent?output-target=table/excel;page-mode=flow&orgId=f5078a44-2ef6-49d9-ad2e-0099ba1cf02d
Форматы вывода:
table/html;page-mode=page for HTML (Paginated)
table/html;page-mode=stream for HTML (Single Page)
pageable/pdf for PDF
table/excel;page-mode=flow for Excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;page-mode=flow for Excel 2007
table/csv;page-mode=stream for Comma Separated Value
table/rtf;page-mode=flow for Rich-Text-Format
pageable/text for Text
Если при этом нет необходимости менять значение параметра в запросе, необходимо при описании параметра поставить флажок Hidden
.