存档

‘BIRT’ 分类的存档

BIRT 举行开发birt 扩展大赛

2011年9月3日 没有评论

birt 在9月1号到10月15号举行一个开发birt 扩展的大赛,看得出birt 的一些弱项和发展的新思路. 奖品是iPad2 32GB 带Wifi 的,奖品还是很丰厚诱人的.具体信息上birt-exchange 就可以看到.

之前birt 的marketplace 基本和 eclipse 搞的marketplace 一样都只是一些插件的供应商集合,提交者大都是小公司和第三方合作伙伴.

birt 其实一直对第三方厂商的合作都不算太广泛,尤其是那些没有产生竞争的领域,而你又不可能进去的这个领域. 比如分析型数据仓库teradata,greenplum, ETL领域的informatica , 数据挖掘领域的各种开源的不开源的厂商. BPM,SOA,CRM,ERP,EPM,Financial 领域的各种厂商. 现在很虎的Big Data 的基于hadoop 商业化的厂商(cloudera,mapr) . 

当然有优势的还是其基于开源的社区了,这次活动也是希望完成一些不依赖商业版的部分.大致有下面这些:

1. 驱动
阅读全文…

分类: BIRT 标签:

在Jboss portal 上开发birt

2009年4月15日 3 条评论

谁知道在wordpress 下只用syntax 插件之后使用<pre lang=”xml”> 为什么xml 展现不正确,请留言告知.

 

java 的portal 技术在展现上还是具有非常大的优势的,虽然jsr 268 并没能完全统一各portal 之间的不标准性. 但是在portal 上开发展现的东西还是非常有意思的,尤其是dnd (拖拽portlet) 和partial refresh (也可以定时自动部分刷新) 特性还是非常华丽的.

BIRT 作为最好的报表框架,对于分析展现数据具有很大优势,这篇文章就解释一下如何在jboss portal 上部署birt . 在官方的birt wiki 上有一篇介绍portal 上部署birt 的,不过那个文章太老了,基于birt 2.1 的, 尤其是它的portal 容器是apache pluto , 里面还有pluto 专有的api .  这篇文章介绍的是通用portal api. 只不过特定部署在jboss portal 上,如果你想要部署在其他portal 容器也可以,修改一下portal 的部署描述符就够了,代码不用改.

ok, let’s start

任何birt 要运行起来首先要实例化一个BirtEngine (org.eclipse.birt.report.engine.api.IReportEngine) , 所以首先还是写一个util 类, 用来取得BirtEngine.

阅读全文…

分类: BIRT 标签: , , ,

使用Birt制作Dashboard 和Mashup

2009年4月5日 没有评论

在eclipsecon 大会上 Rob Murphy 介绍了一个 Mashing up Data in Web Applications with BIRT 的小技巧 , 真的是很老的一个小技巧了,主要是用birt 2.2 的jsp tag 将页面HTML元素固定在某一区域,从而使一个页面可以嵌入多个birt reportletbirtmashup

上图就是一个典型的四reportlet组成的dashboard. reportlet , 每个reportlet 可以通过交互事件与其他reportlet 进行互动(基于birt 里面的bookmark , 也就是html 里面的id), 并且可以控制UI元素大小.

另外每一部分都有html 里面的iframe 组成,你也可以部分刷新某一区域,这个演讲里面有个示例,所以不多废话了.

 

顺便ggyy 一句,很多其他BI “领导厂商”的dashboard 总喜欢用flash 来做, 一个是学习起来成本比html 要高(等于是完全学习一个新的报表制作方式),一个是交互性很复杂和难以控制 ( 不要只看到外表的帅), 其实深层的技术原因是html 的展现功力非常的不到家. 基础问题都没有被解决.

 

当你要使用这种方式制作很多dashboard , 尤其可能要重用很多UI ,甚至是要让用户自己选择组建他自己想要看的页面,别用这种方式,使用java porlet 技术,那个才是重用UI 和用户完全动态的解决方案.

普通的用户需求慢慢提高,提供用户完全的动态性才是王道 . datacenter 里面系统监控图可能会比较想要这种技术.(啥时oracle grid control 搞个这个版本就好了)

 

 

Actuate Mashboard 简介

之所以说java portal 技术是解决report  重用和用户完全动态性的根本,就在于java portal 里面可以让用户完全自己选择, 关于java portal 你可以随便下个jboss portal 或liferay portal all-in-one 包自己体验一下就懂了.

