olap分析平台的设计与实现(十六)- 上卷、下钻的实现思路

基于设置页面、视点、行维、列维等功能,我们可以实现分析当中用到的旋转、切片功能。

前面几小节,说明了如何全表呈现一张分析表单,但那些还是静态呈现方式。

本节开始侧重阐述上卷、下钻功能、页面切换的实现。

 (上卷、下钻页面)

上卷:

上卷功能实现比较简单:基本原理为“数格子”,及找出需要“切”掉的单元格,把剩余的单元格重新装配为一个新的viewGrid.

根据新的viewGrid,show Data.

上个示意图(以列为例):

点击第一季收缩,首先找出受影响的列 E、F、G,根据受影响的列,去掉列头,接着对行循环,去掉图中蓝色的区域,剩余的区域就是新的viewGrid.我们可以根据这个新的viewGrid,直接show Data.

row上卷:

 getRemainRowRollUp方法:获得上卷后剩余的行

	/*
	 * 获得上卷后剩余的行
	 *@param rowMemsOld   行维度表头的二维数组
	 *@factDatas factDatas
	 *@colPoint 坐标-列
	 *@rowPoint 坐标-行
	 *@memberId 成员id
	 *@rowList  行维度二维数组--结果  
	 *@rowDataList  事实数据--结果
	 * 
	 */
	
	
	private void getRemainRowRollUp(int[][]rowMemsOld,int colPoint,int memberId,DataCell[][] factDatas,int rowPoint,List<int[]> rowList,List<DataCell[]> rowDataList, FormGrid oldGrid){
	

getRemainRowRollUp 参数分为三类:

  1. 原始的fromGrid
  2. 收缩点信息 (行、列、维度)
  3. 返回值:行维度成员二维数组、事实数据二维数组

getRemainRowRollUp方法内的基本逻辑为:把表分为三段,受影响区域的前面部分 和后面部分数据直接添加到要返回的的2个数组当中(都是2维数组),中间部分收缩处理后加入结果数组

rollup方法:构建收缩后的formGrid,rollup方法中,调用了getRemainRowRollUp方法

newDrillDownOrRollUpPoint:根据分组对位置进行修正!

如何判断某一点是否能展开收缩?遍历所有成员,对每一个成员调用方法:getRowImgByValidate,1为+(可以展开),-1为-(可以收缩) 0 无收缩 展开符号。

getRowImgByValidate方法基本逻辑是如下2段:

第一段:遍历当前组当中的布局及其布局下的成员,如果和当前节点存在父子关系,这当前节点前可能有展开收缩符号,否则啥都没有。

第二段:遍历检查二维数组rowMember,看是否存在当前节点的child,如果有,该节点可收缩,否则可展开。

下钻:

以列为例,5步完成下钻动作。

  1. 根据当前点位相关的memberId,找到其下级的member,
  2. 依据这些members,动态生成mdx String,
  3. 执行mdx,获取相应的result.
  4. 根据执行结果result重新生成viewGrid!
  5. 根据这些新的viewGrid,重新showData!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值