存档

‘Report’ 分类的存档

从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使用。如http://cn.partypoker.com/大用地作为其服务器端软件连接网关此值,以沟通与连接同行。

你的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 标签:

Hyperion Interactive Report 报表动态性简介

2009年2月23日 1 条评论

前两篇文章介绍了BIRT Open Source 版的报表动态性和基于BIRT 的商业版Actuate Interactive View 的报表动态性, 这篇则介绍hyperion 的interactive report 的报表动态性, 从名字就看出这个工具主要的功能就是制作交互性的报表, 不过它跟hyperion 的报表工具SQL Production Report 不是使用同一基础结构,有点可惜. 使用起来还是蛮方便的, 通过ODBC 连接数据.

    Hyperion Interactive Report 可以创建6种格式的内容,query , result , table , pivot , report 和dashboard.  其中pivot 就是交叉报表,

 

1.query   

hyperion_ir_query1

query 内容就是一个图形化创建数据的操作,你只用从Elements 区域(左下) 拖出你需要的table , 然后选择你想要的字段, 你可以执行过滤操作.

 

sshot-3

另外一个小细节是当你使用的是Oracle数据库, 它在聚合函数里面可以使用oracle 的高级分析函数 + partition by ,order by 的语法, oracle 高级分析函数的确是很实用的, 估计其他数据库可能不会有同等的功能, 不知道它是不是也支持SQL MODEL 语法. 这对于交叉报表还是非常有用的. 而且oracle 高级分析函数的速度非常快 (计算方式不一样) , 算是hyperion interactive view 一个非常实用的功能.

 

2.result

byqir1

result 区域代表你从query 区域取出的数据, 你可以点击表头, 然后就可以执行标准的动态操作了, 其中支持的就有Filter , Sort , Add Computed Item ,Group, Break Total, Hide Column 和Format , 它Format 就是上图中显示的Number , Alignment ,Font, Border and Background. 唯一操作不太习惯的就是它不是真的报表,而显示的方式更像是一个数据库查看器. 不过功能上基本上该有的都有了.

 

3.Pivot

hyperion interactive report 的pivot 功能相对还是比较原始的. 从Result 里面得到的数据当作pivot 里面的Row Label ,Column Label 或者Fact , 但是很多交叉报表应该有的高级功能都没有.过滤它有了(是在query 里面过滤的,不是pivot 里面操作的), sort 有点击右上方的sort 按钮才有(操作上不很方便),不过象是条件性隐藏 , 条件性输出, 条件性高亮, subtotal 和grand total 都没有. 操作模式基本上跟Business Objects 企业版的那个交叉报表差不多, 功能上还有待加强.

sshot-4

 

4. chart

hyperion_ir_chart4

图表的操作也算是比较标准的, 通过在result 里面拖出字段放在Fact , X Axis, 组成图表, 同样支持选择性聚组 (就是上图中的Depth) , 显示提示,下转, 隐藏, 添加趋势线和平均线, 另外你点击X Axis , Y Axis, 数据区,边界区, Legend 区(最右边) , 都会有相应的操作,  唯一操作不太习惯的就是你要点击到它的元素上它才会弹出相应的属性和操作,而不是通过一个集中的界面显示所有的操作和属性, 这对于那些对图表不熟的新手来说非常不方便, 而且很容易就忘掉了一些属性的设置.

 

5. Report

report 就不说了, 操作上对于我不是很习惯.

 

6. Dashboard

    hyperion interactive report 里面能够支持使用Dashboard 来展现各种数据算是其最大的一个特色, hyperion 有一个专门的Dashboard Studio 来进行Dashboard 和设计和运行, 里面就可以使用前面制作了Interactive Report , 而其中最有用的一个特性就是script. 在报表生成的各种生命周期内, 动态的改变报表的行为.

sshot-6

总结

总的来说hyperion interactive report 的功能比较丰富, 细节方面的功能还需要再加强, 不过由于其不是跟它的报表产品SQL Production Report 基于同一产品线, 算是学习和操作上又要花费一些时间. 它不是基于Web 的操作,每个使用的人都需要安装客户端比较麻烦,而且操作起来的方式不算很简单(易用性不算很高), 很多操作有些让人费解. 它处理SQL 的方式使用ODBC 连接数据库, 而且是一次性取得所有数据保存起来, 对于大数据量非常的慢, 尤其是进行交叉报表的计算工作可能经常会卡死, 使用的时候还是要注意优化.

希望连续三篇的介绍报表动态交互性的文章能够给需要交互式分析数据的朋友们一些有用的资料. 更多的资料还是要查看官方的一些文档.

 

参考资料:

1. http://www.oracle.com/technology/products/bi/performance-management/index.html

hyperion 主页,你可以下载文档或学习示例

