本节我们将要制作一张产品表,与前面章节不同的是,你要把它做成按照产品类别分组的报表,本章学习的内容如下:
Ð 如何定义分组报表。
Ð 学习使用Appquicker 函数。
Ð 手工制表与通过向导定义有哪些不同?
准备工作建表
打开SQLSERVER 企业管理器,新建type (产品类别),product( 产品) 两张表,表结构如下:
关联提示产品表中的typeid字段记录了产品的产品类别信息,可以使用该字段与产品类别表进行关联
初始数据
产品类别(type )
产品表(product )
第一步
第二步:建立数据集
本表中要用到两个数据集,首先是产品表,然后是产品类别表,我们要在后者结果里取到产品类别名称。
问题为什么不写一个带有连接的SQL把类别名称和产品表的字段放到一起呢?
点击菜单栏 【配置]数据集】
点击 增加
对数据集类型的解释
Ð SQL检索 类型是通过一个SQL编辑向导界面,形成所要的SQL。
Ð 存储过程 ,建立一个基于存储过程返回结果集的数据集。
Ð 复杂SQL ,提供一个SQL语句编辑器,你可以像在SQLSERVER2000查询分析器中一样直接写SQL语句。
Ð text文件和XML文件 ,建立基于外部文件内数据的数据集。
Ð 内建数据 ,一种特色的数据集,你可以通过它把一些数据保存在报表文件(设计器保存后的文件,文件类型是raq)里,属主报表可以随时访问自身的内建数据集,属主报表之外的其它表无法访问。
Ð 语义层视图 ,Appquicker提供的一种数据包装技术,它可以把数据库中的数据字段包装成具有业务特色提示的数据列。
Ð 自定义, 通过JAVA类MyDataSetFactory定义的数据集。
选择SQL检索 ,点击确定
在选中表名的列表中加入product 表,点击确定
在数据集设置窗口中,修改数据集的名称为product ,使用同样的步骤,增加type 表的数据集,起名为type。
插入语由于系统安装时已经集成了两个数据源(demo和northwind),为避免错误链接,在定义数据集是要指定数据集的数据源归属,比如product数据集是基于appquicker数据源的。
第三步:拖动字段到预定位置
设计器界面右侧,点击数据集TAB页 ,点击product 前节点标志8 或者双击product 展开product 数据集。
在上方对象类型中选择分组,拖动typeid 字段到A3 ,在表达式编辑框中修改生成的表达式为:=product.Group(typeid,FALSE) 。
提示数据集的group函数的第二个参数用来调整分组前记录的排序顺序,true为逆序,false为顺序
选中对象类型列表,拖动productid 字段到B3 ,选中对象类型取值,拖动productname 字段到C3 。
数据对象类型:appquicker 提供了四类数据对象:
列表 :生成数据集.select(列)形式的表达式,是用指定列的所有数据填充某个单元格。
分组 :生成数据集.group(列)形式的表达式,用指定列的分组数据填充某个单元格。
取值 :生成数据集.列形式的表达式,如B4,显示与主格(B3)处于数据集中同一条记录的产品名称数据。
汇总 :生成平均,计数,最大,最小,求和五种汇总类的表单式。
选中productid 节点,选择对象类型 汇总 ,在汇总下拉表中选择计数,拖动productid 字段到B4 ,在报表上方的表达式编辑框内修改表达式为:=product.Count()
插入语拖动一个计数类型字段到报表草稿上,就自动生成了诸如=product.Count(productid)的表达式,但是数据集函数count在这里的正确写法不需要带参数,所以要把生成表达式中的括号内内容删除。
可以直接在B4内输入或者在B4的表达式编辑框内输入:
=product.Count()
与拖拽生成表达式的功能效果是一样的。了解函数的具体解释说明请见表达式编辑窗口中的函数帮助。
合并A3 ,A4 ,合并B3 ,B4 。为突出合计的数据,可以设定B3 的背景色为浅蓝色,同时增加报表表头。这时预览报表如下:
插入语主格和从属格
在上面的解释段落中,使用了主格这个词,主格是appquicker解释动态扩展格的一个主要概念,例如:在A3中拖入了类别编号字段,在B3,B4中分别拖入列表 产品编号和取值 名称字段,那么默认A3就是B3的主格,B3在数据划分上从属于A3的内容,举个例子:上面的A3中是当类别编号是1时(product表中所有荔枝产品的分类编号都是1),B3列示出全部荔枝编号。
默认的主格顺序是由左到右,所以,B3也是C3的主格,在C3中显示了匹配主格第一条分录上的产品名称,取出第一条分录是由C3中使用了取值对象决定的,你可以替换取值对象为列表或其它类型,看一看显示的结果发生了什么变化?试着自己熟悉这些变化,如果你做到了,恭喜你!你已经掌握了数据类型的使用方法!
我们合并了A3,A4,所以A3也是B4的主格。
第四步:更改显示内容
下面我们将把类别编号改为显示类别名称,产品统计数量也改成易于查看的风格。
单击A3 ,【属性_显示值_表达式】 ,双击空白格子,在弹出的表达式编辑对话框中录入:type.select1(typename,typeid==value())
提示上述表达式也可以通过向导生成,双击一下图中名称列表下标注的type,注意到了吗?上方的编辑窗口中自动出现了type.,然后在可选函数列表内找到ds.select1(),同样双击,还有字段,可是逗号和条件却只能手工输入了,比较一下,你喜欢哪一种输入风格。
插入语:value() 是appquicker提供的报表级函数,它可以取到单元格自身的值。这里的表达式就是从type数据集中查询出类别编号等于A3的类别名称。Value()和select1()函数的具体用法请参见函数帮助。
点击B4 ,【属性_显示值_表达式】 ,双击空白格子,在弹出的表达式编辑对话框中录入:“类中产品数量: “+value()+” 种“
提示 对于一个单元格,显示内容可以引用单元格实际值,上面的设置就是引用值形成显示值的典型应用。
保存报表为typeproduct.raq ,现在浏览一下我们的报表吧!
章后练习
练习一 为上一张的人员列表设定部门列显示部门名称(目前显示部门编号)。
练习二 你可以通过练习来熟练掌握制作分组报表的技巧,下面是一个练习,试着完成它:在appquicker 数据库中建立一张部门(dept )数据表:
关联提示 人员表(employee)通过deptid与部门表进行关联
初始部门表数据:
使用employee 和dept 表制作一张部门人员表deptemp.raq















