一种报表定义模板运算的方法

文档序号:6489989阅读:181来源:国知局
一种报表定义模板运算的方法
【专利摘要】一种报表定义模板运算的方法是基于语义层设计报表,只需简单地拖拽语义层元素即可,不需要编写复杂表达式和复杂SQL.语义层的加入不仅给用户的操作带来了极大的方便,而且增强了企业数据的安全性。
【专利说明】一种报表定义模板运算的方法
【技术领域】
[0001]一种报表定义模板运算的方法主要是用于计算程序报表定义领域。
【背景技术】
[0002]报表作为一种信息组织和分析的有利手段,是企业信息系统的重要组成部分之一.据不完全统计,系统实际应用的6o%以上与报表有关[I].但是一般的软件开发语言都不带报表制作工具,要开发报表模块需要程序员编写大量的代码,这些代码可重用性差、后期维护复杂.所以,企业一般都借助于第三方的专业报表工具来制作报表.但是,目前的报表工具存在专业性不强3、安全性不高、用户操作复杂和设计复杂报表时效率低下等问题.针对目前专业报表工具中存在的问题,我们介绍了一种语义层报表模型,在报表设计器和企业数据源之间建立语义层,来解决这些问题。
[0003]利用传统的报表工具设计报表时,用户直接操作数据源,一方面用户需要学习数据源的专业知识,编写复杂的表达式,书写复杂的SQL语句;另一方面直接操作企业数据,给企业的数据信息带来了安全隐患.本文介绍了一种语义层报表模型,在报表设计器和企业数据源之间建立语义层,在语义层中定义数据模型,用户在报表设计器中基于语义层设计报表,直接拖拽语义层元素即可,极大的减少了用户制作报表时的工作量;虽然增加了语义层,但并没有降低整个报表模型的计算效率,因为用户在拖拽语义层元素设计报表时,系统自动的把语义元素解析成报表引擎可以识别的标签,所以报表计算时不需要访问语义层数据模型XML文件;通过在数据模型上定义过滤条件,对企业数据进行权限控制,增强了企业信息的安全性;语义层数据模型可以在视图上定义视图间的关联关系,也可以在视图字段上定义视图间的关联关系,后者在计算报表时,一个单元格上绑定多个指针,指向关联视图,不需要视图间的连接,不需要多次重复检索关联视图就可以设计出多源报表,极大的提高了复杂报表的计算速度。

【发明内容】

[0004]我们通过国家专利检索没有发现关于此系统方面的资料。一种报表定义模板运算的方法是方法如下:
1.首先定义一个函数其语法为:public IReport calcReport (ReportDefine r,Context con)
定义过程序:
public IReport calcReport(ReportDefine r, Context con)
{获取r中定义的数据集列表;
根据报表运行上下文con到数据源中检索出 每一个数据集对应的数据;
获取r的一个未计算格,令P —这个未计算 格;while (P不为空){ if(P不是扩展格){
计算P表达式的值;
把计算的结果赋给P.value ;
把P的状态置为已计算;
}else {
调用扩展格计算算法cellExp ;
获取r的一个未计算格,令P —这个未计算格;
}}}
2.定义扩展格计算函数,其语法:public void cellExp (IReport ir,M ap dateM ap,Cell c)。
[0005] 定义过程:
public void cellExp (IReport ir,M ap dateM ap,Cell c)
{计算c的取值表达式,设计算结果为(。,, ,
);for (int 一 I ; < 一 ; + +){`
令 Value=Vi ;
把c的状态置为已计算;
把指向所在记录的打集指针保存到c中;
获取C的后跟格,令一 c的后跟格; while (m不为空){ if (m为扩展格){
递归调用扩展格计算算法cellExp ;
}else {
if(m与c来自同一个数据集){
从c保存的行集指针指向的记录中取 出/ 7〃 /表达式的值赋给.value ;
把的状态置为已计算;
}else{以报表中定义的两个数据集的关联关系为过滤条件到m来自的数据 集中检索m表达式的值赋给value ;把的状态置为已计算;} if(m有后跟格){
获取m的后跟格,令m= m的后跟格;
}else {
break ;
}}}
对c所在的行执行I次行复制算法;令c一c对应的复制格;}}
假设每个数据集中有条记录,报表定义模板中有列,对类似于表1所示的报表定义模板进
行计算的时间复杂度为O (η * )。表1中Β2和D2单元格表达式中的字段都来自于student数据集,而利用以上算法进行计算时我们发现在cellExp函数中两次重复的以关联规则为过滤条件去检索name和grade字段的值。
[0006] 现实现如下:
如果把学生(student)和成绩(score)之间的关联关系定义在成绩视图的学生ID字段上,那么报
表进行运算 public void cellExp (IReport ir, Map dateM ap, Cell c)
{
计算C的取值表达式,设计算结果为(V1 ,V2 ,; for(int i 一 1 ; < 一 ;i+ +) {
令 C.Value=Vi ;
把c的状态置为已计算;
把指向所在记录的打集指针保存到c中;
if(f包含关联规则){以数据集间的关联关系为过滤条件到关联数据集中检索与C值对应的记录,把指向该
记录的行集指针保存到C中,C中可能包含多个关联规则,行集指针采用Map结构进行
保存;}
获取C的后跟格,令m— C的后跟格; while (m不为空){ if(m为扩展格){递归调用扩展格计算算法cellExp ;
}else {
从C保存的行集指针指向的记录中取出m表达式的值赋给m.valuejEm的状态置为已计算;
if (m有后跟格){获取m的后跟格,令m=m的后跟格;
} else { break ;}}}
对C所在的行执行I次行复制算法;
令C=C对应的复制格;}}
定义在字段上的关联关系在主扩展格中保留多个行集指针,分别指向相关联的数据集,不需要重复遍历关联数据集就可以获得需要的数据.假设每个数据集中有条记录,报表定义模板中有m列,通常情况下民n >m,对类似于表1所示的报表定义模板进行计算的时间复杂度为0(n2).对比以上两种建立视图问关联关系的方法,如果m比较大或报表定义模板中包含嵌套的扩展格,那么定义在字段上的关联关系在计算效率上的优势就非常明显了。模型中对以上两种方法都提供了支持。建在字段上的关联关系只对该字段起作用,建在视图上的关联关系对视图中所有字段都起作用,在我们无法确定把关系建在哪个字段上时,就把它建在视图上.字段上的关联关系优先级高于视图上的关联关系。
【权利要求】
1.一种报表定义模板运算的方法其特征是报表定义模板类对象,假设其对象模块定义为(SR。
2.根据权力要求I的定义,其必须要定义报表运行上下文,为报表提供数据来源,其定义为@con。
3.根据权力要求2的定义,其必须要返回计算后的报表,IReport是报 表接口,ReportDefine实现了这个接口,其返回值定义为OReturn。
4.根据权力要求3的定义的定义其需要进行扩展格计算其必须定义中间计算报表@ir,报表定义数据集列表OdateMap,要计算的单元格@c。
【文档编号】G06F17/24GK103778106SQ201210400147
【公开日】2014年5月7日 申请日期:2012年10月20日 优先权日:2012年10月20日
【发明者】伍东周 申请人:镇江华扬信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1