第八章 BIRT交叉报表

8.1 创建交叉报表和统计

一、创建报表和配置数据源

新建一个报表,改好自己的名字,然后next进行下一步。


选择一个空白报表(Blank Report),单击finish完成。


新建数据源,这里使用的是协同数据库,选择Date Explore标签 右键单击Data Sources 新建一个数据源。选择JDBC Data Source 命名为 clmpdemo 然后单击next 


利用JDBC链接数据源,然后点击测试链接,提示成功后,点击finish完成。


注:在应用里面,可以设置为JNDI链接。具体是在报表文件中,增加一列JNDI设置,如下所示:

  1. <data-sources>  
  2.         <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="clmpdemo" id="7">  
  3.             <text-property name="displayName"></text-property>  
  4.             <list-property name="privateDriverProperties">  
  5.                 <ex-property>  
  6.                     <name>contentBidiFormatStr</name>  
  7.                     <value>ILYNN</value>  
  8.                 </ex-property>  
  9.                 <ex-property>  
  10.                     <name>metadataBidiFormatStr</name>  
  11.                     <value>ILYNN</value>  
  12.                 </ex-property>  
  13.             </list-property>  
  14.             <property name="odaDriverClass">oracle.jdbc.driver.OracleDriver</property>  
  15.             <property name="odaURL">jdbc:oracle:thin:@127.0.0.1:1521:eccl</property>  
  16.             <property name="odaUser">clmp</property>  
  17.             <encrypted-property name="odaPassword" encryptionID="base64">ZWNjbDIwMDk=</encrypted-property>  
  18.             <!--新增JNDI设置-->  
  19.             <property name="odaJndiName">java:/comp/env/clmp</property>  
  20.         </oda-data-source>  
  21. </data-sources>  

建立一个新的数据集,New data sets ,命名为clmprfq,点击next。

构建数据集的sql语句,如下所示:


Sql语句内容如下:

select CLMP.QTLINE.QTL_NAME,

CLMP.QTLINE.QTL_MODEL,

CLMP.QTLINE.QTL_BIDPRICE,

CLMP.QTLINE.QTL_BIDQUANTITY,

CLMP.QTLINE.QTL_REMARK,

CLMP.QUOTATION.QT_VD_ID,

CLMP.QUOTATION.QT_VD_NAME,

CLMP.QUOTATION.QT_US_ID,

CLMP.QUOTATION.QT_US_NAME

from CLMP.QUOTATION,CLMP.QTLINE

where CLMP.QTLINE.QTL_QT_ID=CLMP.QUOTATION.QT_ID

and CLMP.QUOTATION.QT_RFQ_ID=?

创建一个报表参数,命名为rfqID。如下

创建一个总价的计算列:



然后再数据集clmprfq中引用这个参数,如下图所示:


数据集到此配置完毕,预览结果如下:


配置Data Cubes

新建Data Cubes,右键new data cubes


为cubes命名,并设置数据集


创建分组和汇总字段


创建之后形成的多维数据集如下图所示:


设计报表主体

先切换到Palette标签,然后拖拽一个Grid(网格)到空白报表中:


网格选取的是1行2列的,如下所示:


在第一行中输入该报表的标题,在第二行中拖拽一个交叉表:


切换到Data Explorer 选项卡上,将维度,及度量源依次拖拽到相应的交叉表中:


然后增加总价一列,左击(或者右击)在出现的选项中有Totals一项,如下图:


并勾选行和列需要总计的字段,如下图:


完成后的报表设计如下:


到此,已经基本上完成了,我们可以预览看下结果


8.2 多维交叉报表和维度过滤

实际上我们还能增加行和列的统计功能,以及增加统计的维度。

新建报表cross.rptdesign,使用示例数据库,SQL选择查询数据源,新建数据集data set

select * from CLASSICMODELS.PAYMENTS

增加计算列yearmonth


year的表达式如下:

var v = row["PAYMENTDATE"];

    v = v.toString();

    v = v.substring(0, 4);

v;

month的表达式如下

var s="";

var v= row["PAYMENTDATE"];

v=v.toString();v=v.substring(5,7);

function aaa(v){    

var s="";    

if(v=="01" || v=="02" || v=="03")s=" 一季度";    

if(v=="04" || v=="05" || v=="06")s=" 二季度";   

  if(v=="07" || v=="08" || v=="09")s="三季度";   

  if(v=="10" || v=="11" || v=="12")s="四季度";

return s;

}

s=aaa(v);

s;

新建多维数据集:


我们把customernumberyear作为一级交叉列,把month作为year的二级交叉列,新建交叉表,分别把组和组1放置在交叉表的列头上:


选中交叉表,在下面的交叉表属性选项卡下,有行区域和列区域,可以增加统计和小计:


做适当的布局和美化,如下图所示:


预览结果如下:


当然,交叉报表也可以增加映射,过滤器,突出显示属性,例如我们增加一个参数

静态文本框参数persionId


过滤组1/year,筛选条件为data[“year”]不等于params["persionId"].value


运行时,我们过滤掉2003年的数据,则预览效果如下:


排序和突出显示和普通网格报表类似,不作更多案例。

8.3 表头的设计

关于表头斜线的绘制,方法有两个:

第一个是插入一个已经绘制好的图片:


效果如下:


另一种是用BIRT的方法绘制:

我们新建一个报表diagonal.rptdesign,使用示例数据库,空白模板,sql选择查询数据源,我们新建数据集data set

SELECT CLASSICMODELS.PRODUCTS.PRODUCTLINE, CLASSICMODELS.PRODUCTS.PRODUCTNAME, 

(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) AS TOTAL

FROM CLASSICMODELS.PRODUCTS, CLASSICMODELS.ORDERDETAILS

WHERE CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE

然后新建多维数据集:

行列组分别为productlineproductname数据集属性列,摘要为TOTAL


布局如下:


我们在表头插入一个11列的网格,在网格单元格的属性中,我们可以看到对角线属性:


修改,增加两条黑色细实线。

然后在网格里插入文本:

  1. <div style="margin-left:120px; margin-top:10px;">ProductName</div><br>  
  2. <div style="margin-left:50px;">Total</div>  
  3. <br>  
  4. <div style="margin-left:30px;">ProductLine</div>  

值得注意的是,网格的行高度一定要和表头的行高度一样,而且必须设置为固定数值的大小,不是##%


预览,效果如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值