<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.6" -->
<rss version="0.92">
<channel>
	<title>快逸报表（Quiee Report）</title>
	<link>http://www.quiee.com.cn</link>
	<description>选择快逸，选择专业</description>
	<lastBuildDate>Wed, 16 Dec 2009 01:23:05 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>在快逸报表中如何动态设置单元格的左主格</title>
		<description>
单元格进行纵向扩展时，我们称其为其右边格子的左主格。
左主格属性可以默认缺省，也可以人为的改变。左主格可以固定的设置为某个单元格，也可以根据某个条件动态的设置。条件成立时左主格就是这个单元格，条件不成立时就是另一个单元格。比如下面的需求，就要用到动态的设置单元格的左主格的功能：一张报表有一行三列，A1是B1的左主格，B1是C1的左主格。B列根据条件隐藏，如果B列隐藏，C列就根据A列扩展；如果B列不隐藏，C列就根据B列扩展。
下面就介绍动态设置单元格左主格的方法。
 
大致思路：
用提供的API读取报表，得到一个ReportDefine对象，从这个对象中得到需要设置左主格的INormalCell单元格对象，然后根据条件用单元格类中的setLeftHead方法设置这个单元格的左主格，用Bean方式发布报表。
 
第一步：新建报表
打开快逸设计器，新建一个空白报表，另存为test.raq，新建一个参数，命名为arg，单元格中输入的内容如下：
A1: A列
B1： B列
C1： C列
D1： 接收的参数
A2： aa
B2： =to(1,5)
C2： cc
D2： =@arg

 
第二步：编写发布报表的jsp
Jsp的内容如下：
&#60;%@ page contentType=”text/html;charset=GBK”%&#62;
&#60;jsp:directive.page import=”com.runqian.report4.model.ReportDefine”/&#62;
&#60;jsp:directive.page import=”com.runqian.report4.util.ReportUtils”/&#62;
&#60;jsp:directive.page import=”com.runqian.report4.usermodel.INormalCell”/&#62;
&#60;jsp:directive.page import=”java.util.Enumeration”/&#62;
&#60;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%&#62;
&#60;%
//得到动态设置单元格左主格的标志。如果参数arg的值为1，设置C2单元格的左
//主格为A2，并且删除B列；如果参数arg的值不为”1″，设置C2单元格的左主格为B2
String arg = request.getParameter(”arg”);
//取得报表真实路径
String reportPath = request.getRealPath(”/reportFiles/test.raq”);
//用ReportUtils类中的read方法读取报表
ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
//得到要设置左主格的单元格，第二行第三列
INormalCell cellC2 = rd.getCell(2,(short)3);
//设置单元格的左主格
if(arg.equals(”1″)){
//设置C2的左主格为A2
cellC2.setLeftHead(”A2″);
//删除B列
rd.removeCol((short)2);
}else{
//设置C2的左主格为B2
cellC2.setLeftHead(”B2″);
}
//生成一个动态的beanName
String beanName = “RPT_”+Double.toString(Math.random());
request.setAttribute(beanName,rd); //把ReportDefine对象在request中保存
 
//接收参数
StringBuffer param = new StringBuffer();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
if(paramValue!=null){
//把参数拼成name=value;name2=value2;…..的形式
param.append(paramName).append(”=”).append(paramValue).append(”;”);
}
}
}
%&#62;
&#60;html&#62;
&#60;body&#62;
&#60;table align=center&#62;
&#60;tr&#62;&#60;td&#62;&#60;!-用Bean方式发布报表–&#62;
&#60;report:html name=”report1″
srcType=”defineBean”
beanName=”&#60;%=beanName%&#62;”
params=”&#60;%=param.toString()%&#62;”
/&#62;
&#60;/td&#62;&#60;/tr&#62;
&#60;/table&#62;
&#60;/body&#62;
&#60;/html&#62;
 