阅读全文…

分类: BIRT 标签: , ,

Birt 在eclipsecon 大会上的ppt 下载

2009年4月1日 没有评论

birt 在eclipsecon 大会上算是最耀眼的了,所涉及到的演讲题目从最基本的简单介绍开始到高级的定制报表在到用户案例介绍, 算是最全面的介绍了. 关于birt 在2009 年全部的演讲题目你可以到下面地址查看:

http://www.eclipsecon.org/2009/sessions?category=Frameworks%20-%20Reporting

所有的演讲稿基本都已上传到了birt-exchange 上, 如果你有兴趣的话,可以自行下载:

EclipseCon 2009 Integrating BIRT

 

EclipseCon 2009 BIRT Mashup with JSP Tags

 

EclipseCon 2009 – Who is BIRT? Solving Your Data Visualization Needs with Open Source Reporting

 

EclipseCon 2009 – Using and Extending Eclipse Data Tools (DTP)

 

最后一个讲dtp 的也不错,如果你打算使用birt 做类似ad-hoc query 的话,这可以算是一个很好的参考范例(可惜没有代码demo )

阅读全文…

分类: BIRT 标签: , ,

从php 调用BIRT 报表

2009年3月4日 没有评论

BIRT 最近公布了一个从php 调用birt 报表的示例,从而使php 开发环境具备了一个高水准的报表框架,后台执行引擎还是java 的,使用了php-java-bridge 这样一个开源框架,一直都听说各种基于JVM 的动态语言框架如雨后竹笋出现,还有什么java 与.net 互通的成功案例,从来都不知道java 可以和php 互通的(自己孤陋寡闻而已),而这个php-java-bridge 通过php 引擎向java web 容器(tomcat 等) 发送XML-RPC 请求,所以需要你的环境能够即支持java web 环境又支持php 开发环境. 一般典型情况是这样:

你的php 仍然使用apache 作为web server , 使用端口80, 它是默认的端口是由Apache使用。

你的tomcat 使用8080 端口作为java web container 来处理实际的BIRT 报表任务. 并且你的tomcat 里面已经部署了它提供的JavaBridge.war 应用, 里面默认是包含BIRT Runtime Engine 2.2.2 的, 里面跟BIRT Runtime 基本都一样,除了以前的jsp 文件现在变成了php 文件.

image

当有一个请求到达你的php 环境调用报表的时候, 它就会请求后台的tomcat 来实际执行这个报表,并把结果返回给php 这边. 在php 里面使用如下的代码:

<?php
define ("JAVA_HOSTS", "127.0.0.1:8080");
define ("JAVA_SERVLET", "/JavaBridge/JavaBridge.phpjavabridge");
require_once("java/Java.inc");

echo java("java.lang.System")->getProperties();
?>

当然,如果你喜欢在tomcat 里面开发php 程序,我们也不拦着你.

从上面代码看的出来,可以是多php 程序调用同一个tomcat 实例,也就是说多个普通的php + apache 的环境连接一台java+tomat 的机器就够了.

 

兼容性

这种从php 代码里面调用BIRT 报表的方式肯定是不会有100% 的兼容性的,不过目前对于常用的BIRT 功能都已经提供了对应的php class ,常用的BIRT 功能都是支持的:HTML ,Excel  ,PDF ,WORD 的输出,图片的生成,library 的使用,drill-through , javascript 的事件等。

目前已知的是它不包括那个birt open source viewer , 可以简单理解为那个长得不太好看的导航条部分,它主要提供运行参数的UI , TOC 的控制, 导出数据 和打印的功能,因为那个部分是jsp + prototype.js 做的,如果你需要做参数页面的话, 你要自己用html + php 脚本来做,设置参数就是用

$task->setParameterValue(“Top Count”, new java(“java.lang.Integer”, 6));

这样的语句就可以了.

其他的关于BIRT 功能性上的兼容性还未知,

关于java 方面的兼容性根据php-java-bridge 网站上给出的信息是:支持jsp , jsf 或其他框架,J2EE 后台的容器和apache 的load balance.

 

性能

BIRT 报表本身的性能是非常快的,使用了这个php-java-bridge 之后,从php 调用BIRT 报表也同样非常的快,根据我自己实际测试的结果是比从java 调用BIRT 快一点点.

