首页 联系我们 网站地图 English
 
技术支持热线:+86 21 68531770    68531771    |    试用下载
产品中心 报表技术漫谈 OLAP技术漫谈 下载与服务 市场与合作 新闻中心 关于我们
  数据微引擎与动态数据指令  
 
报表杂谈
九套常规报表模型
柔性化报表设计
后交互式报表
对象实例化及衍生技术
数据微引擎与动态指令
多数据源集成与控制
图形报表漫谈
项目化构架及其意义
无代码发布(维护)
    报表的核心就是数据运算处理,所以对于一个报表工具来说,无论怎么强调数据运算处理能力都不为过。
  传统报表工具在数据处理手段上相当单一,一般做法都是依赖于SQL语句或者存储过程,将需要的数据返回给报表系统,而报表系统能够做的仅仅是一些简单的四则运算,或通过固定函数取最大最小值等。
  不同于传统工具,Max@X Analyser提供了两项技术创新:数据微引擎技术数据库动态指令技术,结合Max@X Analyser脚本中的数据源当前行游标控制功能,设计者可以对当前所获得数据进行各种复杂的逻辑、四则、关联整合等运算,极大提高了设计者对报表数据的运算控制能力。本篇将对此类技术原理和应用场景进行逐一说明。
1、数据微引擎技术
  数据微引擎技术,是指在报表获得实际数据之后,根据报表中某些变量或中间运算结果,动态地使用符合SQL 92标准的SQL语句,对当前已获得的数据进行关联、过滤等运算。
  数据微引擎技术最为实用化的地方,在于其SQL语句是可以根据报表创建过程中产生的中间运算结果动态创建的。
  让我们来看一个简单的例子,报表如下:
  
  这是看似很简单的一份报表,以销售代表为索引,列出了各个销售代表当月的销售业绩,并且列出了对应销售代表业绩种,排名前三位的客户。如果尝试使用SQL语句用一个数据源直接获得报表所需的数据,几乎是不可能的。用存储过程或许可以做到这一点,但是不要忘记,这仅仅是一个简单的示例,如果在实际应用中,类似的计算列超过1个的话,存储过程的设计复杂度会呈指数形式上升。
  如果尝试Max@X Analyser的数据微引擎技术的话,会发现解决这个问题非常简单。
  首先,报表设计两个数据源,其一(假设命名为D1)获取所有的销售代表名称(取不重复值),其二(假
     设命名为D2)获取所有的销售代表、销售客户、销售金额信息(中间不同记录之间可能存在销售代
     表名称或者客户名称重复)。
  其次,在报表中以列表方式分行显示数据源D1中的销售代表名称;
  第三,使用数据微引擎,每一行显示同时进行数据运算,以当前行显示的销售代表名称为where条件,对数
     据源D2进行过滤汇总,获得该销售代表的销售总额,并显示。
  第四,使用数据微引擎,每一行显示同时进行数据运算,以当前行显示的销售代表名称为where条件,对数
     据源D2进行过滤排序,获得该销售代表的对应客户中销量前三名的客户名称记录,并控制显示。
  第五,设计完成。
2、数据库动态指令技术
  动态数据库指令与数据微引擎技术非常类似,主要区别在于:前者操作对象为实际的物理数据库,后者则是报表已经获取的数据集。
  适用场景为:报表中某些数据的获取方法在报表实际创建前无法确认,必需根据报表创建过程中产生的中间数据计算结果进行逻辑分析,然后根据规则向数据库请求对应的数据。看这样一张报表:
  样式要求:
  
  报表要求:
  1、数据筛选条件:
    统计区域:<全国/北京/山东……>
    文化程度:<全部/小学/初中/……>
    性别:<全部/男/女>
    年龄段:<全部/16岁以下/16岁~18岁/19岁~30岁/31岁~40岁/41岁~50岁/51岁~60岁/60岁以上>
  2、报表创建条件:
    由用户在创建报表前选择统计分行规则(选择行属性内容),行属性分类包括:审批地区/受理地/户口
    所在地/前往国或地区/申请原因类别/年龄段/文化程度。
  难点分析:
  报表的难点不在于常规的设计制作,而在于统计中行的分类方式是可变的:浏览者可以随意在年龄段、审批
  地区、受理地等内容上进行选择,报表按照用户选择进行分行统计。比如,用户选择“年龄段”统计,则报
  表中每行统计的是不同年龄段的数据;当用户选择为“受理地”时,每行统计的是不同受理地的数据。用户
  做出不同的选择,报表中<行属性分类>标识处的数据内容就会发生相应的变化,同时统计数据方法也会发
  生根本的改变。
  Max@X Analyser的解决方案:
  首先,为统计区域、受理地、文化程度、年龄段等分别创建字典数据源;
  其次,建立行属性分类参数,当用户选择不同行属性(参数值变化)时,根据用户选择,使用脚本为显示行
     属性分类的列指定相应的字段数据源。
  第三,在报表数据行的创建前事件(OnBeforePrint)中,根据当前行的行属性分类值,动态创建SQL语句,
     使用动态数据库指令机制,直接向数据库请求数据,并显示在相应空格内。
  第四,设计完成。
  
  通过以上两个例子,我们可以发现,报表并不仅仅是简单地把数据库中数据做一个提取,然后填充到对应的表格中了事。在实际的应用中,数据处理要求的复杂程度可能会超出我们的想像。所以,对于一个工具来说,数据动态获取的能力,以及数据获取后的再加工能力运算,是非常重要的功能部分。
  
 
 
 报表中的数据处理方法不仅限于本篇所述,下一篇《多数据源集成与控制》中,介绍的是另一种方法和思路。
 
 
 
首页 联系我们 网站地图 
炎鼎软件 版权所有 COPYRIGHT 2000-2006 ALL RIGHTS RESERVED