报表交互性和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 插件,支持多种排序方式.

BIRT 中定时刷新报表

2009年2月13日 没有评论

HTML 中如果我们要定时刷新某一个部分, 可以使用DOM api window对象的settimeout方法, BIRT 中当然可以直接使用html 的script , 当然主要是看刷新之后报表还是跟原来一样,参数都正确处理了.

所以在报表中加入一个text 元素, 然后选html 类型, 在其onPrepare() 方法里面加上下列代码就可以在查看报表的时候按照执行的时间进行刷新或者你也可以手工点 “refresh” 按钮进行刷新

//Build a string that contains all the parameters and their values
var paramsString = “”;
var paramDefs = reportContext.getDesignHandle().getAllParameters();
for (i = 0; i < paramDefs.size(); i++ ) {
var paramDef = paramDefs.get(i);
if (paramDef.getClass().toString() == “class org.eclipse.birt.report.model.api.ScalarParameterHandle”) {
var paramVal = reportContext.getParameterValue(paramDef.getName())
if (paramVal == null || paramVal == “null”) {
paramVal = “”;
} else if (paramVal.length > 0) {
var paramValTmp = “”;
for (j = 0; j < paramVal.length; j++) {
if (paramVal[j] != null && paramVal[j] != “null”) {
if (j > 0)
paramValTmp += “|”;
paramValTmp += encodeURIComponent(paramVal[j]);
}
}
paramVal = paramValTmp;
} else {
paramVal = encodeURIComponent(paramVal);
}
paramsString += “&” + paramDef.getName() + “=” + paramVal;
}
}

this.content=”<form name=’input’ onSubmit=’return reloadPage();’>”
+”<input type=’submit’ value=’refresh report’ onclick=’reloadPage()’>refresh manual</input></form>”
+”<script type=text/javascript’>”
+”function reloadPage() {”
//alert( targetURL );
+”    var targeturl = window.location+’”+paramsString+”‘;”
+”    location.replace(targeturl);”
+”    return false;”
+”}”
+”timer=setTimeout(‘reloadPage()’, 20000);”
+”</script>”

第一部分主要是取得当前报表的参数, 并把参数变成 &param1=value1 这种形式,因为这种形式的URL 可以被直接使用, 如果是一个参数可以接受多个值的话, 中间就是 |  来连接, 比如 1|2|3 , 最后拼接成一个总的paramsString .

第二部分主要是html 的部分, location.replace(url) ; 就是提交当前的url , 也就是刷新了.

然后使用DOM 的window.setTimeout() 方法, 其中间隔是20 秒, 不过其中也有个按钮可以手工刷新,调用的同样也是reloadPage() 这个html script .

附上报表:  .reload_test

参考资料:

http://www.birt-exchange.com/devshare/designing-birt-reports/714-reusable-library-for-reloading-a-report/#description

这个有个自动刷新的library , 不过代码只适合iportal .

http://www.w3school.com.cn/htmldom/dom_obj_location.asp

http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp

w3school 的几个dom api . 中文的. 这个站点的资源一项不错,google 才知道搞了个中文站点.

BIRT 一些基础问题解答

2008年12月29日 5 条评论

本来跑去birt-exchange.com 去下一个关于birt 用store procedure 作dataset 的文档, 看到有个中文版,就跑去actuatechina.com 下, 结果还要注册(我讨厌下东西的时候注册,我特别懒,最讨厌注册这种事) , 后来就注了个册,然后随便看了几个帖子,发现都是一些基础问题,因为很多时候BIRT的文档不可能集中在一个地方, 所以的确给很多喜欢BIRT 的朋友学习造成了一些麻烦,也有朋友抱怨说BIRT文档不好, 其实不是BIRT 文档不好,而是有很多问题都是实际的应用一个一个去解决,不可能有一份文档告诉你所有BIRT问题该怎么解决, 这就像我给你一份Java 的api 文档,你不可能知道所有java 代码该怎么写一样,还是要一个一个具体问题对应的解决, 最重要的是有示例 , 一个例子顶千言,这就是为什么需要BIRT的newsgroup , birt-exchange.com , actuatechina.com 这些资源去回答问题的, 所以没有什么必要抱怨什么没有文档, 我给你一份oracle 的参考大全,你就能成为最牛的DBA吗? 肯定不可能呀 .

下面列出一些常见的问题.

1. 作者: wc188996

希望能够在 BIRT CHART 的 category Series 上也能够实现钻取功能。有点时候在很多工程里category Series会包含很多内容,但是图片上的信息也不能完全显示,需要在category Series 上实现带参数的钻取功能。category Series可以很轻松的包含十几个甚至几十个项目,所以这点还是很实用的。
例如:在我的附件中饼图的这些个乱码上的位置,能否添加钻取功能。客户需要,郁闷啊。

