这一节你将了解双向分组交叉表的制作过程,双向分组意味着表头的横纵向都将存在扩展字段,我们在销售合同数据的基础上,建立一张客户产品销售情况统计表,它在纵向上按照地区和客户进行汇总,横向上按照产品类别和产品汇总。
制作这张表需要一些销售合同数据,所以,开始本章前你要录入一些临时的合同,便于数据统计。
完成后表样如下图:
本章重点:
横向扩展,格集
第一步:建表
新建一张仅供统计的普通报表,保存为sales.raq 报表文件。报表格式如下:
选择A2 ,输入:客户,产品,金额合计
右键菜单 ? 边框设置,点击
按钮,为A2 增加斜线,点击确定。
插入语 设置了斜线的格子,系统会按照单元格内输入字符串中的逗号进行分隔。动手完成上面步骤,直接看效果比看我在这浪费口水直观得多。
第二步:数据集
新建一个复杂SQL 类型的数据集ds1 ,SQL 语句如下:
select A.province,D.areaname,A.customerid,A.customername,
B.typeid,E.typename,B.productid,B.productname,sum(C.money) as jehj
fromcustomer A,product B,contract C,area D,type E
whereC.customerid = A.customerid and C.productid=B.productid
and A.province=D.areaid and B.typeid = E.typeid
group by A.province,D.areaname,A.customerid,A.customername,
B.typeid,E.typename,B.productid,B.productname
SQL 提示 从customer,product,contract, area,type五张数据库表中选出省份编号,地区名称,客户编号,客户名称,产品类别编号,类别名称,产品编号,产品名称,合同金额9个字段,并在where语句中建立相关的关联。 合同金额依据前八个字段做分组合计(sum)。
设计器右侧 数据集tab 页,选择数据对象分组,拖动ds1 节点下的province 字段到A4 ,customerid 到B4 ,typeid 到C2 ,productid 到C3 ,在上述自动形成的表达式上加入分组前排序。如:=ds1.Group(productid,FALSE)。 选择对象类型汇总,选择合计,拖动jehj 字段到C4 。
选择C2 ,属性区域 â 扩展方式 â 属性值,选择横向扩展,同样操作调整C3 为横向扩展。
插入语 为什么我们从没有设置过纵向扩展?
可扩展单元格默认的扩展方式是纵向扩展,所以前面制作的可扩展报表都没有修改扩展方式,本例中C2和 C3要横向显示,所以它们的扩展方向要修改成横向扩展。
选择A4 ,属性区域 â 显示值 â 表达式,输入:
ds1.select1(areaname,province==value())
选择B4 ,属性区域 â 显示值 â 表达式,输入:
ds1.select1(customername,customerid==value())
选择C2 ,属性区域 â 显示值 â 表达式,输入:
ds1.select1(typename,typeid==value())
选择C3 ,属性区域 â 显示值 â 表达式,输入:
ds1.select1(productname,productid==value())
设置C2 ,C3 ,C4 ,C5 ,属性区域 â 背景色 â 表达式,
输入:IF(&C2 % 2 ==1,-3342337,-52)
插入语背景色表达式的意义
取出选中的单元格相对于上主格C2的列号,如果列号是奇数,背景色为浅蓝色,否则是淡黄色。 &C2,取出单元格自身对应C2主格的扩展列编号。这是横向扩展,如果是以C2为主格纵向扩展,取得的是扩展行编号。
选择D4 ,输入表达式:=SUM(C4{})
表达式提示 还记得曾经介绍过的主格是什么吗?D4的上主格是C2(产品类别),所以 D4中sum(C4{})的意义是按照C2(产品类别)对C4横向扩展数据(金额合计)进行汇总合计,C4{}中大括号的作用是取得 C4扩展格的值形成一个集合,,称作格集。注意,本例中C4{}取得的不是所有C4的扩展格,原因是D4还有一个左主格B4,所以 D4中的C4{}只取到D4的上主格和左主格扩展出来的C4。
插入语手工设置主格
可以手工修改一个单元格的主格设置(包括左主格和上主格)。属性区域 â左主格/上主格 â属性值,直接输入指定格,如:A2
选择C5 ,输入表达式:=SUM(C4{}) ,这是按照地区对单项产品做合计,能理解为什么是这样吗?现在回到设计器界面,参照D4 中的类别合计,你会明白的!
【属性 _ 报表属性 _ 分页】,修改分页方式为不分页。
插入语 是否分页取决于报表的布局和列表上数据量,如果是一张纵向扩展列表,对它分页可以增加阅读的方便性,同时减轻服务器运行的负担,提高程序的运行速度。本表是一张横纵双向扩展的表,横向的分页不便于浏览,这里我们选择不分页。分页还与打印的内容相关,关于打印请见第18章。


