第6章 数据展示和输出功能 创建和使用报表 报表(Report)是以打印格式展示数据的一种有效方式。在报表中,可以展示图形、文字标题、字段数据或汇总数据等形式的信息,并可以控制各种数据的大小和外观。 利用报表,还可以按照数据之间的逻辑关系和所需的方式来组织数据之间的排版布局,对数据进行多级汇总和统计,或以图形方式展示数据。
6.1 认识报表:报表的类型及主要作用 1.详细报表。在报表中列出记录数据。
6.1 认识报表:报表的类型及主要作用 2.分组报表。将相关的业务数据以分组的形式组织在一起,并在分组基础上对有关数据进行汇总性计算。
6.1 认识报表:报表的类型及主要作用 3.汇总报表。对明细的基础业务数据进行汇总计算,并将汇总计算的结果呈现在汇总报表。
6.1 认识报表:报表的类型及主要作用 4.图表报表。在报表中插入一些图形或表格,便于对相应数据进行直观的比较。
6.1 认识报表:报表的类型及主要作用 5.标签报表。特定格式的邮件标签。
6.2 使用自动功能创建简单报表 在Access数据库中,创建报表的方法主要有: 1.使用自动功能创建报表; 2.使用向导创建报表; 3.在设计视图中创建报表。 【练习6-1(P133)】使用自动功能,为“雇员”表创建表格式报表。
6.2.1 使用自动功能创建表格式报表
6.2.1 使用自动功能创建表格式报表 在报表的不同视图之间进行切换
6.2.1 使用自动功能创建表格式报表 报表的三种视图: 设计视图:用于创建新报表,或者修改已有报表;在设计视图中,用户可以根据需要对报表进行更细致的设计。 打印预览视图:提供实际打印前的预览,这样可以快速查看报表打印结果的页面版面,并通过查看报表的每页内容来确认数据的正确性及数据的布局合理性。 版面预览视图:与打印预览视图类似,版面预览视图也提供实际打印前的预览。与打印预览视图不同的是,版面预览视图可以显示多页打印效果。
6.2.1 使用自动功能创建表格式报表 在设计视图中观察报表的组成结构。
6.2.2 控件及其类型和属性 1.报表的组成元素——控件
6.2.2 控件及其类型和属性 2.控件的类型和属性 在报表中,根据是否需要数据源,可以将控件划分为绑定控件、计算控件和未绑定控件三种类型。 绑定控件与数据源连接。 计算控件的“控件来源”属性值是以等号引出的表达式。 未绑定控件可以提供解释性说明、修饰报表和对其它控件进行布局的作用。
6.2.3 使用自动功能创建纵栏式报表 【练习6-2(P136)】使用自动功能,为“雇员”表创建纵栏式报表。
6.2.3 使用自动功能创建纵栏式报表 在纵栏式报表中,每一行只展示一个字段的数据,不同字段的数据按照纵向方向排列。
6.3 使用向导创建多级分组报表 建立(多级分组)报表的概念 ③最后一级为产品明细数据 ①产品数据首先按照“类别名称”进行一级分组 ②再在同一大类产品中,按照供应商的“公司名称”进行二级分组 ④相邻分组级别之间使用“逐级缩排”的排版形式,从而使得各级数据在报表中呈现出有规律的逻辑关系 ⑤报表中的字段数据来自多个表
6.3 使用向导创建多级分组报表 【练习6-3(P138)】使用“报表向导”,创建如前图所示的多级分组形式的产品明细报表。 步骤一:创建报表前的准备工作——建立“类别”表、“供应商”表和“产品”表之间的一对多关系。 步骤二:使用“报表向导”创建多级分组报表。
6.3 使用向导创建多级分组报表 步骤一:创建报表前的准备工作(P138) 为一对多关系中“一”端表(即父表)设置主键 建立“类别”、“供应商”和“产品”之间的一对多关系 ①将“类别ID”字段从“类别”表拖放到“产品”表的“类别ID”字段 ③确定 ②选择“实施参照完整性“
6.3 使用向导创建多级分组报表 步骤二:使用“报表向导”创建多级分组报表(P138) 1.启动“报表向导” 2.确定报表上使用哪些字段 3.确定查看数据的方式 4.确定分组级别的字段 5.确定明细信息使用的排序次序 6.确定报表的布局方式 7.确定报表样式 8.为报表指定标题 9 .保存报表的设计
10.调整控件的大小和位置 —对某个控件单独进行调整 6.3 使用向导创建多级分组报表 10.调整控件的大小和位置 —对某个控件单独进行调整 移动控点 尺寸控点 当鼠标变为双向箭头时,可以使用鼠标拖放方式改变控件的大小。 同时按住【Shift】键和【←】键(或【↑】、【→】、【↓】键),也可以逐渐改变控件的大小。 当鼠标变为手形时,可以使用鼠标拖放方式移动控件。 同时按住【Ctrl】键和【←】键(或【↑】、【→】、【↓】键),也可以逐渐对控件进行移动。
10.调整控件的大小和位置 — 对若干个控件同时进行调整 6.3 使用向导创建多级分组报表 10.调整控件的大小和位置 — 对若干个控件同时进行调整 ①确定需要同时调整的控件。 ②统一控件大小。点击鼠标右键激活弹出菜单,在其中的【大小】菜单中选择【至最高】、【至最短】、【至最宽】和【至最窄】等命令,则被选中控件的高度或宽度将被调整到统一的尺寸。 ③对齐控件。点击鼠标右键激活弹出菜单,在其中的【对齐】菜单中选择【靠左】、【靠右】、【靠上】和【靠下】等命令,则可以将被选中控件按照指定的方式彼此相对地对齐。 ④同时调整控件的大小。同时按住【Shift】键和【←】键(或【↑】、【→】、【↓】键),即可逐渐并同时地改变控件的大小。 ⑤同时调整控件的位置。同时按住【Ctrl】键和【←】键(或【↑】、【→】、【↓】键),即可逐渐并同时地移动选定控件。
11.在设计视图中查看报表的结构 — 显示分组的页脚 6.3 使用向导创建多级分组报表 11.在设计视图中查看报表的结构 — 显示分组的页脚 点击鼠标右键,在弹出菜单中选择【排序与分组】命令 ①分别选中“类别ID”和“公司名称”字段 ②将“类别ID”和“公司名称”字段对应的“组页脚”组属性都设置为“是”
11.在设计视图中查看报表的结构 — 查看报表的结构 6.3 使用向导创建多级分组报表 11.在设计视图中查看报表的结构 — 查看报表的结构 一级分组 二级分组 “公司名称”分组被包含在“类别ID”分组内部,这种分组之间的包含关系也就意味着分组级别的层次关系
11.在设计视图中查看报表的结构 — 关于一级分组字段的解释 6.3 使用向导创建多级分组报表 11.在设计视图中查看报表的结构 — 关于一级分组字段的解释 需要特别指出的是,虽然在第3步确定查看数据的方式时,是选择“类别”表中的“类别名称”字段作为一级分组基准字段的。但由于“类别ID”是“类别”表中的主键,因此,“报表向导”在自动创建报表时实际上是将“类别ID”设置为最终的一级分组基准字段。 另一方面,由于“类别ID”和“类别名称”之间存在着一对一的对应关系,因此,可以将“类别ID”看作“类别名称”的唯一别名。所以,无论是将“类别ID”设置为一级分组基准字段、还是将“类别名称”设置为一级分组基准字段,两者将报表中的产品数据进行多级分组的最终效果都是一样的。
6.4 使用向导创建图表报表 相同信息的两种呈现形式 两种信息表示形式各有特点——表格中的纯数值数据精确地描述了雇员销售业绩数据,而柱形图可以直观地对比雇员之间的销售业绩。 【练习6-4(P145)】使用“图表向导”创建包含关于雇员销售业绩对比柱形图的图标报表。统计销售额时包括所有历史销售数据,且不考虑折扣情况。
6.4 使用向导创建图表报表 创建图表报表的过程包括两大步骤: 步骤一:数据准备工作——为图表报表准备数据源,即创建多表分组查询。 步骤二:使用“图表向导”创建报表。
6.4 使用向导创建图表报表 步骤一:数据准备工作——为图表报表准备数据源,即创建多表分组查询
6.4 使用向导创建图表报表 步骤二:使用“图表向导”创建报表(P145) ①启动“图表向导” ②选择图表数据所在的字段 ③选择图表的类型 ④指定字段在图表中的布局方式 ⑤为图表指定标题 ⑥保存图表报表 ⑦设置坐标轴格式。
6.5 使用向导创建标签报表 应用背景 随着各种信息技术的广泛应用,信息系统中积累了大量的客户联系数据,这些数据包括客户的联系电话、通信地址及邮政编码等多种联系方式。 另一方面,在许多商业活动中,公司需要经常性地向客户发送大量统一规格的信件,信封上的客户地址以及信件内容的格式都极为相似。 此时,利用信息系统中存储的客户联系数据,Access可以快速地为公司生成通信时所需的信封地址或书信内容形式的报表,此类报表属于标签报表,也称为邮件标签。
6.5 使用向导创建标签报表 【练习6-5(P149)】使用“标签向导”创建客户的邮件标签(标签报表)
6.5 使用向导创建标签报表 邮件标签的创建过程如下 : 1.启动“标签向导” 2.指定标签尺寸 3.选择文本的字体和颜色 4.确定邮件标签的显示内容 5.对标签进行排序 6.指定报表的名称
6.5 使用向导创建标签报表 7.在标签中增加新的文本
在报表设计中经常使用的文本串处理函数及其用法和举例 6.5 使用向导创建标签报表 在报表设计中经常使用的文本串处理函数及其用法和举例 函数 名称 函数作用 语法 举例 Trim 除了单词之间的空格外,清除文本串左右两侧的空格。 Trim(text) text需要清除左右两侧空格的文本串。 Trim(" table query form report ")的结果为" table query form report" Mid 从文本串的指定位置开始返回特定数目的字符。 Mid(text,start_num,num_chars) text要从中提取部分字符的文本串。 start_num是要提取的第一个字符在整个文本串中的位置,text中的第一个字符的位置为1。 num_chars指定从文本串中返回的字符数。 Mid("Database",5,4)的结果为"base" Mid("数据库技术与应用",4,2)的结果为"技术" 注:一个汉字看作一个字符。 Right 返回文本串中最后一个或多个字符。 Right(text,num_chars) text是包含要提取字符的文本串。 num_chars指定要提取的字符数目,省略时其值为1。 Right("Database",4)的结果为"base" Right("国定路777号",4)的结果为"777号" Left 返回文本串中的第一个或前几个字符。 Left(text,num_chars) num_chars指定要提取字符的数目,省略时其值是1。 Left("Database",4)的结果为"Data" Left("国定路777号",3)的结果为"国定路"
6.6 在设计视图中创建高级报表 Access为报表提供了灵活的自定义功能,能够允许用户随心所欲地在报表中添加各种类型的数据和信息、并根据需要设计报表的形式、外观和大小等。这些工作都可以在报表的设计视图中完成。 【练习6-6(P154)】在设计视图中创建多级分组报表。
6.6.1 使用设计视图创建多级分组报表
数据来源分析 报表设计工作的两大步骤 6.6.1 使用设计视图创建多级分组报表 观察报表上的数据可以看出,其中的数据来自多个表——“订单ID”、“订购日期”、“货主名称”和“货主地址”等数据来自“订单”表,“产品名称”数据来自“产品”表,“单价”和“数量”等数据来自“订单明细”表;“订单销售金额合计”可以在订单分组基础上对“单价*数量”求和得到。 报表设计工作的两大步骤 步骤一:创建多表查询,为报表准备数据来源。 步骤二:使用“设计视图”设计报表
6.6.1 使用设计视图创建多级分组报表 步骤一:创建多表查询,为报表准备数据来源
6.6.1 使用设计视图创建多级分组报表 步骤二:使用“设计视图”设计报表(P154) ①启动报表的“设计视图” ②增加“订单ID”分组“节” ③在报表中添加控件 ④调整控件大小并对齐控件的相对位置 ⑤保存报表设计的中间结果 ⑥在报表的页面页眉中插入日期和时间 ⑦在报表的页面页脚中插入页码
6.6.1 使用设计视图创建多级分组报表 6.7.在报表中插入日期和时间及页码
8.在报表的“订单ID页脚”节添加计算型文本框 6.6.1 使用设计视图创建多级分组报表 8.在报表的“订单ID页脚”节添加计算型文本框 以对每张订单的销售金额进行合计
6.6.1 使用设计视图创建多级分组报表 9.在报表的最后一页展示“订单总数”(1) ——在“订单ID页眉”中添加计数器
6.6.1 使用设计视图创建多级分组报表 9.在报表的最后一页展示“订单总数”(2) ——在“报表页脚”中引用计数器的最终值
6.6.1 使用设计视图创建多级分组报表 10.打印预览报表
6.6.2 使用设计视图创建主报表/子报表 在Access数据库的一个报表对象中,还可以插入另一个报表。其中前一个报表称为主报表,后一个报表称为子报表。使用主报表/子报表能够对具有一对多关系的数据进行有效的组织。 将“发货单编号”、“发货日期”、“收货人”和“货运商”等订单数据组织在主报表中,而将“产品名称”、“数量”和“单位数量”等产品数据组织在子报表中,并且主报表/子报表中的数据之间具有一对多的对应关系,即一张发货单中包括了多种货物(产品)。
6.6.2 使用设计视图创建主报表/子报表 【练习6-7(P160)】在设计视图中创建如前图所示的主报表/子报表——发货单。 创建主报表/子报表的步骤: 一、数据准备工作,分别为主报表/子报表创建数据源(查询); 二、分别创建主报表 /子报表; 三、在主报表中添加子报表; 四、改进报表设计。
6.6.2 使用设计视图创建主报表/子报表 第一步、数据准备工作,分别为主报表/子报表创建数据源(查询) 为主报表创建的查询 (设计视图)
6.6.2 使用设计视图创建主报表/子报表 第一步、数据准备工作,分别为主报表/子报表创建数据源(查询) 为子报表创建的查询 (设计视图)
6.6.2 使用设计视图创建主报表/子报表 第二步、分别创建主报表 /子报表 将第一步中创建的查询作为数据源,使用“自动创建报表”功能,分别创建纵栏式主报表和表格式子报表。 (纵栏式) 主报表 (表格式) 子报表
6.6.2 使用设计视图创建主报表/子报表 第三步、在主报表中添加子报表 0.启动“子报表向导” 1.选择将用于子报表的数据来源 2.确定将主报表链接到子报表的字段 3.指定子报表的名称
第四步、改进报表设计 — 对报表需要改进的主要部分 6.6.2 使用设计视图创建主报表/子报表 第四步、改进报表设计 — 对报表需要改进的主要部分
第四步、改进报表设计 — 对主报表设计的改进 6.6.2 使用设计视图创建主报表/子报表 第四步、改进报表设计 — 对主报表设计的改进
第四步、改进报表设计 — 对子报表设计的改进 6.6.2 使用设计视图创建主报表/子报表 第四步、改进报表设计 — 对子报表设计的改进
6.6.3 对报表内容进行特殊处理 【练习6-8(P164)】在设计视图中创建如下报表,要求对行进行有条件的格式化,即在奇数行上填充阴影。另外,为了使报表中的内容紧凑,将每页的列数设置为两列,并设置“先列后行”的列布局形式。
6.6.3 对报表内容进行特殊处理 创建报表的过程分为以下几个步骤。 (1)创建为报表提供数据源的SELECT命令。 (2)在报表中添加控件。 (3)通过设置条件格式,在产品ID为奇数的行上填充阴影。 (4)设置页面属性。 (5)同时设置多个文本框的“背景样式”属性。 (6)预览并保存报表。
6.7 表达式及其应用 一个表达式由多个单独使用或组合使用的、用以生成某个结果的若干元素组成。 组成表达式的元素可以是标识符(如字段名称、控件名称)、运算符(如+、>、And、Like、&)、函数(Datepart、Left)、常量、值和通配符(如*)。 例如,在表达式Sum([单价]*[数量]*(1-[折扣]))中既有字段名称、运算符,又有函数和值。
6.7.1 运算符及其分类 使用算术运算符可以实现常见的算术运算,并且参与运算的是数字型数据,运算结果也是数字型数据。除+(加法)、-(减法)、﹡(乘法)、/(除法)运算符外,常见的算术运算符还包括﹨(整除)和Mod(求余)运算符。 ﹨(整除运算符)用来对两个整数作除法并返回一个商的整数部分, Mod(求余运算符)用来对两个整数作除法并返回余数。
6.7.1 运算符及其分类 比较运算符的应用示例 比较运算符 含义 应用示例 = 等于 SELECT fname, lname FROM employees WHERE lname="Smith" <> 不等于 SELECT fname, lname FROM employees WHERE status<>"Active" > 大于 将字段salary的有效性规则属性设置为 >0 < 小于 SELECT fname, lname FROM employees WHERE hire_date> #2010-10-1# >= 大于或等于 SELECT fname, lname FROM employees WHERE salary>=10000 <= 小于或等于 SELECT fname, lname FROM employees WHERE hire_date<=#2001/01/2#
6.7.1 运算符及其分类 逻辑运算符的应用示例 逻辑运算符 含义 应用示例 NOT 条件的逻辑否 SELECT * FROM employee WHERE NOT (fname="Ann") AND 必须同时满足两个条件 SELECT * FROM employee WHERE lname="Smith" AND fname="Ann" OR 满足其中一个条件即可 SELECT * FROM employee WHERE region="UK" OR region="FRA" 将“性别”字段的“有效性规则”属性设置为 "男" OR "女"
6.7.1 运算符及其分类 连接运算符只有一个,即&(文本串连接运算符)。使用&,可以将两个文本型数据连接在一起。例如,表达式“[姓氏]&[名字]”就是使用连接运算符将“[姓氏]”和“[名字]”两个文本型字段中的文本型数据连接在一起,从而得到“姓名”。
6.7.1 运算符及其分类 使用特殊运算符可返回逻辑值True或False。 运算符 用途 应用示例 Is Null 或 Is Not Nul 确定一个值是否为Null [发货日期] Is Null Like 可使用通配符来匹配文本串 [产品名称] Like "*"&"鱼" Between … And 确定数值或日期值是否在某个范围内 [产品ID] Between 1 And 10 [订购日期] Between #2010-1-1# And #2010-12-31# In 确定某个值是否在值列表中 [城市] In ("北京","上海","广州") 将“性别”字段的“有效性规则”属性设置为 In("男","女")
6.7.2 运算规则及运算符优先级 (1)计算括号中的项。 (2)对于数值型和日期型数据,按照“先乘除,后加减”的顺序执行算术运算。而对于文本型数据,则执行文本串连接运算。 (3)依据所提供的参数,执行函数运算。 (4)执行比较运算,或使用特殊运算符执行计算。两者都将生成逻辑值True或False。 (5)按Not、And和Or的顺序执行逻辑运算。
6.7.3 表达式在Access数据库对象中的应用 (1)“表”对象中的表达式 将 “性别”字段的“有效性规则”属性设置为表达式 In("男","女") 或 "男" OR "女"。
6.7.3 表达式在Access数据库对象中的应用 (2)“查询”对象中的表达式
6.7.3 表达式在Access数据库对象中的应用 (3)“报表”对象中的表达式
6.8 小结 报表是一种以只读格式(例如打印的文档)呈现信息的有效方法。尤其是在呈现汇总信息时,使用报表可以更好地控制信息的显示方式。 表或查询为报表提供了数据源,在创建报表之前通常需要先创建好相应的多表查询。 在报表中采用多级分组形式,能够将相关数据以分层的形式组织在一起,从而使得各级数据在报表中呈现出有规律的逻辑隶属关系。 控件是在报表中用于显示数据或装饰报表的对象,使用设计视图可以灵活地向报表中添加各种控件。 在报表中常用的控件有文本框、标签、直线和矩形等。 在报表中,文本框可以与数据源中的字段绑定,也可以显示某一表达式的计算结果。标签只能是未绑定的,用来提供解释性的说明。