首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
PowerPC
» 使用 Flex3 开发 OLAP 应用(5)OLAPDataGrid 的扩展
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
使用 Flex3 开发 OLAP 应用(5)OLAPDataGrid 的扩展
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-9-3 12:19
|
只看该作者
使用 Flex3 开发 OLAP 应用(5)OLAPDataGrid 的扩展
OLAPDataGrid 的扩展作为 Flex3 后新添加的组件,OLAPDataGrid 仍有一定的局限性。如一般的 OLAP 操作中均允许客户在图表直接进行点击,以达到数据上钻及下钻的效果。
对 Flex 已有组件扩展需要在其之上创建自定义的渲染器,而这通常有两种方法:定义一个 renderer(item 类型或 header 类型)在 MXML 的组件内部;或定义在另一个类文件中,再把这个类名指定在组件的 itemRenderer 或 headerRenderer 属性里。
对于 OLAPDataGrid 组件而言,虽然扩展了 AdvancedDataGrid 的功能,但最主要目的是为了支持 OLAP 查询结果的显示,也就是说,数据是由 OLAPCube 决定的。这就决定了其渲染器(OLAPDataGrid**Renderer)行为与普通组件的渲染器相比有着诸多限制,如不允许列的拖拽,不允许在表格上进行修改操作,不允许对列数据进行排序。而对于 OLAP 应用最重要的上钻与下钻操作,OLAPDataGrid**Renderer 亦不支持,我们需要继承 AdvancedDataGrid**Renderer 来完成此功能。
OLAP 常见操作 OLAP 的基本多维分析操作有钻取(Drill-up 和 Drill-down)、切片(Slice)和切块(Dice)、以及旋转(Pivot)等。钻取:是改变维的层次,变换分析的粒度。它包括向下钻取(Drill-down)和向上钻取(Drill-up)/ 上卷 (Roll-up)。Drill-up 是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而 Drill- down 则相反,它从汇总数据深入到细节数据进行观察或增加新维。切片和切块:是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。旋转:是变换维的方向,即在表格中重新安排维的放置(例如行列互换)。
首先在 mxml 文件中给出 OLAPDataGrid 的初始定义。 清单 9. OLAPDataGrid 定义
1
2
3
4
5
<mx:Canvas width="100%" height="25%">
<mx:OLAPDataGrid id="myOLAPDG" width="100%" height="100%"
initialize="configureGrid()">
</mx:OLAPDataGrid>
</mx:Canvas>
通过点击标题栏的方式进行数据的钻取,并使用 header 类型的自定义渲染器来处理上钻,下钻行为。(当然你还可以自定义的添加其他类型的渲染器,如 item 和 groupItem) 清单 10. configureGrid
1
2
3
public function configureGrid():void {
myOLAPDG.headerRenderer = new ClassFactory(DAXHeadItemReader);
}
接着覆写主 header 以及其 subheader(以递归的方式),并以回调函数的方式处理各种鼠标事件。 清单 10. 父 header 的覆写函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected override function createChildren():void {
super.createChildren();
label.addEventListener(MouseEvent.CLICK, headerLabelClicked);
label.addEventListener(MouseEvent.MOUSE_OVER, headerLabelMouseOver);
label.addEventListener(MouseEvent.MOUSE_OUT, headerLabelMouseOut);
if (data != null && data.hasOwnProperty("children")) {
var children:Array = this.data.children;
var child:AdvancedDataGridColumn;
for (var i:int = 0; i < children.length; i++) {
child = children
;
child.rendererIsEditor = true;
child.headerRenderer = new ClassFactory(DAXSubHeadRender);
}
}
}
清单 11. 上钻回调函数
1
2
3
4
5
6
7
8
9
10
11
private function headerLabelClicked(mouseEvent:MouseEvent):void {
var textField:String = mouseEvent.target.getRawText();
if (textField == 'Year Level')
Alert.show("It's the top now! Drill up unavailable!");
else {
// 模拟本应通过 HttpService 与服务端通信返回的数据
var newXML:XML = …… ;
dispatchEvent(new DrillEvent(DrillEvent.DRILL_UP, newXML, true, false));
}
}
Subheader 的构建方式与下钻回调函数与此类似,具体详见附件中代码。
这样就把一个 Flex 中的标准 OLAPDataGrid 组件用自定义的渲染器进行了扩展。
接下来我们再来看看具体的钻取逻辑实现。我们可以根据多种方式来判断钻取操作是上钻还是下钻:例如根据点击组件的 textField,或是从后端返回的数据中某字段的值。当上钻或下钻操作无效时,及时地提醒用户。 清单 12. 下钻回调函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private function subheaderLabelMouseClick(mouseEvent:MouseEvent):void {
var textField:String = mouseEvent.target.getRawText();
if (textField == 'Day Level')
Alert.show("It's the bottom now! Drill down unavailable!");
else {
// 模拟本应通过 HttpService 与服务端通信返回的数据
var newXML:XML;
if (textField == 'Year Level')
newXML = …… ;
else if (textField == 'Quarter Level')
newXML = …… ;
else if (textField == 'Month Level')
newXML = …… ;
dispatchEvent(new DrillEvent(DrillEvent.DRILL_DOWN, newXML, true, false));
}
最后看一看具体显示的效果。
点击子 Header,鼠标移过时的特效在 headerLabelMouseOver() 和 headerLabelMouseOut() 方法中定义 ,如图 5 所示。(可与图 4 不进行任何扩展的 OLAPDataGrid 行为进行比较)图 5. 下钻操作 1
这时候若点击即完成了下钻操作,将显示季度这个度量的各种数据。如图 6 所示。
图 6. 下钻操作 2
继续点击,数据将会越来越细化,在月之后,最后显示天的数据。而这时若仍进行下钻,则会出现提示用户:下钻操作无法执行。如图 7 所示。
图 7. 非法下钻操作
点击父 Header,则将一步步进行上钻操作,如图 7 的“Day Level”和图 6 的“Quarter Level”。而若在图 5 的基础上点击“Year Level”,也将提示用户:上钻操作无法执行,如图 8 所示。图 8. 非法上钻操作
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议