In Birt - группировать элементы в таблице в соответствии с подстрокой

StackOverflow https://stackoverflow.com/questions/1184281

  •  19-09-2019
  •  | 
  •  

Вопрос

Вопрос новичка, на который я не смог найти ответа.

У меня есть отчет, содержащий таблицу, содержащую несколько элементов, в которых есть столбец "Время".Я хотел бы сгруппировать товары по времени, чтобы все товары за один месяц были сгруппированы вместе.

Чтобы сделать это, я должен извлечь месяц / год из строки "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.birt-exchange.org/devshare/designing-birt-reports/746-create-a-dynamic-group-by-extracting-a-substring/#description

Удачи!

Это можно сделать с помощью настройки группы в самой таблице.Как создавать группы, описано в http://www.eclipse.org/birt/phoenix/tutorial/basic/basic06.php (кстати, поиск "birt table group" в Google выдает это как первое попадание).В этом случае вы можете сделать это следующим образом:

  • Щелкните правой кнопкой мыши на заголовке строки для заголовка группы состояний, и появится контекстное меню .
  • В контекстном меню выберите пункт Вставить Группа→ Ниже.Появится диалоговое окно Сведений о группе .
  • Выберите столбец "Время" в группе В поле "Вкл" и введите время в поле "Название ".
  • Выберите "месяц" в интервале поле со списком
  • Нажмите кнопку ОК.

Это создает сгруппированную таблицу без каких-либо манипуляций с SQL или JS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top