信息系统的联查分析功能给对账查账工作带来了很大的便利,常见的是从分类账联查到明细账,或与你还不了解分类账和明细帐是什么东西!举例说:我们查每个客户的销售额统计,在这个列表上,点击一个客户分录,能够查询出这个客户的所有销售记录,这就是联查分析。
下面我们就来实现联查分析功能。
第一步:建立客户销售统计表和销售明细表
客户销售统计表:
新建一张可以填报的普通报表,保存为customerstat.raq ,报表结构如图:
【配置_ 数据集】,新增基于contract 表的SQL检索 数据集ds1 ,包括customerid 和money 字段;建立基于customer 的SQL检索 数据集ds2 ,包括customerid 和customername 字段。
数据集tab页 ,选择数据类型8分组 ,拖动ds1 节点下的customerid 到A3 ,选择数据类型8汇 总,在下拉列表中选择求和,拖动ds1 节点下的money 到B3 。
修改A3 的表达式为:=ds1.Group(customerid,false) ,在分组前先进行排序。
选择A3 ,设置前景色为蓝色,字体带有下划线,切换到属性区域â 显示值â 表达式,输入:
if(value() == null,”零售合计“,ds2.select1(customername,customerid==value()))
表达式提示 如果A3中没有编号(合同中没有录入客户编号),显示”零售合计”,如果有编号,从ds2数据集中查找出与该编号对应的客户名称作为A3显示值。
选择A3 ,属性区域â 超链接â 表达式,输入:
“javascript:show_MX(”+A3+”)”
表达式提示show_MX()函数作用是:当用户点击某行客户名称时,打开该用户的所有销售明细。函数引用把A3的值(客户编号)作为查询参数。
插入语 本例也可以通过SQL语句实现汇总,上例为了练习使用技巧,采用了前端分组的方法。
销售明细表:
新建一张可以填报的普通报表,保存为customerMX.raq ,报表结构如图:
【配置_参数】,新建整数类型参数customerid,
数据集tab页,拖动参数节点下@customerid到B2,选择B2,属性区域â显示格式â属性值,双击,在表达式窗口中输入:
if(value()==0,”零售合计“,customer.select1(customername,customerid==value()))
提示 如果客户编号为0值,客户名称中显示零售合计,客户编号是否为0值由链接函数中决定,算法见下文JSP代码。
【配置_宏】,增加一动态宏macro1,值表达式如下:
if(@customerid ==0,”where customerid is null “,”where customerid=”+@customerid)
【配置_数据集】,新增基于contract表的复杂SQL数据集,SQL语句如下:
SELECT * FROM contract where ${macro1}
新增基于customer表的SQL检索数据集,包含customerid和customername两个字段;新增基于product表的SQL检索数据集;新增基于employee表的SQL检索数据集,包含employeeid和employeename两个字段;
数据集tab页,数据类型选择列表,拖动contract节点下contractid到A4,数据类型选择取值,拖动orderdate到B4,empid到C4,consignmentdate到D4,banlancetype到E4,transmethod到F4,productid到G4,amount到H4,price到I4,money到J4。
选择B4,D4属性区域â显示格式â属性值,双击,在格式编辑窗口中选择日期:yyyy-MM-dd。
选择C4,属性区域â显示值â表达式,输入:
employee.select1(empname,empid==value())
选择E4,属性区域â显示格式â属性值,双击,在表达式窗口中输入:
if(value()==”1″,”现金支付“,”银行支票“)
选择F4,属性区域â显示格式â属性值,双击,在表达式窗口中输入:
if(value()==”1″,”铁路运输“,”公路运输“)
选择G4,属性区域â显示值â表达式,输入:
product.select1(productname,productid==value())
第二步:建立JSP文件
在C:\Program Files\runqianReportCenter\webapps\reportCenter 目录下,新建一个文本文档,保存为customerstat.jsp ,这里记得修改文件的扩展名, 这个JSP 作用是显示customerstat.raq 报表文件。
customerstat.jsp 内容如下:
#001 <%@ page contentType=”text/html;charset=GBK” %>
#002 <%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>
#003 <html>
#004 <body leftMargin=0 top =0 rigtMargin=0 bottonMargin=0>
#005 <report:html name=”report1″ reportFileName=”basic/customerstat.raq”
#006 funcBarLocation=”"
#007 />
#008 </body>
#009 </html>
#010 <SCRIPT LANGUAGE=”JavaScript”>
#011 function show_MX(customerid)
#012 {
#013 if(customerid == null)
#014 {
#015 customerid=0;
#016 }
#017 var strurl=”customerMX.jsp?params=customerid=”+customerid;
#018 window.open(strurl,”_blank”,”Scrollbars=yes,Toolbar=no,Location=no,Direction=yes,
titlebar=no,Resizeable=no,Width=780 ,Height=500,top=”+(window.screen.height-500)/2+
“,left=”+(window.screen.width-800)/2);
#019 }
#020 </SCRIPT>
插入语if语句作用:对customerid参数进行判断,如果该参数是空值(customerstat报表上客户编号是空值),那么customerid被赋值0,这里0是一个标记,在customerMX表中会以该标记为依据,整理零售合计数据。
在C:\Program Files\runqianReportCenter\webapps\reportCenter 目录下,新建一个文本文档,保存为customerMX.jsp ,这里记得修改文件的扩展名, 这个JSP 作用是显示customerMX.raq 报表文件。
CustomerMX.jsp 内容如下:
#001 <%@ page contentType=”text/html;charset=GBK” %>
#002 <%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>
#003 <html>
#004 <body leftMargin=0 top =0 rigtMargin=0 bottonMargin=0>
#005 <report:html name=”report1″ reportFileName=”basic/customerMX.raq”
#006 funcBarLocation=”"
#007 params=”<%=request.getParameter(”params”)%>”
#008 />
#009 </body>
#010 </html>
第三步:发布链接节点
登录数据中心控制台,打开报表发布,在查询分析节点下新建超链接类型节点,节点名称客户销售统计表,此节点对应的超链接选择系统功能链接,在编辑框内输入:
/customerstat.jsp
提交 后,登录数据中心首页,打开用户销售统计表,检查一下报表的联查功能。