第三步：浏览
在IE浏览器中输入URL：http://127.0.0.1:6001/quiee/reportJsp/MyJsp.jsp?arg=1，效果如下

B列删除，C列跟随A列扩展。
 
更改参数arg的值，再次浏览：http://127.0.0.1:6001/quiee/reportJsp/MyJsp.jsp?arg=12，
效果如下

C列跟随B列扩展。
 
总结：以后遇到动态设置单元格左主格的问题，可以按照上面的方法实现了。如果要动态设置单元格的上主格，可以用类setTopHead中方法。
 

 </description>
		<link>http://www.quiee.com.cn/archives/1855</link>
			</item>
	<item>
		<title>如何通过JS调用快逸报表的下拉日历</title>
		<description>
下拉日历是快逸报表为日期填报提供的一个便捷功能，可以让用户快速准确的填写日期信息，避免了手动填写所产生的的格式误差和数值误差。但是这么实用的功能如果仅仅只能在报表区域才能使用未免有些浪费，用户的整体项目中报表只是其中的一部分，非报表区域很多时候也会用到下拉日历，总不能让用户自己再去费劲找一个日历控件来用吧？费时而且和报表风格还不统一。
于是就引出了标题中的需求，如何在项目中调用快逸的下拉日历，下文就来一步步给大家解决这个需求。
实际上，在快逸报表中下拉日历是调用了一个由快逸提供的JS：calendar.js，因此，非报表区域的调用这个js就可以了，比如我们自己定义一个onclick事件来调用快逸的下拉日历JS。同时，也可以自定义数据的格式。
下面就以一个例子（格式：选择月份）介绍调用快逸下拉日历的实现过程。
实现思路：
1， 引入快逸下拉日历自定义JS
2， 在Form表单内通过onclick事件调用下拉日历控件
 
具体实现步骤如下：
第一步：在需要调用控件的页面jsp引入快逸下拉日历自定义JS
引入代码如下：
&#60;script language=javascript
src=”http://127.0.0.1:6001/demo/reportServlet?action=10&#38;file=%2Fcom%2Frunqian%2Freport4%2Finput%2Fcalendar.js” mce_src=”http://127.0.0.1:6001/demo/reportServlet?action=10&#38;file=%2Fcom%2Frunqian%2Freport4%2Finput%2Fcalendar.js”&#62;
&#60;/script&#62;
//创建快逸报表下拉日历控件实例对象
&#60;script language=javascript&#62;_createRunqianCalendar();&#60;/script&#62;
这里要注意的是，该JS要在调用它的文本框的下面引入，否则就会因为找不到快逸自带的下拉日历JS定义的对象而报”不可识别的对象：_runqianCalender”错误。
第二步：在Form表单中定义调用下拉日历的文本框
实现代码如下：
&#60;form name=from1&#62;
选择月份：
&#60;!-调用快逸下拉日历，并设置日期格式为年月”yyyy-MM”–&#62;
&#60;input name=reportMonth onClick=”_runqianCalendar.dateFormat=’yyyy-MM’;
_runqianCalendar.type= ‘month’;_showCalendar();” &#62;
&#60;/form&#62;
到此，我们就简单实现了在Form表单文本框中调用快逸报表下拉日历的功能，接下来看一下例子实现的效果：
Form表单在web显示效果

单击文本框，调用下拉日历效果

选择日期值后的效果

