报表交互分析中经常会使用伸缩(折叠)显示功能,使用润乾集算报表可以完成报表展现伸缩功能。集算报表内置了伸缩功能,但对报表格式有要求,下面来看一下使用过程。
报表是要求带有合计行的分组交叉报表,如下图示效果:
完成类似的伸缩功能在集算报表中很简单,只需要两步,设计报表,加入tag属性。首先,报表模板制作如下:
其中,数据源使用自带的demo;数据集ds1为:SELECT 订单.货主地区,订单.货主城市,订单.运货费,订单.订单ID,订单明细.单价,订单明细.数量 FROM 订单,订单明细 where 订单.货主地区!=” and 订单.订单ID=订单明细.订单ID
准备页面,使用安装包自带的showReport.jsp,并在report:html标签中加入isOlap=”yes”属性,如下:
<report:html name=”report1″ reportFileName=”<%=report%>”
funcBarLocation=”"
needPageMark=”yes”
generateParamForm=”no”
params=”<%=param.toString()%>”
isOlap=”yes”
/>
启动应用,使用该页面访问报表即可实现开篇的效果。
这里可以看到使用内置的伸缩功能非常简单快捷,但对报表样式有所限制。如果对其他格式报表也需要伸缩展现,可以通过编写JS脚本实现,集算报表提供了相关属性和接口供用户自定义JS使用。下面来看另外一种实现方式。
以分组汇总报表为例,目标报表样式如下:
要求:点击地区前减号或加号完成相应地区内城市数据的折叠或展开。
首先准备相应分组报表,模板如下:
设置A2的HTML事件:
HTML事件表达式为:”onClick=showHidden(\’”+row()+”\’,\’”+ds1.dcount(货主城市)+”\’)”,这里单击事件调用showHidden函数,并传递当前行号和当前分组成员数量。
showHidden函数实现思路是根据点击行和分组成员数,依次获取该分组成员所在行,再设置其行显示属性为隐藏或显示。
showHidden函数内容如下:
function showHidden(row,groupNum){
var rn = parseInt(row); //当前行号
var gn = parseInt(groupNum); //分组成员数
var flagObj = document.getElementById(“report1_A”+rn); //+-号所在单元格
for (var i=rn+1;i<=rn+gn;i++){
var obj = document.getElementById(“report1_C”+i).parentNode; /获取分组成员所在行TR
var disp = obj.style.display;
if(disp==null || disp==”"){//设置TR折叠
obj.style.display=”none”;
flagObj.innerHTML=”+”;
}else{//设置TR展开
obj.style.display=”";
flagObj.innerHTML=”-”;
}
}
}
使用JSP发布报表,即可实现上述折叠报表效果。实际使用中,由于用户的报表不尽相同,实现上也略有差异。集算报表支持HTML事件并可以传递报表内容给自定义JS函数,实现非常灵活。