第十章 BIRT图表 .

来源:互联网 发布:cnabs数据库全称 编辑:程序博客网 时间:2024/06/05 07:23

10.1 图表的选择数据

新建报表overall.rptdesign,选择空白报表模板,完成后如图10-1

新建数据源MyDataSource,采用BIRT设计器自带的例子数据库:

驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)

Database URLjdbc:classicmodels:sampled

用户名:ClassicModels

完成后如图10-2,测试连接

新建数据集OverallDataSet,选择JDBC数据源-MyDataSource,选择数据集类型:SQL选择查询,在查询文本输入框(Query Text)中输入以下SQL:

select CLASSICMODELS.PRODUCTS.PRODUCTNAME,

sum(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as "sales"

from CLASSICMODELS.ORDERS, CLASSICMODELS.ORDERDETAILS, CLASSICMODELS.PRODUCTS

where (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)

and (CLASSICMODELS.ORDERDETAILS.PRODUCTCODE = CLASSICMODELS.PRODUCTS.PRODUCTCODE)

and (CLASSICMODELS.PRODUCTS.PRODUCTLINE = 'Classic Cars')

group by CLASSICMODELS.PRODUCTS.PRODUCTNAME

如图10-3

预览结果,如图10-4

新建网格,11列,在网格内插入图表,选择图表类型-条形图,如图10-5

在子类型中定制条形图,维度(D)-二维,输出格式(O)-SVG,多个Y-无,方向,勾上翻转坐标轴(X)代表条形图为横向的。

选择数据,在中下方的选择数据中,使用以下来源的数据,选择数据集OverallDataSet,勾上显示数据预览,如果数据无误,去掉显示数据预览的勾,把PRODUCTNAME拖到中间的类别(X)系列输入框,把sales拖到左边的值(Y)系列输入框,如图10-6

或者在数据预览框中右击,在弹出框中选择,PRODUCTNAME选择-用作类别(X)轴,sales选择-绘制为值(Y)系列,如图10-7

或者用类别(X)系列输入框和值(Y)系列输入框右边的表达式生成器,来定制数据,本例中类别(X)系列选择可用列绑定-图表-PRODUCTNAME,值(Y)系列选择可用列绑定-图表-sales如图10-8

在类别X系列输入框的最右边,有排序和分组的按钮,可以定制排序和分组,可以选择数据排序的类型是升序或是降序,排序的依据是哪个数据列或者根据右边的表达式生成器,定制排序依据;

分组启用与否,定制分组类型、单位、间隔、聚合表达式,如图10-9所示,

本例中没有加入排序和分组,如图10-10所示,

在可选的Y系列分组中可以对数据集进行分组和对分组进行排序和再分组。

在右下角的三个按钮可以定制筛选条件,参数绑定,数据绑定,现在分别介绍,

在过滤器中可以添加筛选条件,用左边表达式构建器编辑过滤项,中间的筛选条件可以选择Botton nTop n等条件,右边的输入框填入数字或者构建内容,如图10-11

例如,

显示前10名销售额  row["sales"] Top n 10

显示后15名销售额  row["sales"] Botton n 15

销售额介于66455.62和152543.02,则图10-12,

其中构建值用于选择当前选择列的一个值,构建表达式用于定制一个表达式生成器,如图10-13

这个表达式最终在XML下是如下内容,

本例中没有定制筛选器。

参数用于绑定占位符和参数值,可以用表达式生成器定制需要绑定到占位符上的参数的值。

数据绑定用于显示在整个图表中的可用数据列和用表达式生成器定制生成的数据项,在此可以添加或者删除,编辑。本例中仅用了可用数据列。

10.2 图表的格式

系列可以选择中间条形的着色依据,可选类别系列和值系列;

Y系列是指图表的中间条形,用于定制中间条形的边框,标签,曲线拟合线,交互,可以定制标签如图10-14和交互如图10-15

图表区域是指整个图表,属性可以定制背景,样式,可见性,边框,常规属性,自定义属性和交互,如图10-16所示,

标题用于定制标题的内容,字体,格式,布局,交互,如图10-17所示;

图形用于定制包括坐标轴内容区域的背景和边框以及坐标轴内的内容区域的背景和边框,并可以为两者定制格式,如图10-18所示;

图注用于在右侧显示类别X系列等图注信息,或者定制图注信息,并为这些信息定制布局,条目和交互。

X轴和Y轴是指左侧和下侧的轴,属性如图10-19所示,

其中在Y轴的数字类型的格式按钮中编辑本地化定制信息,输入前缀$,小数点保留两位,如图10-20所示,

在标签输入框的右侧,有个字体编辑器,可以定制坐标轴的字体,可以作适当的旋转,以防内容交错,如图10-21

另外,在XML源视图中找到以下这段,这段用于在页脚显示当前日期如图10-22

去掉<page-footer>中间的内容

<page-footer>

      <text id="3">

           <property name="contentType">html</property>

              <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>

              </text>

</page-footer>

完成以后在web查看器中查看报表,如图10-19,10-20

 

10.3 图表的交互

     在上面提到的值Y系列,图表区域,标题,题注,X轴,Y轴都提供了交互,本节就重点讲解交互的使用。

首先是提供钻取功能,为了实现这个功能,需提供另一个要钻取到的报表。

10.110.2的方式新建报表JDBC报表类型,SQL查询类型的空白模板报表trend.rptdesign,

数据源MyDataSource,采用BIRT设计器自带的例子数据库:

驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)

Database URLjdbc:classicmodels:sampled

用户名:ClassicModels

数据集TrendDataSet,查询SQL如下:

select CLASSICMODELS.PRODUCTS.PRODUCTNAME,

(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales,

CLASSICMODELS.ORDERS.ORDERDATE

from CLASSICMODELS.ORDERS,

CLASSICMODELS.ORDERDETAILS,

CLASSICMODELS.PRODUCTS

where (CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)

and (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)

and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)

报表参数productname,字符串静态文本框,如图:

绑定数据集TrendDataSet占位符和报表参数productname,如图

新建一行一列网格,在网格框内插入图表,选择图表类型为折线图,如图

选择数据,使用以下来源的数据-TrendDataSet,类别(X)系列选择可用列绑定-图表- row["ORDERDATE"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图。

在图表格式中定制X轴,把标签顺时针旋转45度,如图,

同上例,在XML中去掉页脚的日期,完成。

<page-footer>

      <text id="3">

           <property name="contentType">html</property>

              <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>

              </text>

</page-footer>

回到overall.rptdesign,编辑图表,选择图表格式-Y系列-交互,在系列交互中添加鼠标事件,如图

选择事件-鼠标单击,操作-超链接,添加一个超链接,输入名称-超链接1,编辑基本URL,选择追溯,如图,

选择目标报表文件trend.rptdesign,添加报表参数,用表达式生成器绑定可用数据列row["PRODUCTNAME"],,选择相同框架,如图

这样就绑定了overall.rptdesign的有色条形的鼠标单击转跳到trend.rptdesign的显示,如图,

图表区域,标题,题注,X轴,Y轴都能提供了类似以上的交互。

回到trend.rptdesign,编辑图表,选择图表格式-Y系列-交互,在系列交互中添加鼠标事件,选择事件-鼠标移过,操作-显示工具条提示,编辑工具提示文本,用表达式生成器添加如下内容"$" + row["SALES"] + " made on " + row["ORDERDATE"],如图

则能在鼠标移到折线图的值上时提供相应的提示,如图

钻取可以延续下去,我们同样可以以trend.rptdesign为源报表,钻取到另一个报表,甚至可以把报表参数传递给一个报表中的两个图标。

新建报表JDBC报表类型,SQL查询类型的空白模板报表customers.rptdesign,

数据源MyDataSource,采用BIRT设计器自带的例子数据库:

驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)

Database URLjdbc:classicmodels:sampled

用户名:ClassicModels

数据集CustomersDataSet,查询SQL如下:

select CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,

CLASSICMODELS.ORDERS.ORDERDATE,

(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales

from 

CLASSICMODELS.CUSTOMERS, 

CLASSICMODELS.PRODUCTS, 

CLASSICMODELS.ORDERS,

CLASSICMODELS.ORDERDETAILS

where

(CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)

and (CLASSICMODELS.ORDERDETAILS.ORDERNUMBER = CLASSICMODELS.ORDERS.ORDERNUMBER)

and (CLASSICMODELS.ORDERS.CUSTOMERNUMBER = CLASSICMODELS.CUSTOMERS.CUSTOMERNUMBER)

and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)

数据集DistributionDataSet,查询SQL如下:

select CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,

sum(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales

from CLASSICMODELS.CUSTOMERS, CLASSICMODELS.ORDERS, CLASSICMODELS.ORDERDETAILS, CLASSICMODELS.PRODUCTS

where (CLASSICMODELS.ORDERS.CUSTOMERNUMBER = CLASSICMODELS.CUSTOMERS.CUSTOMERNUMBER)

and (CLASSICMODELS.ORDERDETAILS.ORDERNUMBER = CLASSICMODELS.ORDERS.ORDERNUMBER)

and (CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)

and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)

group by CLASSICMODELS.CUSTOMERS.CUSTOMERNAME

order by CLASSICMODELS.CUSTOMERS.CUSTOMERNAME

报表参数productname,静态文本框字符串,如图

绑定CustomersDataSet和DistributionDataSet数据集的占位符和报表参数。

在编辑器区域,新建一个21列的网格,第一个网格插入一个饼图,如图10-30,第二个网格插入一个面积图如图10-31

饼图选择数据,使用以下来源的数据- DistributionDataSet,类别(X)系列选择可用列绑定-图表- row["CUSTOMERNAME"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图10-32

面积图选择数据,使用以下来源的数据- CustomersDataSet,类别(X)系列选择可用列绑定-图表- row["ORDERDATE"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图10-32

在饼图的图表格式-Y系列-交互,在系列交互中添加鼠标事件,选择事件-鼠标单击,操作是调用脚本,脚本内容是alert(valueData),如图

预览的效果如图,

这样,我们可以从浏览报表overall.rptdesign钻取到trend.rptdesign,再到customers.rptdesign。

钻取的本质是什么?

我们在编辑超链接的时候可以选择类型报表类型为URL,用表达式生成器编辑位置为

"../frameset?__report=trend.rptdesign&productname="+row["PRODUCTNAME"]

同样能实现钻取功能,这说明钻取内部实际上只是一个动态超链接。

不过这种方式在预览和设计器自带的报表查看器中不起作用,会报出如下错误:

+ The report file : /D:/eclipse/plugins/org.eclipse.birt.report.viewer_3.7.2.v20120213/birt///trend.rptdesign does not exist or contains errors.

只有发布到环境中才能生效,这主要是由于报表设计器预览的文件的路径和服务器文件的路径不一致。

0 0