例子中完整的JSP如下：
&#60;%@ page contentType=”text/html;charset=GBK” %&#62;
&#60;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %&#62;
&#60;html&#62;
&#60;body&#62;
&#60;!-调用下拉日历控件的form表单定义（文本框的onclick事件）–&#62;
&#60;form name=from1&#62;
选择月份：
&#60;input name=reportMonth onClick=”_runqianCalendar.dateFormat=’yyyy-MM’;
_runqianCalendar.type= ‘month’;_showCalendar();”&#62;
&#60;/form&#62;
&#60;!-引入下拉日历JS–&#62;
&#60;script language=javascript
src=”http://127.0.0.1:6001/demo/reportServlet?action=10&#38;file=%2Fcom%2Frunqian%2Freport4%2Finput%2Fcalendar.js” mce_src=”http://127.0.0.1:6001/demo/reportServlet?action=10&#38;file=%2Fcom%2Frunqian%2Freport4%2Finput%2Fcalendar.js”&#62;
&#60;/script&#62;
&#60;!-引入创建下拉日历控件对象的JS–&#62;
&#60;script language=javascript&#62;_createRunqianCalendar();&#60;/script&#62;
&#60;/body&#62;
&#60;/html&#62;
 
总结：由上面的例子可以看出，快逸报表再设计层面上是非常灵活的，可以轻松的直接运用快逸提供的一些向导、可视化界面进行设计，也可以根据自己的需要通过少量的代码来实现更加个性化的需求。

 </description>
		<link>http://www.quiee.com.cn/archives/1851</link>
			</item>
	<item>
		<title>如何将web报表查询的参数保存</title>
		<description>web报表用户在使用带参数的报表查询时，很多时候用到的参数都不是从参数模板填写获取的，而是从页面传递的，比如访问者的名字。一般这些数据会存放在会话变量（Session）中。本文就来介绍下如何将页面中获取的参数传递给报表。
实现思路：使用快逸报表参数模板标签中的hiddenParams（用户提交的一些隐含的参数，如登录用户名、用户身份等）属性。
第一步：制作带参数的报表
打开快逸报表下的基础报表/参数报表.raq.
为其增加一个参数username，E1单元格修改为=@username+"用户已登录",如下图:

第二步：在jsp页面中模拟web项目
在展现报表的showReport.jsp中模拟将username存放在session中，并且在页面中得带该值。代码如下：
&#60;%
String username = "quiee";//模拟访问者名字叫做quiee
session.setAttribute("username",uesename);//将name放到session中
String str="username="+session.getParameter("username ");//从session中取得username的值,并拼成name=value的形式的字符串.
//…将这个字符串拼在jsp中参数StringBuffer param后面.
Param.append(str);
%&#62;
在&#60;report:param&#62;标签中将params="&#60;%=param.toString()%&#62;"注销,增加hiddenParams="&#60;%=param.toString()%&#62;"
现在浏览该报表并做查询操作:

这样就达到了查询后保留从页面传递的参数了.同样这个参数可以放到数据集中进行sql检索. </description>
		<link>http://www.quiee.com.cn/archives/1839</link>
			</item>
	<item>
		<title>使用str和rplc函数实现多个记录拼接</title>
		<description>

我们在web报表的制作过程中，常常需要把某一字段记录集中显示，如下图中的各个地区的城市，集中显示在一个单元格中。



在快逸报表中，这样的需求可以通过str()函数实现，下面是实现方法：

第一步：新建报表，设置数据集ds1，SQL语句如下：
SELECT 订单.货主地区,订单.货主城市,订单.运货商,订单.运货费,订单.订购日期,订单.发货日期,订单.到货日期 FROM 订单

第二步：设置单元格表达式及报表样式，如图所示：



设置A4表达式为：=A3+” 地区城市有”；
设置B5表达式为：=str(ds1.dselect(货主城市))
我们使用str()函数进行货主城市的拼接，默认使用”，”作为分隔符，如图所示：



在这里我们可以使用rplc()函数进行分隔符的替换，具体函数的用法可以查看函数说明。本文中使用”-”分隔，设置B4表达式为：=rplc(str(ds1.dselect(货主城市)),”,”,”-”)即可。


第三步：保存后发布，就可以出现本文开始的效果。

