第五章 1提炼数据
概览
内容
已提炼数据 的示例
在读取数据 过程中提炼 数据
用内表提炼 数据
用平铺内表 提炼数据
使用嵌套内 表提炼数据
使用摘录数 据集提炼数 据
创建并填充 摘录数据集
处理摘录数 据集
使用摘录数 据集提炼数 据示例
其它任务中 的报表必须 提炼数据。 即,除了检 索数据,报 表还必须给 数据排序、 计算合计以 及统计列表 中的条目等 等。用户可 以从数据库 表或顺序文 件中读取需 要提炼的数 据,或者在 报表中创建 一般数据。
下面主题包 含了提炼数 据的示例:
本节将讨论 在创建数据 集之后提炼 数据集的数 据。提炼过 程独立于检 索数据的过 程。首先要 创建数据集 ,然后再提 炼该数据集 。
该规则也有 例外,就是 用户一般性 地创建自己 的数据集的 过程,或使 用 SQL 语句直接访 问数据库的 过程。有时 ,在检索过 程中就能对 数据进行充 分的提炼。 例如,参见 检索过程中 提炼数据的 SQL 报表。
使用逻辑数 据库访问数 据库表时, 或从顺序文 件中读取数 据时,或者 如果开放式 SQL
的选 项不够全面 ,那么检索 的数据将会 按需要提炼 的顺序和结 构显示。要 想以后再提 炼这些数据 ,请在检索 过程中,将 它们按压缩 格式保存在 临时数据集 中。
创建并提炼 数据集
用户使用临 时数据集为 检索之后的 提炼工作提 供选定的数 据。ABAP/4 提供了两种 在存储中创 建数据集的 方法:内表 和摘录数据 集。用户的 选择取决于 要完成的任 务。
内表
如果希望数 据集尽可能 密切地映射 下面的的数 据结构,或 者希望直接 访问单个数 据,请使用 内表。关于 如何使用内 表提炼数据 的示例,参 见:
摘录数据集
摘录是用户 可用报表创 建的顺序数 据集。如果 需要多次将 大量数据作 为一个整体 处理,请使 用摘录。下 面的主题说 明如何创建 摘录数据集 、如何填充 数据以及最 后如何提炼 这些数据。
1已提炼数据 的示例
对于许多报 表评估来说 ,处理数据 时的顺序与 数据存储的 顺序可能不 同。由于读 取操作的结 果反映数据 存储的顺序 ,所以必须 对选定的整 个数据材料 按所需的顺 序重新排序 。
在航班预订 应用环境中 提炼数据的 典型结果是 创建一个列 表,用来包 含每个航班 号的预订信 息。航班连 接将按起飞 城市排序, 航班按日期 排序,乘客 按等级和是 否吸烟排序 。对于每次 航班,都要 确定乘客总 数和行李总 重量。
结果列表中 的一段如下 所示:
用户可从下 列内容中 到四个不同 的创建该列 表的程序:
1在读取数据 过程中提炼 数据
提炼数据最 直接的方法 是使用 SELECT 语句中相应 的选项(参 见 从数据库表提炼数据 (页 Error! Not a valid link.) )。
下面的示例 程序用来从 表 SPFLI、 SFLIGHT 和 SBOOK 中提炼数据 ,如 已提炼数据 的示例 (页 1) 中说明的那 样。
REPORT SAPMZTST.
DATA: SUM TYPE I, CNT TYPE I.
TABLES: SPFLI, SFLIGHT, SBOOK.
SELECT * FROM SPFLI ORDER BY CITYFROM CITYTO CONNID.
SKIP.
WRITE: / SPFLI-CARRID,
SPFLI-CONNID,
'from', (15) SPFLI-CITYFROM,
'to', (15) SPFLI-CITYTO.
ULINE.
SELECT * FROM SFLIGHT WHERE CARRID = SPFLI-CARRID
SKIP.
WRITE: / SPFLI-CARRID,
SPFLI-CONNID,
'from', (15) SPFLI-CITYFROM,
'to', (15) SPFLI-CITYTO.
ULINE.
SELECT * FROM SFLIGHT WHERE CARRID = SPFLI-CARRID
AND CONNID = SPFLI-CONNID
ORDER BY FLDATE.
SKIP.
WRITE: / 'Date:', SFLIGHT-FLDATE.
WRITE: 20 'Book-ID', 40 'Smoker', 50 'Class'.
ULINE.
SUM = 0.
CNT = 0.
SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID
AND CONNID = SFLIGHT-CONNID
AND FLDATE = SFLIGHT-FLDATE
ORDER BY CLASS SMOKER BOOKID.
WRITE: / SBOOK-BOOKID UNDER 'Book-ID',
SBOOK-SMOKER UNDER 'Smoker',
SBOOK-CLASS UNDER 'Class'.
ORDER BY FLDATE.
SKIP.
WRITE: / 'Date:', SFLIGHT-FLDATE.
WRITE: 20 'Book-ID', 40 'Smoker', 50 'Class'.
ULINE.
SUM = 0.
CNT = 0.
SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID
AND CONNID = SFLIGHT-CONNID
AND FLDATE = SFLIGHT-FLDATE
ORDER BY CLASS SMOKER BOOKID.
WRITE: / SBOOK-BOOKID UNDER 'Book-ID',
SBOOK-SMOKER UNDER 'Smoker',
SBOOK-CLASS UNDER 'Class'.
SUM = SUM + SBOOK-LUGGWEIGHT.
CNT = CNT + 1.
ENDSELECT.
ULINE.
WRITE: 'Number of bookings: ', (3) CNT,
/ 'Total luggage weight:', (3) SUM, SBOOK-WUNIT.
ENDSELECT.
ENDSELECT.
CNT = CNT + 1.
ENDSELECT.
ULINE.
WRITE: 'Number of bookings: ', (3) CNT,
/ 'Total luggage weight:', (3) SUM, SBOOK-WUNIT.
ENDSELECT.
ENDSELECT.
该程序使用 了 SELECT 语句的 ORDER BY 子句,它们 已在 指令行的顺 序 (页 Error! Not a valid link.) 中说明。关 于 SELECT 语句可用于 提炼数据的 其它选项, 参见选择并处理 指令列中数 据 (页 Error! Not a valid link.) 。
用这种方法 提炼数据, 必须自己编 写数据库访 问程序。另 外,还必须 编写选择屏 幕程序,这 使用户用该 屏幕限制数 据集被读取 成为可能( 参见 使用选择屏幕 (页 Error! Not a valid link.) )。
用逻辑数据 库读取数据 时,无需自 己编写数据 库访问程序 。系统将自 动创建选择 屏幕。但是 ,不会影响 读取数据的 顺序。下面 内容将说明 如何用临时 数据集给这 些数据记录 排序。
2用内表提炼 数据
将数据保存 在内表中时 ,对于读取 的每个数据 库都需要一 个内表。该 内表包含数 据库表的部 分或所有列 。无论是使 用平铺结构 为每个数据 库表创建内 表,还是使 用嵌套结构 创建内表, 包含多少栏 都由用户决 定。对于使 用平铺结构 的表,必须 使用关键字 。在嵌套结 构的表中,insert语句字段顺序 可以根据逻 辑数据库中 的层次从数 据库表保存 数据。这里 不需要关键 字。
如果使用大 量数据,则 将数据保存 在内表中并 在其中提炼 数据有以下 缺点:
由于系统一 个接一个地 处理所有内 表,所以在 几个内表中 划分大量数 据时,必须 考虑处理内 表所需的运 行时间。并 且系统以未 压缩形式存 储内表,这 意味着大量 的数据需要 大量的存储 空间。甚至 系统还必须 将数据集展 开成已分页 的区域,这 样就降低了 处
理速度。
创建和处理内表 (页 Error! Not a valid link.) 详细说明了 如何使用内 表。
下面的主题 包含了两个 使用内表提 炼数据的示 例:
2用平铺内表 提炼数据
下面的示例 说明如何使 用平铺内表 提炼数据:
该程序被连 接到逻辑数 据库 F1S。
REPORT SAPMZTST.
DATA: SUM TYPE I, CNT TYPE I.
TABLES: SPFLI, SFLIGHT, SBOOK.
DATA: SORT_SPFLI LIKE SPFLI OCCURS 100 WITH HEADER LINE,
SORT_SFLIGHT LIKE SFLIGHT OCCURS 100 WITH HEADER LINE,
SORT_SBOOK LIKE SBOOK OCCURS 100 WITH HEADER LINE.
SORT_SBOOK LIKE SBOOK OCCURS 100 WITH HEADER LINE.
START-OF-SELECTION.
GET SPFLI.
APPEND SPFLI TO SORT_SPFLI.
APPEND SPFLI TO SORT_SPFLI.
GET SFLIGHT.
APPEND SFLIGHT TO SORT_SFLIGHT.
APPEND SFLIGHT TO SORT_SFLIGHT.
GET SBOOK.
APPEND SBOOK TO SORT_SBOOK.
APPEND SBOOK TO SORT_SBOOK.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论