一个我无法找到答案的新手问题。
我有一个报告,其中包含一个包含多个具有“时间”列的项目的表格。 我希望按时间对项目进行分组,以便将同月的所有项目组合在一起。
要做到这一点,我必须从“时间”字符串中提取月份/年份(格式为“17:22 19/07/09”)并将其用于分组。 我知道如何用Java做这一切,我认为BIRT提供了几种方法来做到这一点,但我无法找到一种简单的方法来做到这一点。
如果有一个很好的教程,我很乐意看看。
谢谢!
答案 0 :(得分:2)
我们按如下方式完成了。在我们对数据集的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的间隔分组。
最好的教程(在我看来),在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的匹配来创建组。
祝你好运!
答案 3 :(得分:0)
这可以通过表格中的组设置来完成。 http://www.eclipse.org/birt/phoenix/tutorial/basic/basic06.php中描述了如何创建群组(顺便说一句,在Google中搜索'birt table group'这是第一次点击)。 在这种情况下,您可以这样做:
这会创建一个没有任何SQL或JS摆弄的分组表。