快逸报表内置了很多函数供用户选择使用，这些看似简单的函数，通过合理的使用往往可以解决很多复杂的需求，文中介绍的仅仅是快逸函数体系中的两个简单函数，更多实用方便的函数还在等着大家去使用。 </description>
		<link>http://www.quiee.com.cn/archives/1848</link>
			</item>
	<item>
		<title>快逸报表实现将多个报表导入一个excel的多个sheet</title>
		<description>在实际的应用中，经常会有数据从excel导入系统数据库或者数据从系统中导入到excel，这两种业务操作快逸报表可以轻易地实现，但普通的导出数据大多都是导出到一个单独的excel中，还有一种客户经常使用的数据处理方式，是将多个报表的运算结果导入到同一个excel的多个sheet中。下面的例子就简单的实现这一业务。
 
一：实现思路
先读取多个报表，分别计算多个报表，然后把多个结果添加到导出列表，最后实现导出到excel的多个sheet中。
二：实现步骤（以两个报表为例）
1：首先制作两个报表one.raq和two.raq，如下图：
One.raq


Two.raq

2：利用快逸提供的方法读入两个报表，读入计算并导出，代码如下：
&#60;%@ page contentType=”text/html;charset=GBK” %&#62;
&#60;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %&#62;
&#60;%@ page import=”com.runqian.report4.model.ReportDefine”%&#62;
&#60;%@ page import=”com.runqian.report4.model.engine.ExtCellSet”%&#62;
&#60;%@ page import=”com.runqian.report4.usermodel.Context”%&#62;
&#60;%@ page import=”com.runqian.report4.usermodel.Engine”%&#62;
&#60;%@ page import=”com.runqian.report4.usermodel.IReport”%&#62;
&#60;%@ page import=”com.runqian.report4.util.ReportUtils”%&#62;
&#60;%@ page import=”com.runqian.report4.usermodel.PageBuilder”%&#62;
&#60;%@ page import=”com.runqian.report4.view.excel.ExcelReport”%&#62;
&#60;html&#62;
&#60;body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0&#62;
&#60;%
//创建context对象，设置报表的路径
Context ctx = new Context();
String path = “D:/Program Files/reportHome/webapps/demo/reportFiles/one.raq”;
//读入报表
ReportDefine rd = (ReportDefine) ReportUtils.read(path);
Engine engine = new Engine(rd, ctx);
//计算报表
IReport report = engine.calc();
 
Context ctx1 = ...</description>
		<link>http://www.quiee.com.cn/archives/1843</link>
			</item>
	<item>
		<title>Web报表中用switchCase实现不同条件自动计算不同的表达式</title>
		<description>在快逸填报表中，系统提供的自动计算功能方便了使用者在录入数据后自动计算某些单元格的值，这样即加快了填报数据的速度，同时也降低录入的错误率。
下面我们来介绍一个功能丰富的自动计算函数switchCase。
switchCase函数是快逸报表中内置定义的一个JavaScript函数，可以在报表中直接使用而无需用户再定义，它主要完成在不同的匹配值下返回不同表达式的计算结果，相当于各编程语言的switch case语句的功能。
首先，我们来介绍一下switchCase的语法规则：
switchCase( 变量或常量, 值1, 返回值1, [值2, 返回值2, ......]缺省返回值 )
从上面的语法规则中我们可以看到，switchCase函数和快逸报表中的if函数非常相似，所不同的是，switchCase函数是用在自动计算上的，而if函数是用在单元格判断上的。

接下来，我们以一个简单的例子说明switchCase的用法，如在公司中，各部门的工资发放规则可能不同，销售部门，当月工资的计算表达式是：日基本工资×考勤次数＋当月奖金＋销售额×0.05，而综合部门的工资计算表达式是：日基本工资×考勤次数＋当月奖金＋其它奖金，当然，其它部门有其它部门的计算规则，设计界面如下图所示：



从图上可以看出，H6单元格为空白，需要在前面的各项数据检索出来以后自动计算。那么当月工资H6单元格的自动计算表达式如何写？看H6单元格的填报属性设置如下图所示：



