In Birt - группировать элементы в таблице в соответствии с подстрокой
Вопрос
Вопрос новичка, на который я не смог найти ответа.
У меня есть отчет, содержащий таблицу, содержащую несколько элементов, в которых есть столбец "Время".Я хотел бы сгруппировать товары по времени, чтобы все товары за один месяц были сгруппированы вместе.
Чтобы сделать это, я должен извлечь месяц / год из строки "Time" (формат "17:22 19.07.09") и использовать это для группировки.Я знаю, как сделать все это на Java, и я думаю, что BIRT предлагает несколько способов сделать это, но мне не удалось найти простой способ сделать это.
Если есть хороший учебник по этому вопросу, я бы с удовольствием его прочитал.
Спасибо!!
Решение
Мы сделали это следующим образом.В нашем SQL-запросе к набору данных мы выбираем оба (например) "char(my_date,iso)"
и "left(char(date,iso),7)"
(для 2009-01-05
и 2009-01
соответственно), что-то вроде:
select
left(char(my_date,iso),7) as isoyyyymm,
char(my_date,iso) as isodate,
otherfield as value
from tbl
order by my_date
Затем, когда вы создаете таблицу в отчете, столбец 1 должен быть столбцом группировки на основе isoyyyymm и пустым для этого столбца в таблице:
- заголовок,
- групповая линия данных;и
- строка подробных данных.
В итоге в дизайнере вы получите:
+--------------------------------+-----------+-----------------+
| <Header row> | Date | Value |
+--------------------------------+-----------+-----------------+
| <Group header row (isoyyyymm)> | | |
+--------------------------------+-----------+-----------------+
| <Detail row> | [isodate] | [value] |
+--------------------------------+-----------+-----------------+
| <Group footer row (isoyyyymm)> | | Total.sum( |
| | | row["value"], |
| | | null, |
| | | "Grp1") |
+--------------------------------+-----------+-----------------+
Таблица отчета по-прежнему будет группироваться по месяцам, но все отображаемые строки подробностей будут содержать полную дату:
Date Value
---------- -----
2009-01-01 7
2009-01-08 2
2009-01-15 1
2009-01-22 4
-----
14
2009-02-05 2
2009-02-12 0
2009-02-19 0
2009-02-26 1
-----
5
Ты может группируйте по интервалам, если хотите, но мы выбрали самый простой подход для тех ситуаций, когда мы можем использовать простые строки.Очевидно, что если ваш интервал составляет неделю (или что-то еще, что не поддается простому строковому анализу), вам нужно будет использовать группировку интервалов, встроенную в BIRT.
Лучшее руководство для этого (на мой взгляд) находится на странице 187 (в главе 12) книги. BIRT, Полевое руководство по отчетности.Это и Интеграция и расширение BIRT являются обязательными для любого серьезного пользователя BIRT.
Это первое абсолютно необходимо для любого дизайнера отчетов.Второй охватывает гораздо более сложные темы, такие как встроенные Java и Javascript, объектная модель отчета и базовая архитектура BIRT.Это необходимо, если вы хотите, чтобы ваши репортажи были по-настоящему эффектными.
Другие советы
Поможет ли вам бит параметров отчета, который включает в себя анализ даты и времени?
http://www.eclipse.org/birt/phoenix/deploy/viewerUsage.php#parameters
У меня есть образец отчета о DevShare BIRT Exchange, который делает именно это.ВЫ предоставляете ему регулярное выражение (настолько простое или сложное, насколько вам нужно), и оно будет использовать соответствие регулярному выражению для создания групп.
Удачи!
Это можно сделать с помощью настройки группы в самой таблице.Как создавать группы, описано в http://www.eclipse.org/birt/phoenix/tutorial/basic/basic06.php (кстати, поиск "birt table group" в Google выдает это как первое попадание).В этом случае вы можете сделать это следующим образом:
- Щелкните правой кнопкой мыши на заголовке строки для заголовка группы состояний, и появится контекстное меню .
- В контекстном меню выберите пункт Вставить Группа→ Ниже.Появится диалоговое окно Сведений о группе .
- Выберите столбец "Время" в группе В поле "Вкл" и введите время в поле "Название ".
- Выберите "месяц" в интервале поле со списком
- Нажмите кнопку ОК.
Это создает сгруппированную таблицу без каких-либо манипуляций с SQL или JS.