在Birt中 - 根据子串在表中组项

时间:2009-07-26 11:03:11

标签: eclipse birt

一个我无法找到答案的新手问题。

我有一个报告,其中包含一个包含多个具有“时间”列的项目的表格。 我希望按时间对项目进行分组,以便将同月的所有项目组合在一起。

要做到这一点,我必须从“时间”字符串中提取月份/年份(格式为“17:22 19/07/09”)并将其用于分组。 我知道如何用Java做这一切,我认为BIRT提供了几种方法来做到这一点,但我无法找到一种简单的方法来做到这一点。

如果有一个很好的教程,我很乐意看看。

谢谢!

4 个答案:

答案 0 :(得分:2)

我们按如下方式完成了。在我们对数据集的SQL查询中,我们选择(例如)"char(my_date,iso)""left(char(date,iso),7)"(分别用于2009-01-052009-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的间隔分组。

最好的教程(在我看来),在BIRT, A Field Guide to Reporting的第187页(第12章)。对于任何严肃的BIRT用户来说,Integrating and Extending BIRT都是必备的。

这首先对任何报告设计师都至关重要。第二部分涵盖更高级的主题,如嵌入式Java和Javascript,报表对象模型和BIRT的底层架构。如果您希望报告真实壮观,则需要这样做。

答案 1 :(得分:0)

此处的报告参数位是否包含日期时间解析对您有帮助吗?

http://www.eclipse.org/birt/phoenix/deploy/viewerUsage.php#parameters

答案 2 :(得分:0)

我有关于BIRT Exchange DevShare的样本报告,它可以做到这一点。你为它提供一个正则表达式(根据你的需要简单或复杂),它将使用RegEx的匹配来创建组。

http://www.birt-exchange.org/devshare/designing-birt-reports/746-create-a-dynamic-group-by-extracting-a-substring/#description

祝你好运!

答案 3 :(得分:0)

这可以通过表格中的组设置来完成。 http://www.eclipse.org/birt/phoenix/tutorial/basic/basic06.php中描述了如何创建群组(顺便说一句,在Google中搜索'birt table group'这是第一次点击)。 在这种情况下,您可以这样做:

  • 右键单击行的标题 状态组标题和上下文菜单 将会显示。
  • 从上下文菜单中选择“插入” 组→下面。组详细信息对话框 出现。
  • 选择组中的“时间”列 在字段中键入名称中的时间 字段。
  • 在间隔中选择“月” 组合框
  • 单击“确定”。

这会创建一个没有任何SQL或JS摆弄的分组表。