其中”自动计算”属性完整的表达式是：
switchCase(${A6},”0001″,${(C6*G6)+D6+(E6*0.05)},”0002″,${(C6*G6)+D6+F6},${C6*G6+D6})
本表达式的意思是，当A6格扩展出来的值为0001时（0001代表销售部），当月工资计算公式是日基本工资×考勤次数＋当月奖金＋销售额×0.05，当A6格扩展出来的当前值是0002（0002代表综合部），当月工资计算公式是日基本工资×考勤次数＋当月奖金＋其它奖金，默认情况下返回日基本工资×考勤次＋当月奖金。运行情况如图：



我们如果修改员工姓名为”张兴龙”的当月奖金及员工姓名为”孙悟空”的其它奖金后，自动计算运算的结果也随之改变，如图所示：



可以看到，由于销售部和综合部门的工资计算表达式不同，两个人的工资根据各自的工资计算表达式被自动计算出来了。
从上面的例子中，我们可以看出，switchCase函数在自动计算中起到的强大作用，一个看似复杂的填报计算表，用switchCase函数就可以轻而易举的解决。利用同样的方法，我们还可以自动计算譬如日期间隔，数值平均，字符串拼接等实现丰富多样的功能。 </description>
		<link>http://www.quiee.com.cn/archives/1838</link>
			</item>
	<item>
		<title>快逸对特殊字符展现的灵活处理</title>
		<description>在web应用中，经常会遇到对一些特殊字符的处理，比如要显示这样的字符”“，在Html，word，和java中单独展现这样的字符都非常的简单。但是当需要在这三种情况时同时输出特殊字符就出了问题，因为Java，html，word的处理方式是不一样的；这些字符在页面显示正常，在Java和导出word中就可能显示不正常，乱码；在Java或导出word中显示正常的，在html中又乱码；这对于需要在页面展现，又要打印、导出到word的需求来说，就很棘手。

在快逸中，灵活变通一下，将这些特殊字符做成一张图片，以图片的方式展现，打印，导出，就能很容易的解决这个两难的问题。下面我们就以”“字符为例，看一下具体解决过程。

第一步：把特殊字符做成图片形式

第二步：制作报表
1 制作一张报表，如下图：



2 建数据集，sql：SELECT类别名称,产品名称,产品销售额 FROM 各类销售额
3 单元格表达式：A1,B1,C1,D1合并单元格，输入：”各类产品统计表”
在A2,B2,C2,D2中分别输入：”类别名称”，”产品名称”，”产品销售额”，”备注”；
在A3,B3,C3中分别输入：=ds1.group(类别名称,false)，= ds1.select(产品名称)，= ds1.产品销售额
在D3中，单击右键，将单元格的数据类型设置成图片文件，如下图：