birtchartdrill

答: BIRT的交互功能和script 一向是我最喜欢的, 图表的交互功能我个人认为可能是报表中最强的,(有希望打败它的可能只能在flash 图表里面找,它商业版里也有支持flash 对象的).   在一个chart 的y series 里面点击interactivity , 里面列出所有事件,选启动的mouse click 或mouse double click .Action 选Hyperlink, 然后连接你的另一个报表. 我前一个在BIRT里面高亮行的例子中http://www.gemini5201314.net/?p=151 ,那个图表就是选的Action –>Invoke Script.   如果你不是点饼图,而是点旁边的数值,就选Legend里面的interactivity , 注意Legend 还有一个Behavior 属性, 反正你都点着试一下就知道了.

 

作者: mjianguo

在birt2.3中,我用JDBC连数据库,创建数据集,创建参数(注:我用的是list box,Dynamic,此时没有选Allow Multiple Values),然后edit数据集,在Query中加入?,
在Paremeters中加入参数,Preview results ,没有问题。
此时我将一个参数中的Allow Multiple Values选中,Preview results时报表中就没有值了?
查看原因:edit数据集,点击Parmeters进入查看参数时,在上面显示此行错误:The report parameter ‘ipadd’ allows multiple values, which can not be used to link with data set parameter.
请问我该如何使用Allow Mulitple Values此选项?在SQL中要做什么变化吗?
不知说清楚了没有,请各位大侠指点迷经。。。先谢谢了

答: Query中的参数不支持link到allow multiple value的parameter 其中有个bug 跟它相关(2.3.1 以修正),

https://bugs.eclipse.org/bugs/show_bug.cgi?id=235252

这个bug 修正的是UI上要提示dataset 里面不能用parameter link 上UI要有提示的.

你的query 里面不能link multiple values 是因为java.sql.PreparedStatement 里面不可能setParameter(position,String[] params) 接受数组这种参数, 如果你要接受多个参数值可以:
1. dataset 的filter 里面加 xxx in params["allow multiple values"]
2. 或者在property binding 里面写 this.query.text="手工把params["multiple"]拼起来的sql"

 

作者: sanegod

我有这样一个需求,如附件need.jpg所示:
表格里有嵌套表!每个表绑定不同的数据集;
我有5个数据集,数据集1绑定在外层表,其他是4数据集绑定在内部的嵌套表上
z_in,z_out,z_in_cz,z_out_cz;
每个表格都一个结果,现在我想要实现:
z_in-z_out-z_in_cz-z_out_cz他们想减的结果放在aihaochazhi那个表里;
由于是四个数据集,不知道怎么实现!请大家帮忙!
把是个数据集的语句弄到一个数据这个办法考虑过,实现不了我的需求,我一定要用到4个数据集的!谢谢大家了!

答: 使用joint data set 把四个dataset 连起来,
你虽然知道每个结果肯定只有一个值,但是dataset 不可能知道呀,要是一dataset 有3个值,一个dataset 有5个值,你说最后的表格怎么画出来的.
只要你的四个dataset 使用的是同一个数据源,肯定可以用一个sql 跑出来, joint data set 一般用在不同的数据源直接dataset 连接

 

作者: iskytek

。。。。。。。。。。。。。。 交叉报表怎么没有分页选项

答 : 在crosstab 的row area 和column area 里面都有page break 选项呀, 分别是竖直分页和水平分页

 

1,birt导出PDF,如果内容是字母或数字过长,就会被截掉,怎么解决??
2,birt的WEB预览页面跟导出的PDF或打印出的样子不一样,那预览还有什么用?

答 1. 你在advanced tab 里面指定它的width 属性.
    2. 它的WEB 预览是html 的呀, 你pdf 当然是不一样的.

 

作者: qxyang007

目前我用的MVC框架,现在要用spring在后台调用birt,请问一下,该如何调用?网上说要重载一个方法renderMergedOutputModel,但,又没有实例,请教高手,能说明一下吗?急啊!谢谢了!

答 : 可以参考一下springside 的方法.
http://www.springside.org.cn/docs/reference/Birt.htm

 

我在googlecode 上建的一个收集report 示例的项目. 目前主要是birt-exchange.com 上的

http://code.google.com/p/birtdemo/

 

参考资料

http://www.birt-exchange.com/devshare/designing-birt-reports/588-create-data-source-on-stored-procedure-in-birt/#description    使用store procedure 做dataset.

http://www.actuatechina.com/thread838.html#post4250    四dataset

http://www.actuatechina.com/thread40.html    交叉报表

http://www.actuatechina.com/thread782.html     link multile values

http://www.actuatechina.com/thread852.html

分类: BIRT, Report 标签: