10.1
图表的选择数据
新建报表overall.rptdesign,选择空白报表模板,完成后如图
10-1
,
新建数据源MyDataSource,采用
BIRT
设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL
:
jdbc: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
,
新建网格,
1
行
1
列,在网格内插入图表,选择图表类型
–
条形图,如图
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 n
,
Top n
等条件,右边的输入框填入数字或者构建内容,如图
10-11
,
例如,
显示前
10
名销售额
row[“sales”] Top n 10
显示后
15
名销售额
row[“sales”] Botton n 15
销售额介于66455.62和152543.02,则图
10-1
2,
其中构建值用于选择当前选择列的一个值,构建表达式用于定制一个表达式生成器,如图
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.1
,
10.2
的方式新建报表
JDBC
报表类型,
SQL
查询类型的空白模板报表
trend.rptdesign,
数据源MyDataSource,采用
BIRT
设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL
:
jdbc: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 URL
:
jdbc: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数据集的占位符和报表参数。
在编辑器区域,新建一个
2
行
1
列的网格,第一个网格插入一个饼图,如图
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.
只有发布到环境中才能生效,这主要是由于报表设计器预览的文件的路径和服务器文件的路径不一致。