从JAVA 调用BIRT 的第一次执行会比较慢,主要是因为要生成Document 文件,第二次或之后的速度就是正常的速度. 一般考虑性能指标都不算第一次的时间。

而这个php 版的BIRT 第一次执行BIRT 报表的时候就会非常快,跟第二次或之后的速度差不多,而即使是第二次执行,php 版的还是比java 版的要快一点点,0.5秒左右.

 

应用

我对php 开发语言是完全不懂的,不过从google 出来的结果看,好像php 没有一个很强力的报表框架 , 大多数报表需求还是使用比较低层的API , (从http://www.oschina.net/project/lang/22?tag=133 了解到的),如果说的不对还请高手指出.

这次从Actuate 放出的php 版的BIRT 在很大层度上强化了php 的报表分析需求,Zend 跟Actuate 有合作开发一个商业版的php birt 框架,具体比这个开源版的强在哪些方面还不知道,我估计是有一个php 版的Actuate BIRT Viewer , (就是那个有动态交互功能的商业版) . 不过由于这毕竟不是纯php 版,而且php 开发人员也不一定会很想用一个java 环境的报表框架,尤其很重要的是企业在关键应用上使用这种php + java 的混合模式应该还是持保守态度(我猜的,除非功能需求真的很重要), 至于php 的传统领域WEB 上,应该前台还是比较少,后台是最大的应用领域,毕竟后台的统计分析需求还是比较多的, 而且服务器的环境容易控制,应该还是会受到一定程度支持的. 无论像是论坛,博客,在线社区等等这些php 的应用后台一般都是在公司内部使用,统计分析需求还是会很容易选择这项技术的.

另外一个我猜测的应用领域应该是服务器管理监控,像是不少的服务器监控领域都是使用的php , python , perl 之类的语言开发的,而且服务器管理监控的数据分析需求会远大于语言的限制, 图表,下转,动态性都是这类服务器管理领域重要的需求,尤其是一些大的互联网公司要开发满足自己管理需求的特定服务器管理软件,估计这种需求会远大于语言本身的限制.

不过要求php 开发人员知道有这样一个可选项估计Actuate 公司还有很长的路要走. php 程序员和报表开发员会需要更多的综合性知识. 至于应用怎么样,还需要时间去检验.

 

参考资料:

http://www.theserverside.com/tt/articles/article.tss?l=IntegratingBIRTwithPHP

Jason Weathersby 在TSS 上发表的关于怎样在php 中集成BIRT 的详细文章.

 

http://www.birt-exchange.com/devshare/deploying-birt-reports/743-calling-birt-from-php/#description

下载它提供的集成包,一个war 文件,部署在tomcat 里面就可以用了, 里面提供了php 的文件和BIRT 报表.

注意看具体文档.

 

http://php-java-bridge.sourceforge.net/pjb/

php-java-bridge 的主页.

分类: BIRT, Report 标签: , ,

BIRT 2.3.2发布于BIRT 2.5 预览

2009年2月28日 没有评论

BIRT 2.3.2 已经于09年2月25号发布了, 这是一个bug fix 版,主要是修复2.3 版中的一些bug , 并不添加任何的新功能. 根据BIRT 开发的习惯, 每一个版本发布后都会发布至少两个版本的bug fix 版, 比如2.3.1 和2.3.2 , 之后到下一版本发布前的两三个月才会添加新的功能进入测试. 2.3.1 版本主要是修复一些关于BIDI 方面的有关bug , 2.3.2 修复bug 则比较多方面,如果你感兴趣,可以到它的bugzilla 去查, 地址如下:

https://bugs.eclipse.org/bugs/buglist.cgi?classification=BIRT&product=BIRT&target_milestone=2.3.2

其中列几个我敢兴趣的:

247126250609  修复关于debug 时候断点不能正确执行的问题.

249914   crosstab 中report-column-header 没正确执行

251656   Shortcut key (Ctrl+S) doesn’t work when switching to Script/XML source view

 

BIRT 2.5 版仍然还是和eclipse 的Galileo 版一同发行,应该还是在6月28号. 这次BIRT 2.5 版提供的新功能不算很激动人心, 主要是在易用性方面继续下功夫. 如果你敢兴趣的话可以去 http://www.eclipse.org/projects/project-plan.php?projectid=birt 看一下, 或者你有什么特定的需求也可以自己去提.

BIRT 2.5 新功能将主要集中在Report Layout , Page Aggregate , Page Break ,designer usability,Parameter usability,Chart usability,Data Access usability,Scripting usability,Performance Improvements,Charting improvements,Crosstab improvements,XML Data Source Improvements,Improve Bidirectional (Bidi) ,

Improve stylesheets

其中有几个我比较关心的. 比如

Incorrect image size in generated pdf [241194]

Image appears enlarged in pdf report [234432]

Provide ability to scale big image ot fit a page for PDF [240805]

Enhancement: add DPI property in report design [237426]

Newspaper Page Layout [133218] (简单来说就是像报纸布局一样,两栏或更多栏输出)

 

Add support for page aggregates / page totals [159857] (有很多财务报表需要这种,不过很难做)

Allow master page header and footer to access contents in report page [212837] (这个蛮有用的)

 

Removing Formatting from the GUI [211518]

 

Support to set multiple default values when create list-box parameter[0705] [203940] (这个用script 也可以做,不过现在在GUI上提高了易用性)

 

Set table / chart to hide when no data [204922]  ( 估计很多人都想要这个功能)

Ability to warn when a chart is empty [218034]

 

Support Union Data Set. [166331] (现在是one dataset joint one dataset , 这个需求是一次性join 多个dataset).

[Joindataset] choose more than one field to join two datasets [211747] (target milestone: 2.5.0) (现在通过computed column 也能够做到, 这个功能是简化一点)

 

Improvements to Java script API – Report item level operations not easy to perform [262949] (这个对写script 很有帮助,建议看一下)

 

Right mouse click trigger condition [200607] (鼠标事件分的真细)

 

Xtab filter should allow filtering on any cube dimension [190722] (很有用的一个功能)

Crosstab: Add the Rank function in the aggregations [206152]  (很有用的一个功能)

 

nowrap not working [254933] (长文本字符串不换行的问题)

 

 

如果你使用2.3 版本并且遇到了一些bug 的话,还是建议升级到新的bug fix 版本2.3.2 (先看一下是不是你遇到的bug fix 了), 等BIRT 出新的2.5 版本吧

 

 

参考资料

http://www.eclipse.org/birt

birt 主页

 

http://download.eclipse.org/birt/downloads/

2.3.2 下载地址

 

http://www.eclipse.org/projects/project-plan.php?projectid=birt

BIRT 2.5 的一些功能预览

分类: BIRT, Report 标签:

报表交互性和Actuate Interactive View简介

2009年2月20日 没有评论

为了增强用户分析数据的功能, 用户往往希望在查看报表的同时能够修改报表,一般把这种功能叫做交互式报表, 不少BI 厂商都提供了这种在线交互式分析的能力, Actuate 在Open Source Birt  View的基础上也提供一个商业版的Interactive View,

主要提供修改表头标题, label , 改变分页数大小, 修改聚合分组列 ,隐藏显示列, 添加计算列 过滤数据 . 改变样式,对齐方式

对于图标则支持过滤数据,改变图标的子类型, 修改图标的标题,大小等样式.

这些动态交互性其实在上一篇文章中http://www.gemini5201314.net/?p=287  都有提高, 其中有些动态功能也可以使用一些script 完成, 但是这些功能都需要大量添加script , 并且不能把修改后的报表保存成新的格式以便满足不同角度的分析需要.

sshot-9

    图1: 对列的操作

 

sshot-10

    图2: 聚合分组

 

sshot-11

    图3: 过滤数据 , 支持集合逻辑操作, 同时满足和满足部分要求

 

sshot-12

    图4: 添加计算列

 

sshot-1

    图5: 图表过滤数据

 

所有这些特性都是因为BIRT 具有良好的API , 你可以通过API 来修改报表的行为, 当然目前的Interactive View 还没有完全实现所有BIRT API 支持的操作, 对比一下BIRT API 就可以看出, 另一些暂时没实现的功能比如有: 基于条件的隐藏列或行, 基于条件的高亮行(目前只是列), Mapping 功能完全没有(比如一个人年龄是10-20 ,显示出来的就是青年,>50 就是老年) , TOC ,bookmark , 改变Data Binding值, 动态添加hyperlink 或drill through ,添加tooptip 和事件 ,图标里的interactive 一个都没有.

不过总的来说,interactive view 还是非常能满足一个普通用户分析报表的需求, 尤其是操作起来简单和修改后的报表可保存.

而且很容易和其他项目集成, 集成步骤基本跟birt 一样. 价格好像是2500美元/服务器, 如果要服务的话就是4500美元, 基本还是很便宜的. 不知道国内买打多少折.

 

参考资料

http://www.birt-exchange.com/products/interactive-viewer/#features

interactive view 官方简介.

 

http://www.gemini5201314.net/?p=287

部分动态功能可以通过脚本实现的方法

BIRT 报表的动态交互性

2009年2月18日 2 条评论

birt 提供了不少报表交互性, 像是TOC (table of content) , Bookmark , Hyperlink , 图标的交互性和一些script 能够完成的工作. 但是有时候用户可能更需要的不是一开始把报表做成某种形式,而是查看了数据之后,觉得可能要自己来简单的更改一下报表的样式,并且保存下来, 随着数据的不同,同一个报表可能最后会随着分析角度的不同而出现不同的报表展现形式, 其中主要的用户交互性有: 动态排序, 动态过滤, 动态聚合,动态分组,动态显示隐藏列, 改变列的位置, 改变样式. 图表数据过滤,图表样式或格式的改变 (饼图变成柱状图之类的).

在开始介绍怎么样制作BIRT 的动态交互报表之前, IBM developerwork 上有一篇文章介绍BIRT的提示与技巧的文章建议大家先看看(看下面的参考资料) ,

1. 动态排序.

这个功能恐怕任何一个程序都会要求有的, 现在不少ajax 的table 基本上都有能够点击表头进行排序的功能.使用birt 制作动态排序的报表有几种方式. 有两种已经在IBM 上那篇文章介绍了, 一种方式是在表头上加链接,连接到另一个表,并且传递参数怎么排序的, 一种方式是改变sql 语句, 在where clause 后加sort by . 另外我还有两种动态排序的方式: 一种是通过客户端javascript 排序, 一种是通过BIRT API 在运行时排序. 客户端javascript 排序方式其实已经很普遍了, 不少Ajax 库都具有这种table 插件, 象是jquery 的jsgrid 或是flexigrid 插件,YUI 的table 插件也支持不少排序方式. 这种方式只要导入几个js 文件, 一两行代码就可以了,而且还有不少漂亮的样式. 另一种通过BIRT API 在运行时改变排序行为的方式也只需要几行script 就可以完成: 在table 的onPrepare() 事件加上以下代码:

importPackage (Packages.org.eclipse.birt.report.model.api.simpleapi);
if ( params["paramSortOrder"].value != null ){
var sortCondition = SimpleElementFactory.getInstance().createSortCondition();
switch (params["paramSortOrder"].value){
case “city” :
sortCondition.setKey(“row[\"CITY\"]“);
break;
case “state” :
sortCondition.setKey(“row[\"STATE\"]“);
break;
}
sortCondition.setDirection(“asc”);
this.addSortCondition(sortCondition);
}

里面使用的是table 的 addSortCondition 函数 , 当运行的时候,你可以输入你想要排序的列,报表在运行的时候根据你输入列的名称来排序,这种排序方式对于大数据量可能不适合,它不是在sql 里面加的排序条件,而是取出来之后排序的数据. 后面会附上一个实例报表,运行一下就知道了.

2. 动态过滤,动态聚合,动态分组

动态创建过滤条件,动态聚合,动态分组的方法跟上面的script 差不多,就是API 用的不一样, 在这里就不多介绍了,当然也可以通过建立参数过滤数据,建立分组条件来达到同样目的(虽然不是动态交互的).

3.,动态显示隐藏列,

创建一个控制显示一列的boolean 参数, 在column 的visibility 上填这个参数就够了.

4.改变列的位置

通过改变data binding 的方式, 改变Data元素的data binding.

5.改变样式

这个见的最多了,this.style.xxx = xxx 改变样式.

动态隐藏
动态排序
参考资料

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0708tomlyn/

IBM 的developerwork BIRT 提示与技巧.

http://www.birt-exchange.com/devshare/designing-birt-reports/675-birt-interactivity/#description

介绍BIRT 交互性的, 基于BIRT 2.1

http://birtworld.blogspot.com/2007_03_01_archive.html

介绍怎么样动态隐藏table column 和 chart 数据的.

http://www.flexigrid.info/

jquery 的一个table 插件, 支持排序,显示隐藏列,调整列的高度宽度等

http://developer.yahoo.com/yui/datatable/

YUI的table 插件,支持多种排序方式.