本文中所展示的数据均采用标准的 xml 格式。
原因之一是 Flex API 有着异常简洁而强大的 xml 处理能力,很多组件亦可以直接接收 xml 数据作为其 dataprovider。在本文中,所有数据均用 Flex 的 XML API 进行解析。
原因之二是 IBM 的 DB2 系列产品从 V9 之后对 xml 有原生的支持,这样从数据库到 server,再到 client,甚至不需要对额外的转换操作,均能统一成标准的 xml 格式。
接下来我们介绍 Flex 中的 Column Chart 与 Pie Chart 组件对于数据的展示。
Column ChartColumn Chart 即通常所说的柱状图,其数据组成方式分为 X 轴和 Y 轴,分别展示待显示数据的某种维度信息。对于本文的例子来说,X 轴是从 xml 数据中提取的时间维信息(清单 3 中所示的 dim2list),而 Y 轴是从 xml 数据中提取的对应各种产品维的销售值。
清单 3. 准备维度信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dim1list = new Array();
dim2list = new Array();
// 取出清单 2 中的不同维度信息 ( 产品维 ),形成 dim1list,以便之后对 dim1list 进行
// 遍历得到具体的度量值 ( 销售值 )
for each(var dim1val:String in chartXML.item.dim1) {
if (dim1list.indexOf(dim1val) < 0)
dim1list.push(dim1val);
}
// 取出清单 2 中的不同维度信息 ( 时间维 ),形成 dim2list
// 如果需要在 X 轴上显示产品维信息,则简单地将 dim1 与 dim2 互换即可达到效果
for each(var dim2val:String in chartXML.item.dim2) {
if (dim2list.indexOf(dim2val) < 0)
dim2list.push(dim2val);
}
而每一个柱状图集合对应于一个 ColumnSeries,在此例子中,我们遍历接收到的 xml 数据,构建了多个 ColumnSeries,并对每个 ColumnSeries 设置其相应的产品维信息作为 dataProvider。最后,每个 CategoryAxis 是数据按照 X 轴维度展示的依据。
清单 4. 创建 Column Chart
// 对 dim1list 进行遍历,并分别建立对应的 series
for each (var s:String in dim1list) {
// 得到遍历时该维度的度量值集合
var localXML:XMLList = chartXML.item.(dim1==s);
// 创建该维度对应的 series 并设置相应属性
var localSeries:ColumnSeries = new ColumnSeries();localSeries.dataProvider = localXML;localSeries.yField = "measure";localSeries.xField = "dim2";
// 设置提示信息
localSeries.displayName = s;
// 将该维度 series 置入柱状图中
columnChart.series.push(localSeries);
}
// 横 (X) 轴是另一种维度信息 ( 此例中是时间维 )
var hAxis:CategoryAxis = new CategoryAxis();