内容中输入：if(C3 &#60; 5000, ‘taoda.png’,”)；意思为产品销售额小于5000的显示这个””字符，大于5000的不显示；将”taoda.png”图片放在报表文件夹下就可以了。

第三步：发布报表

在页面中展现，预览效果：



现在展现，导出，打印都可以正常显示了。

总结：在web报表开发过程中，灵活运用各功能是很重要的，有些看似棘手的问题，改变下思路，就很容易解决了。 </description>
		<link>http://www.quiee.com.cn/archives/1833</link>
			</item>
	<item>
		<title>参数报表实现默认查询的两种方法</title>
		<description>参数报表功能比较强大，可以根据自己的需求把需要的数据查询出来，既然用到了查询就少不了需要根据默认条件来查询。因为很多时候我们需要不输入条件就可以看到报表。本文就来介绍两种实现默认查询的方法。

第一种方法：参数编辑框”值表达式”中设置默认值

此方法常用于以某个固定值默认查询

这个方法很简单，直接在报表参数编辑里设置就可以了。
以任意带参数的报表为例在参数报表中设置默认值，如下图给参数”area”设置默认值为”华北”



浏览报表的时候就会查询出货主地区为华北的数据。

第二种方法：利用动态宏设置默认查询条件

此方法常用于默认不查询任何数据

大致思路： 通过动态宏返回不同的查询条件进行查询，如果选择了查询条件并点击”查询”按钮进行查询，动态宏就返回空值，不影响报表查询，报表根据选择的查询条件来查询；如果没有选择查询条件也没有点击 “查询”按钮，动态宏则返回默认条件，报表就会根据设置的默认条件来查询。

第一步：制作参数报表
新建一个空白报表，另存为”参数查询.raq”，新建一个参数，命名为”area”，用于接收参数模板中传递过来的货主地区。新建一个数据集，sql语句为：
“SELECT 订单.订单ID,订单.货主国家,订单.货主地区,订单.货主地址 FROM 订单 WHERE 订单.货主地区 =? or ? is null”,
给数据集增加两个参数”area”。单元格中输入的内容如下：
A1: 订单ID
B1: 货主国家
C1: 货主地区
D1: 货主地址
A2: =ds1.Select(订单ID)
B2: =ds1.货主国家
C2: =ds1.货主地区
D2: =ds1.货主地址
如下图，把不需要的单元格删除掉



新建一个空白报表，另存为”参数查询_arg.raq”，把报表设置为填报表，A1单元格输入的内容：”请选择货主地区：”。给B1单元格设置下拉列表框，如下图：



选中B1单元格，设置变量名为”area”



第二步：判断参数模板中是否选择了条件并点击”查询”

在设计器中打开” 参数查询_arg.raq”，给报表追加一列C列，选中C1单元格，设置它的变量名为”selectFlag”，如下图：



设置C1单元格的值为”1″，如下图：



然后把C列的宽度设置为1，把C列隐藏起来，注意这里不是设置列的可视属性。

第三步：设置动态宏，根据判断结果返回不同的查询条件

在设计器中打开报表”参数查询.raq”，增加一个参数”selectFlag”：



增加动态宏”ifSelect”，如下图：



动态宏的意思是如果用户点击了”查询”按钮，就返回空，宏不起作用；没有点击”查询”按钮，就返回宏里设置的默认查询条件进行查询，例子中返回的是：”1=2″，意思就是不查询任何数据（用户可以根据自己的需要在宏里设置不同的查询条件）。



第四步：浏览报表


在IE中浏览报表”参数查询.raq”



从上图中可以看出没有查出任何数据。

对比以上两种方法发现，第一种方法比较适合参数设置默认条件，第二种方法比较适合默认不查出任何数据。以后遇到类似的需求就可以用上面的方法实现了。 </description>
		<link>http://www.quiee.com.cn/archives/1826</link>
			</item>
	<item>
		<title>Web报表中如何设置超链接的样式</title>
		<description>

Web报表中如何设置超链接的样式。

超链接是WEB项目中经常会用到的功能，如实现数据钻取，数据详细说明等。在WEB页面中，各种属性的数据是很多的，怎样对有超链接的数据与普通数据进行区别展现，让用户能一目了然的知道，哪些数据是有超链接的，哪些没有，这就是本文要介绍的如何设置超链接数据的样式。

我们以超链接实现数据钻取为例，来展示快逸报表是怎么实现这个功能的。
先简单介绍下报表超链接的制作：制作好两张报表，客户订单表、订单明细表，分别命名为：”客户订单.raq”、”订单明细.raq”。订单明细表是以订单号关联，展现客户订单表中各个订单所购产品的详细信息。选中客户订单.raq的订单号值单元格（比如B2格），在属性栏的表达式中，输入：”/reportJsp/showReport.jsp?raq=/订单明细.raq&#38;arg1=”+B2就可以了。超链接就做好了（arg1是订单明细.raq表中定义的，接收订单号值的参数）。

下面我们用客户订单表作例子来完成样式的设置，下面是默认的没有样式显示的报表效果：



上图是没有超链接样式的页面效果，我们再看一下超链接样式的效果：



对比两张图，我们发现，在第2个图中的订单号的值下面多了一个横线，颜色也变了，这就是设置了超链接样式。那这样的特效显示在快逸报表中是怎么设置的呢，其实很简单，仅仅用一个tag标签就可以实现了，我们看下面的代码：

showReport.jsp部分代码：
&#60; report:html name=”report1″ reportFileName=”&#60; %=report% &#62;”
params=”&#60; %=param.toString()% &#62;”
funcBarLocation=”"
needPageMark=”yes”
generateParamForm=”no”
needLinkStyle=”no”//单元格有超链接属性时，是否用设计的字体属性显示；
//有两个value值，yes和no，no为显示超链接样式，默认值为yes。
width=”-1″
exceptionPage=”/reportJsp/myError2.jsp”
/ &#62;
就是代码中的这个标签needLinkStyle=”no”就让我们轻松实现了超链接的特效显示

文章总结：用快逸实现超链接样式，很简单，做好超链接报表后，只需要一个标签needLinkStyle=”no”，就可以将页面超链接数据与普通数据区分开来，让用户一目了然。 </description>
		<link>http://www.quiee.com.cn/archives/1824</link>
			</item>
	<item>
		<title>快逸报表统计图之间的切换方法（二）</title>
		<description>

快逸报表提供了非常强大的图形功能，饼形图，柱状图，折线图等等，这些图形在web报表中都有很广泛的应用，快逸报表都可以很轻松便捷的设计每一种统计图。但是这些统计图之间是否可以来回切换呢，比如我设计了一个饼形图，但是别人却想看它的柱形图效果，能否轻松的实现饼形图到柱形图的转换就是本文要解决的需求。
实现这个需求的主要思路是先将需要的统计图设计出来，然后通过控制该统计图所在行的显示与隐藏，来控制该统计图的显示与隐藏。具体的实现步骤如下：

第一步，准备数据与统计图

本例连接的是demo数据源。
ds1：SELECT EMPLOYEE.EMPID,DEGREE.NAME,TITLE.TITLENAME FROM EMPLOYEE,DEGREE,TITLE
WHERE TITLE.ID = EMPLOYEE.TITLE and EMPLOYEE.DEGREE = DEGREE.ID
然后设计报表：



A2：=ds1.group(TITLENAME,false)
B2：=ds1.count()
在A3，A4，A5插入统计图，
A3：饼形图，分类轴为=A2，系列名称=”员工数”，系列值=B2，标题=A2+B2+”人”
A4：柱状图，分类轴为=A2，系列名称=”员工数”，系列值=B2，标题=A2+B2+”人”
A5：折线图，分类轴为=A2，系列名称=”员工数”，系列值=B2，标题=A2+B2+”人”
将统计图调节到适当的高度，以便显示的时候能完全显示出统计图信息。

第二步，为报表加入参数来控制显示统计图的类型

为报表加入一个参数，本例中命名为type，类型为数值，默认值为1。
然后在各统计图所在行的隐藏属性中接受该参数，通过表达式判断该行是否隐藏，下面是统计图所在各行的判断表达式：
选择A3单元格，在隐藏行的表达式里写if(@type==1,false,true)
选择A4单元格，在隐藏行的表达式里写if(@type==2,false,true)
选择A5单元格，在隐藏行的表达式里写if(@type==3,false,true)



最后一步，设计参数模板



选择C2，定义填报属性，编辑风格是下拉列表框，然后设计列表框



这样报表就设计完毕，浏览报表，参数值默认为1，所以默认显示为饼形图。



当选择柱状图时：



当选择折线图时：



这样，通过动态隐藏行列的方法就实现了统计图之间的切换的功能，满足了不同浏览者的需求。 </description>
		<link>http://www.quiee.com.cn/archives/1807</link>
			</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.773 seconds -->
<!-- Cached page served by WP-Super-Cache -->
<!-- Compression = gzip -->