BIRT
使用说明书
(Vx.x)
北京神州数码思特奇信息技术股份有限公司
二〇一〇年四月
1 BIRT介绍... 4
2 应用集成... 5
2.1 添加Jar包、配置web.xml. 5
2.2 报表查询界面集成... 15
2.2.1 集成EXCEL报表工具... 16
2.3 对BIRT显示界面的一些修改... 17
2.4 备忘事项... 20
3 报表配置... 22
3.1报表模板的创建... 28
3.2使用公用的数据源... 35
3.3参数的配置... 39
3.3.1 配置?形式的参数... 39
3.3.2 配置脚本形式的参数... 43
3.1 隔行高亮显示... 44
3.2 引用定义好的CSS样式... 46
3.3 图表配置... 49
3.4 字段收敛(根据用户group_id隐藏字段) 55
3.4.1 数据集beforeOpen脚本中增加... 56
3.4.2 修改报表Sqlquery. 56
3.4.3 修改报表模板... 58
4 尚未解决问题列表... 59
4.1 表头固定... 59
4.2 Word导出乱码... 59
1 BIRT介绍
BIRT (Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 J2EE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。BIRT 也提供了图表引擎让你能为应用增加图表。
扩展阅读:
1.www.eclipse.org/birt
2.www.birt-exchange.com
3.www.actuate.com
4.www.actuatechina.com
目前最新版本为2.5,但新的版本可能存在问题,也没有前人的经验借鉴,所以我们使用的版本是2.3.2。
使用前请先下载birt-rcp-report-designer-2_3_2(eclipse报表设计器)、birt-runtime-2_3_2_2(BIRT报表运行环境)
2 应用集成
BRIT运行环境要求
Java 1.5 JDK/JRE以上
Weblogic9以上
2.1 添加Jar包、配置web.xml
环境为weblogic10,jdk1.6
应用为渠道佣金系统WEB应用
birt-runtime-2_3_2中WebViewerExample
copy WebViewerExample\WEB-INF\platform 到当前工程WEB-INF下
copy birt.tld 到当前工程WEB-INF\tld下
copy WebViewerExample\WEB-INF\lib 到当前工程WEB-INF\lib下
copy WebViewerExample\WEB-INF\server-config.wsdd 到当前工程WEB-INF下
copy WebViewerExample\WEB-INF\viewer.properties 到当前工程WEB-INF下
copy js.jar 到weblogic/wlserver_10.3/server/lib/下
编辑chn_domain/bin/setDomainEnv.sh 修改CLASSPATH,增加${WL_HOME}/server/lib/js.jar
CLASSPATH="${WL_HOME}/server/lib/js.jar${PRE_CLASSPATH}${CLASSPATHSEP}${WEBLOGIC_CLASSPATH}${CLASSPATHSEP}${POST_CLASSPATH}${CLASSPA
THSEP}${WLP_POST_CLASSPATH}"
copy WebViewerExample\webcontent\birt 到当前工程webRoot规下
copy WebViewerExample\report、logs、documents、scriptlib 到刚copy过来的webRoot\birt下
编辑web.xml
2.2 报表查询界面集成
BIRT参数输入界面
BIRT的参数输入界面为弹出页面,并且很多个性化的参数输入类型不能满足,如日期框营销架构、级联参数等。所以就使用我们原有EXCEL报表工具输入参数的页面,通过URL传参。
2.2.1 集成EXCEL报表工具
新增java类
sitech/channel/common/DataConnection.java //数据库操作
sitech/channel/common/ExcelBean.java //Excel操作
sitech/channel/common/Item.java //简单实体类
sitech/channel/common/ToolsOfSystem.java //工具类
sitech/channel/common/WhereTable.java //简单实体类
sitech/channel/sireport/action/ReportAction.java //strutsAction
sitech/channel/sireport/service/QryWhereBean.java //Excel报表Bean
sitech/channel/sireport/service/RepQueryBean.java //Excel报表Bean
DataConnection.properties //数据库链接配置文件
/gdchn/chnweb/WEB-INF/sc-sys.xml
type="sitech.channel.sireport.action.ReportAction" validate="false" parameter="command" scope="request">
新增
/gdchn/chnweb/report目录
/gdchn/chnweb/activeX 目录
/gdchn/chnweb/ext目录 //ext js相关文件
2.3 对BIRT显示界面的一些修改
/gdchn/chnweb/birt/pages/layout/FramesetFragment.jsp
/gdchn/chnweb/birt/pages/control/ToolbarFragment.jsp
/gdchn/chnweb/birt/pages/control/NavigationbarFragment.jsp
if( false)//attributeBean.isShowNavigationbar( ) )
{
%>
HEIGHT="25px"
<%
}
else
{
%>
style&#61;"display:none"
<%
}
%>
/gdchn/chnweb/birt/styles/style.css
/******************************************************************************
* Toolbar
******************************************************************************/
.birtviewer_toolbar
{
height:26px;
background-color:#f0f4f5;
font-family:Verdana;
font-size:8pt;
border-top-width:1px;
border-top-style:solid;
border-top-color:#808080;
border-bottom-width:1px;
border-bottom-style:solid;
border-bottom-color:#808080;
}
/******************************************************************************
* Navigation bar
******************************************************************************/
.birtviewer_navbar
{
height:26px;
background-color:#f0f5f5;
font-family:Verdana;
font-size:8pt;
border-left-color:#808080;
border-left-style:solid;
border-left-width:1px;
}
2.4 备忘事项
------------配置渠道菜单时&,替换为%26
chnnew/sireport.do?command&#61;query%26queryid&#61;1000001
EXT以UTF-8编码
修改过滤器&#xff0c;sitech.channel.framework.util.CharacterEncodingFilter
增加
if("/sireport.do".equals(request.getRequestURI())){
request.setCharacterEncoding("UTF-8");
}
3 报表配置
1.新建一个报表模板&#xff1a;点击File--New File--New Report弹出对话框如下图&#xff1a;
File name给报表模板命名&#xff0c;保存在一个路径下&#xff0c;可以去掉对号&#xff0c;自定义保存的路径。
点击 Next>
2.点击Next后进入&#xff0c;报表模板类型的选择&#xff0c;一般情况下是选择Blank Report&#xff08;空白的模板类型&#xff09;&#xff0c;这样方便自己来设计模板的样式。选择Blank Report后点击Finish
3.一个命名为new_report_8的空白的报表模板已经创建完成&#xff0c;接下来要对这个报表进行数据源的配置&#xff0c;选择Data Explorer&#xff08;数据资源管理的标签&#xff09;
4.在Data Sources右键点击选择New Data Source,进行数据源的配置&#xff0c;以创建JDBC Data Source 为例进行说明&#xff0c;点击Next
5.点击Next后&#xff0c;对数据源进行配置&#xff0c;点击Manage Drivers 可以加载数据库驱动文件。配置完成后点击OK&#xff0c;一个数据源建立完成。
6.数据源建立完成&#xff0c;开始建立数据集&#xff0c;先选择刚才创建好的数据源名字 Data Souce&#xff0c;
对数据集进行命名:TestDS&#xff0c;点击Next>
7.点击Next> &#xff0c;在左边选择刚才定义好的数据源Data Source 筛选出要操作的表&#xff0c;可进行拖拽&#xff0c;也可以自己拼写SQL语句。然后点击OK。
8.一个数据集建立完成了&#xff0c;可以点击 Preview Results 进行预览
下面是预览的结果&#xff0c;可以查看输出的字段
9.建立好了数据集&#xff0c;接下来是要进行参数的配置&#xff0c;一张报表&#xff0c;一般情况下会输入多个参数&#xff0c;来查询出想得到的结果。
3.1报表模板的创建
1.新建一个报表模板&#xff1a;点击File--New File--New Report弹出对话框如下图&#xff1a;
File name给报表模板命名&#xff0c;保存在一个路径下&#xff0c;可以去掉对号&#xff0c;自定义保存的路径。
点击 Next>
2.点击Next后进入&#xff0c;报表模板类型的选择&#xff0c;一般情况下是选择Blank Report&#xff08;空白的模板类型&#xff09;&#xff0c;这样方便自己来设计模板的样式。选择Blank Report后点击Finish
3.一个命名为new_report_8的空白的报表模板已经创建完成&#xff0c;接下来要对这个报表进行数据源的配置&#xff0c;选择Data Explorer&#xff08;数据资源管理的标签&#xff09;
4.在Data Sources右键点击选择New Data Source,进行数据源的配置&#xff0c;以创建JDBC Data Source 为例进行说明&#xff0c;点击Next
5.点击Next后&#xff0c;对数据源进行配置&#xff0c;点击Manage Drivers 可以加载数据库驱动文件。配置完成后点击OK&#xff0c;一个数据源建立完成。
6.数据源建立完成&#xff0c;开始建立数据集&#xff0c;先选择刚才创建好的数据源名字 Data Souce.
对数据集进行命名:TestDS&#xff0c;点击Next>
7.点击Next> &#xff0c;在左边选择刚才定义好的数据源Data Source 筛选出要操作的表&#xff0c;可进行拖拽&#xff0c;也可以自己拼写SQL语句。然后点击OK。
8.一个数据集建立完成了&#xff0c;可以点击 Preview Results 进行预览
下面是预览的结果&#xff0c;可以查看输出的字段
3.2使用公用的数据源
Birt也可以不需要没张报表模板都建立数据源&#xff0c;可以创建一个公用的数据源&#xff0c;使每个报表模板都引用这个数据源。首先来创建一个公用的数据源。
1.点击File>>New>>New Library&#xff0c;进入下面的换面&#xff0c;然后给公用数据源进行命名&#xff0c;选择公用数据源的存储路径&#xff0c;一般情况与报表模板存储在一个路径下。然后点击Finish.
2.进行公用数据源的配置&#xff0c;步骤与在报表模版中配置数据源是一样的。
首先在Data Sources右键点击选择New Data Source,进行数据源的配置&#xff0c;以创建JDBC Data Source 为例进行说明&#xff0c;点击Next
点击Next后&#xff0c;对数据源进行配置&#xff0c;点击Manage Drivers 可以加载数据库驱动文件。配置完成后点击OK&#xff0c;一个数据源建立完成。这样一个公用的数据源就建立完成了。
3.公用的数据源已经创建完成&#xff0c;下面就要在报表模板中引用公用数据源&#xff0c;还是以之前创建好的报表模板new_report_8.rptdesign为例&#xff0c;把刚才制作好的公用数据源引用到new_report_8模板中。
(1)首先打开new_report_8.rptdesign&#xff0c;然后Window>>Show View>>Resource Exploer 打开资源管理面板&#xff0c;在下面的截图中可以看到&#xff0c;我们刚才建立的功用的数据源&#xff0c;new_library.rptlibrary,还可以看到&#xff0c;定义好的数据源test_Library
5.在test_Library上点击右键&#xff0c;选择Add to Report,这样就会把这个公用的数据源添加到报表模板中。
6.可以在下面的截图中看到&#xff0c;模板中有两个数据源&#xff0c;一个Data Source是之前我们在我们在报表模板中建立的&#xff0c;另一个 test_Library是引用自公用数据源
3.3参数的配置
下面介绍报表参数配置进行说明&#xff0c;参数的配置主要有两种形式&#xff0c;一个是?的形式&#xff0c;还有一种是利用script脚本进行参数的替换&#xff0c;下面分别说明
3.3.1配置?形式的参数
以new_report_8为例&#xff0c;使用之前在new_report_8建立好的数据集TestDS
打开TestDS数据集&#xff0c;使其引用test_Library数据源&#xff0c;替换了我们之前以用的Data Source数据源。
打开Query查询窗口&#xff0c;拼写SQL语句&#xff0c;?形式就是要查询时&#xff0c;输入的参数。
下面的两个参数&#xff0c;是需要从外面输入的&#xff0c;所以要对两个参数进行配置。
下面如图是要配置两个要输入的参数&#xff0c;进行查询&#xff0c;右键Report Parameters>>New Parameter
点击New Parameter,进入配置参数的界面&#xff0c;配置参数名称、参数类型、参数展示的形式&#xff0c;默认值等信息&#xff0c;如果参数不是必须填写的可以把IS Required的勾去掉。配置完成点击OK
为刚才数据集的两个参数已经配置好&#xff0c;如下图
接下来是让TestDS数据集引用配置好的两个参数&#xff0c;打开数据集TestDS
点击左侧Parameters>>New 把刚才配置好的两个参数引入进来&#xff0c;注意参数的顺序要与?号的顺序一致。这样?形式的参数就配置完成了。可以进行预览
3.3.2配置脚本形式的参数
还是引用上面的数据集&#xff0c;是以脚本替换的形式进行查询的&#xff0c;打开TestDS数据集然后进行SQL语句的拼写。
在刚才的SQL语句基础上多了一个条件&#xff0c;是rownum<&#61;
${rownum}是要在脚本中被替换的。在Parameters中配置rownum参数
下面进入script脚本中&#xff0c;选中TestDS,右侧报表工作区&#xff0c;点击script, BeforeOpen下编写脚本。Before Open表示在执行SQL语句之前进行了参数的替换。这样就可以脚本形式替换参数&#xff0c;就可以执行了。
3.1 隔行高亮显示
点击右侧报表配置工作区中的LayOutb标签&#xff0c;选中要高亮显示的行&#xff0c;一般是Table-Detail,选择Higthgts,点击Add
点击Add 弹出窗口进行配置如图进行配置&#xff1a;
3.2 引用定义好的CSS样式
显示出Outline,删除style下birt默认的样式&#xff0c;引用定义好的样式
然后右键 Styles>>Use CSS File&#xff0c;引用外部定义好的birt.css.
(1)表头如何引用样式&#xff1a;
选中Table-Header右键>>Style>>Apply Style>>table-th
(2)如何引用报表内容样式&#xff1a;
选中Table-Detail右键>>Style>>Apply Style>>tables-rows
(3)报表最后一样引用样式
选中Table-Footer右键>>Style>>Apply Style>>tables-last-row
(3)固定表头使其内容显示在一行
选中要固定的内容右键>>Style>>Apply Style>>tip
3.3 图表配置
表TEST_CHART
字段名 | 字段类型 | 是否可为空 |
YEARMONTH | VARCHAR2(6) | Y |
TYPE | VARCHAR2(10) | Y |
NUM | NUMBER(8) | Y |
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200910&#39;, &#39;2G开户&#39;, 9000);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200910&#39;, &#39;3G开户&#39;, 7500);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200910&#39;, &#39;上网卡&#39;, 5700);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200911&#39;, &#39;2G开户&#39;, 3000);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200911&#39;, &#39;3G开户&#39;, 2500);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200911&#39;, &#39;上网卡&#39;, 7700);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200912&#39;, &#39;2G开户&#39;, 900);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200912&#39;, &#39;3G开户&#39;, 750);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;200912&#39;, &#39;上网卡&#39;, 570);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201001&#39;, &#39;2G开户&#39;, 9900);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201001&#39;, &#39;3G开户&#39;, 9750);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201001&#39;, &#39;上网卡&#39;, 9570);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201002&#39;, &#39;2G开户&#39;, 2900);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201002&#39;, &#39;3G开户&#39;, 2750);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201002&#39;, &#39;上网卡&#39;, 2570);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201003&#39;, &#39;2G开户&#39;, 9900);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201003&#39;, &#39;3G开户&#39;, 9750);
insert into TEST_CHART (YEARMONTH, TYPE, NUM)
values (&#39;201003&#39;, &#39;上网卡&#39;, 9570);
commit;
新建数据集
选中数据集
修改markers大小为2
3.4 字段收敛(根据用户group_id隐藏字段)
以[ 2G发展量报表 ]为例
根据不同用户&#xff0c;判断是否隐藏后付费用户数
省中心用户
地市用户
表DFND_HIDDEN_COL&#xff1a;
字段名 | 字段类型 | 是否可为空 | 含义 |
FUNCTION_CODE | VARCHAR2(10) | N | 功能代码 |
LOGIN_GROUP_ID | VARCHAR2(10) | N | 登陆group_id |
HIDDEN_SEQ1 | NUMBER | Y | 1为隐藏 |
HIDDEN_NOTE1 | VARCHAR2(40) | Y |
|
HIDDEN_SEQ2 | NUMBER | Y |
|
HIDDEN_NOTE2 | VARCHAR2(40) | Y |
|
HIDDEN_SEQ3 | NUMBER | Y |
|
HIDDEN_NOTE3 | VARCHAR2(40) | Y |
|
HIDDEN_SEQ4 | NUMBER | Y |
|
HIDDEN_NOTE4 | VARCHAR2(40) | Y |
|
HIDDEN_SEQ5 | NUMBER | Y |
|
HIDDEN_NOTE5 | VARCHAR2(40) | Y |
|
FUNCTION_CODE | LOGIN_GROUP_ID | HIDDEN_SEQ1 | HIDDEN_NOTE1 | HIDDEN_SEQ2 |
9445 | 16128 | 1 | 后付费发展数 |
|
3.4.1 数据集beforeOpen脚本中增加
this.queryText &#61; this.queryText.replaceAll("\\$\\{login_group_id\\}",params["loginGroupId"].value);
3.4.2 修改报表Sqlquery
新增红色字体部分
SELECT aa.*, bb.hidden_seq1 from (
SELECT d.GROUP_ID,
CASE d.root_distance
WHEN 1
THEN SUBSTR (d.group_name, 5, 2)
ELSE d.group_name
END group_name,
e.class_code, e.class_name, g.brand_type_name t0,
SUM (pre_lucky) t1, SUM (pre_pop) t2, SUM (pre_up) t3,
SUM (pre_other) t4, SUM (pre_tot) t5, SUM (after_world) t6,
SUM (tot_2g) t7, d.queue_index, d.root_distance rd1,
e.root_distance rd2,
&#39;${login_group_id}&#39; login_group_id
FROM pmrt.tb_rpt_2g_serv_day a,
dchngroupmsg b,
dchngroupinfo c,
schnclassinfo f,
schnbrandcode g,
(SELECT b.GROUP_ID, a.group_name, a.queue_index, a.root_distance
FROM dchngroupmsg a, dchngroupinfo b
WHERE b.parent_group_id &#61; &#39;${parent_group_id}&#39;
AND b.denorm_level &#61; &#39;${group_level}&#39;
AND a.GROUP_ID &#61; b.GROUP_ID) d,
(SELECT b.class_code, a.class_name, a.root_distance
FROM schnclassmsg a, schnclassinfo b
WHERE b.parent_class_code &#61; &#39;${parent_class_code}&#39;
AND b.denorm_level &#61; &#39;${class_level}&#39;
AND a.class_code &#61; b.class_code) e
WHERE a.GROUP_ID &#61; b.GROUP_ID
AND b.GROUP_ID &#61; c.GROUP_ID
AND b.class_code &#61; f.class_code
AND c.parent_group_id &#61; d.GROUP_ID
AND f.parent_class_code &#61; e.class_code
AND a.deal_date >&#61; ${begin_time} and a.deal_date<&#61;${end_time}
AND a.product_id &#61; g.product_id
AND g.brand_type &#61; &#39;10&#39;
GROUP BY d.GROUP_ID,
e.class_code,
d.group_name,
e.class_name,
brand_type_name,
d.queue_index,
d.root_distance,
e.root_distance
ORDER BY d.queue_index) aa, dfnd_hidden_col bb
where aa.login_group_id &#61; bb.login_group_id(&#43;)
and bb.function_code(&#43;) &#61; &#39;9445&#39;
3.4.3 修改报表模板
选中要隐藏的字段
Visibility中选中hide Element
修改表达式
4 尚未解决问题列表
问题编号 | 问题描述 | 问题解决条件 | 计划解决时间 |
1 | 表头固定 |
|
|
2 | Word导出乱码 |
|
|
|
|
|
|
4.1 表头固定
当报表超出页面&#xff0c;出现滚动条时。最好可以固定表头&#xff0c;这样用户可以清楚看到是哪一项指标。如EXCEL锁定列功能&#xff0c;最好也能实现。估计用户以后会提这个需求。
4.2 Word导出乱码
Unix主机上导出Word时乱码&#xff0c;可能和主机字体设置有关系。BIRT找不到相应的字体文件。