Что такое кросс таблица
JasperReports — Кросс-таблицы
Кросс-таблицы (кросс-табулирования) — это отчеты, содержащие таблицы, в которых данные располагаются по строкам и столбцам в табличной форме. Объект кросс-таблицы используется для вставки отчета кросс-таблицы в основной отчет. Кросс-таблицы могут использоваться с любым уровнем данных (номинальным, порядковым, интервальным или относительным) и обычно отображать обобщенные данные, содержащиеся в переменных отчета, в форме динамической таблицы. Переменные используются для отображения агрегированных данных, таких как суммы, числа, средние значения.
Crosstab Properties
Элемент JRXML используется для вставки кросс-таблицы в отчет.
атрибут
Ниже приведен список атрибутов элемента —
columnBreakOffset — Когда происходит разрыв столбца, указывает количество вертикального пространства, измеренное в пикселях, перед тем, как последующий фрагмент кросс-таблицы будет размещен ниже предыдущего на той же странице. Значение по умолчанию 10.
runDirection — указывает, должны ли данные кросс- таблицы заполняться слева направо (LTR) или справа налево (RTL). Значением по умолчанию является LTR.
columnBreakOffset — Когда происходит разрыв столбца, указывает количество вертикального пространства, измеренное в пикселях, перед тем, как последующий фрагмент кросс-таблицы будет размещен ниже предыдущего на той же странице. Значение по умолчанию 10.
runDirection — указывает, должны ли данные кросс- таблицы заполняться слева направо (LTR) или справа налево (RTL). Значением по умолчанию является LTR.
Подэлементы
Элемент имеет следующие подэлементы —
— этот элемент используется для доступа к переменным и параметрам отчета из кросс-таблицы. Атрибуты для этого элемента включают —
name — определяет имя параметра
класс — указывает класс параметров.
— этот элемент определяет набор данных, который будет использоваться для заполнения кросс-таблицы (подробное объяснение см. в следующем разделе). Атрибуты для этого элемента включают —
— этот элемент определяет содержимое области, найденной в верхнем левом углу кросс-таблицы, где встречаются заголовки столбцов и строки. Размер этой ячейки вычисляется автоматически на основе определенной ширины и высоты строки и столбца.
— этот элемент определяет группу, используемую для разделения данных на строки. Атрибуты для этого элемента включают —
name — определяет имя группы строк.
ширина — это определяет ширину группы строк.
headerPosition — определяет позицию содержимого заголовка (Top, Middle, Bottom, Stretch).
totalPosition — определяет позицию всего столбца (Start, End, None).
Этот элемент содержит следующие подэлементы —
— этот элемент определяет группу, используемую для разделения данных на столбцы. Атрибуты для этого элемента включают —
name — определяет имя группы столбцов.
высота — определяет высоту заголовка группы столбцов.
headerPosition — определяет позицию содержимого заголовка ( Right, Left, Center, Stretch ).
totalPosition — определяет позицию всего столбца ( Start, End, None ).
Этот элемент содержит следующие подэлементы —
— этот элемент определяет вычисление, которое будет выполняться по строкам и столбцам. Атрибуты для этого элемента включают —
имя — это определяет имя меры.
класс — указывает класс меры.
— этот элемент определяет способ размещения данных в ячейках без заголовка. Атрибуты для этого элемента включают —
columnTotalGroup — указывает группу, используемую для расчета общего количества столбцов.
высота — это определяет высоту ячейки.
rowTotalGroup — указывает группу, используемую для вычисления итоговой суммы строки.
ширина — это определяет ширину ячейки.
— этот элемент определяет, что отображать в пустой ячейке кросс-таблицы. Этот элемент не содержит атрибутов.
— этот элемент используется для доступа к переменным и параметрам отчета из кросс-таблицы. Атрибуты для этого элемента включают —
name — определяет имя параметра
класс — указывает класс параметров.
— этот элемент определяет набор данных, который будет использоваться для заполнения кросс-таблицы (подробное объяснение см. в следующем разделе). Атрибуты для этого элемента включают —
— этот элемент определяет содержимое области, найденной в верхнем левом углу кросс-таблицы, где встречаются заголовки столбцов и строки. Размер этой ячейки вычисляется автоматически на основе определенной ширины и высоты строки и столбца.
— этот элемент определяет группу, используемую для разделения данных на строки. Атрибуты для этого элемента включают —
name — определяет имя группы строк.
ширина — это определяет ширину группы строк.
headerPosition — определяет позицию содержимого заголовка (Top, Middle, Bottom, Stretch).
totalPosition — определяет позицию всего столбца (Start, End, None).
Этот элемент содержит следующие подэлементы —
— этот элемент определяет группу, используемую для разделения данных на столбцы. Атрибуты для этого элемента включают —
name — определяет имя группы столбцов.
высота — определяет высоту заголовка группы столбцов.
headerPosition — определяет позицию содержимого заголовка ( Right, Left, Center, Stretch ).
totalPosition — определяет позицию всего столбца ( Start, End, None ).
Этот элемент содержит следующие подэлементы —
— этот элемент определяет вычисление, которое будет выполняться по строкам и столбцам. Атрибуты для этого элемента включают —
имя — это определяет имя меры.
класс — указывает класс меры.
— этот элемент определяет способ размещения данных в ячейках без заголовка. Атрибуты для этого элемента включают —
columnTotalGroup — указывает группу, используемую для расчета общего количества столбцов.
высота — это определяет высоту ячейки.
rowTotalGroup — указывает группу, используемую для вычисления итоговой суммы строки.
ширина — это определяет ширину ячейки.
— этот элемент определяет, что отображать в пустой ячейке кросс-таблицы. Этот элемент не содержит атрибутов.
Группировка данных в кросс-таблице
bucketExpression — выражение, которое будет оценено для получения элементов группы данных.
comptorExpression — Необходим в том случае, если естественное упорядочение значений не является лучшим выбором.
orderByExpression — указывает значение, используемое для сортировки данных.
bucketExpression — выражение, которое будет оценено для получения элементов группы данных.
comptorExpression — Необходим в том случае, если естественное упорядочение значений не является лучшим выбором.
orderByExpression — указывает значение, используемое для сортировки данных.
Встроенные переменные кросс-таблицы
Ниже приведен список текущих значений меры и итогов разных уровней, соответствующих ячейке, можно получить через переменные, названные в соответствии со следующей схемой:
Текущее значение вычисления меры сохраняется в переменной, имя которой совпадает с именем меры.
_ _ALL — Это дает итоговое значение для всех записей в группе столбцов из той же строки.
_ _ALL — это итоговое значение для всех записей в группе строк из одного столбца.
_ _ _ALL — Это дает объединенную сумму, соответствующую всем записям в группах строк и столбцов.
Текущее значение вычисления меры сохраняется в переменной, имя которой совпадает с именем меры.
_ _ALL — Это дает итоговое значение для всех записей в группе столбцов из той же строки.
_ _ALL — это итоговое значение для всех записей в группе строк из одного столбца.
_ _ _ALL — Это дает объединенную сумму, соответствующую всем записям в группах строк и столбцов.
пример
Детали вышеупомянутого файла следующие:
Элемент определяет группу для разделения данных на строки. Здесь каждая строка будет отображать данные для другого имени.
Элемент определяет способ размещения данных в ячейках без заголовка. Этот элемент также содержит единственный элемент в качестве единственного подэлемента.
Элемент определяет группу для разделения данных на строки. Здесь каждая строка будет отображать данные для другого имени.
Элемент определяет способ размещения данных в ячейках без заголовка. Этот элемент также содержит единственный элемент в качестве единственного подэлемента.
Java-коды для заполнения отчетов остаются без изменений. Содержимое файла C: \ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ JasperReportFill.java указано ниже —
Содержимое файла POJO C: \ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ DataBean.java :
Содержимое файла C: \ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ DataBeanList.java выглядит следующим образом:
Генерация отчетов
Далее, давайте скомпилируем и выполним вышеуказанные файлы, используя наш обычный процесс сборки ANT. Содержимое файла build.xml (сохраненного в каталоге C: \ tools \ jasperreports-5.0.1 \ test) приведено ниже.
Файл импорта — baseBuild.xml взят из главы « Настройка среды» и должен быть расположен в том же каталоге, что и build.xml.
В результате вышеупомянутой компиляции открывается окно JasperViewer, как показано на приведенном ниже экране —
Здесь мы видим, что каждая страна и название сведены в таблицу.
Кросс-таблица из табличной части или запроса
Для примера возьмем некоторый документ с табличной частью Остатки на конец смены. Структура полей табличной части представлена на рисунке справа.
Заказчику неудобно работать с ней в таком виде, и он желает просматривать ее и редактировать в виде кросс-таблицы, как на рисунке слева.
Замечание: на картинке приводится две таблицы одновременно для наглядности. В реальных задачах обычно требуется отображать только кросс-таблицу.
Основная сложность в сопоставлении колонок кросс-таблицы с соответствующими строками табличной части. Ниже представлены три процедуры, которые решают данную задачу за несколько строк кода. Вот пример их использования:
Небольшие пояснения:
1. Дополнительная информация для связи между исходной и конечной таблицами хранится в служебной таблице. Ее необходимо сохранять на протяжении всей работы с кросс-таблицей. Ее структура простая: Имя, Заголовок и Тип колонок, а также имена полей табличной части, по сочетанию которых будут создаваться колонки. В моем примере это одно поле “Стеллаж”, но их может быть и несколько, например “Номенклатура,Характеристика”. Для рассматриваемого примера структура служебной таблицы с данными представлена на рисунке
Отмечу также, что данные методы можно использовать не только для разворачивания табличной части, но и таблицы из запроса (например, в АРМе)
Процедуры тестировались на платформе 8.3 в режиме совместимости с 8.2. Однако скорее всего будут работать и на платформе 8.1