您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SAP的ABAP4语言中文培训教材第二部分第五章提炼数据
1第五章提炼数据概览内容已提炼数据的示例...........................................................................................................................1在读取数据过程中提炼数据...........................................................................................................1用内表提炼数据..............................................................................................................................2用平铺内表提炼数据..................................................................................................................2使用嵌套内表提炼数据..............................................................................................................3使用摘录数据集提炼数据..............................................................................................................5创建并填充摘录数据集..............................................................................................................5处理摘录数据集.........................................................................................................................6使用摘录数据集提炼数据示例..............................................................................................12其它任务中的报表必须提炼数据。即,除了检索数据,报表还必须给数据排序、计算合计以及统计列表中的条目等等。用户可以从数据库表或顺序文件中读取需要提炼的数据,或者在报表中创建一般数据。下面主题包含了提炼数据的示例:本节将讨论在创建数据集之后提炼数据集的数据。提炼过程独立于检索数据的过程。首先要创建数据集,然后再提炼该数据集。该规则也有例外,就是用户一般性地创建自己的数据集的过程,或使用SQL语句直接访问数据库的过程。有时,在检索过程中就能对数据进行充分的提炼。例如,参见检索过程中提炼数据的SQL报表。使用逻辑数据库访问数据库表时,或从顺序文件中读取数据时,或者如果开放式SQL的选项不够全面,那么检索的数据将会按需要提炼的顺序和结构显示。要想以后再提炼这些数据,请在检索过程中,将它们按压缩格式保存在临时数据集中。创建并提炼数据集用户使用临时数据集为检索之后的提炼工作提供选定的数据。ABAP/4提供了两种在存储中创建数据集的方法:内表和摘录数据集。用户的选择取决于要完成的任务。内表如果希望数据集尽可能密切地映射下面的的数据结构,或者希望直接访问单个数据,请使用内表。关于如何使用内表提炼数据的示例,参见:摘录数据集摘录是用户可用报表创建的顺序数据集。如果需要多次将大量数据作为一个整体处理,请使用摘录。下面的主题说明如何创建摘录数据集、如何填充数据以及最后如何提炼这些数据。已提炼数据的示例对于许多报表评估来说,处理数据时的顺序与数据存储的顺序可能不同。由于读取操作的结果反映数据存储的顺序,所以必须对选定的整个数据材料按所需的顺序重新排序。在航班预订应用环境中提炼数据的典型结果是创建一个列表,用来包含每个航班号的预订信息。航班连接将按起飞城市排序,航班按日期排序,乘客按等级和是否吸烟排序。对于每次航班,都要确定乘客总数和行李总重量。结果列表中的一段如下所示:用户可从下列内容中找到四个不同的创建该列表的程序:在读取数据过程中提炼数据提炼数据最直接的方法是使用SELECT语句中相应的选项(参见从数据库表提炼数据(页Error!Notavalidlink.))。下面的示例程序用来从表SPFLI、SFLIGHT和SBOOK中提炼数据,如已提炼数据的示例(页1)中说明的那样。REPORTSAPMZTST.DATA:SUMTYPEI,CNTTYPEI.TABLES:SPFLI,SFLIGHT,SBOOK.2SELECT*FROMSPFLIORDERBYCITYFROMCITYTOCONNID.SKIP.WRITE:/SPFLI-CARRID,SPFLI-CONNID,'from',(15)SPFLI-CITYFROM,'to',(15)SPFLI-CITYTO.ULINE.SELECT*FROMSFLIGHTWHERECARRID=SPFLI-CARRIDANDCONNID=SPFLI-CONNIDORDERBYFLDATE.SKIP.WRITE:/'Date:',SFLIGHT-FLDATE.WRITE:20'Book-ID',40'Smoker',50'Class'.ULINE.SUM=0.CNT=0.SELECT*FROMSBOOKWHERECARRID=SFLIGHT-CARRIDANDCONNID=SFLIGHT-CONNIDANDFLDATE=SFLIGHT-FLDATEORDERBYCLASSSMOKERBOOKID.WRITE:/SBOOK-BOOKIDUNDER'Book-ID',SBOOK-SMOKERUNDER'Smoker',SBOOK-CLASSUNDER'Class'.SUM=SUM+SBOOK-LUGGWEIGHT.CNT=CNT+1.ENDSELECT.ULINE.WRITE:'Numberofbookings:',(3)CNT,/'Totalluggageweight:',(3)SUM,SBOOK-WUNIT.ENDSELECT.ENDSELECT.该程序使用了SELECT语句的ORDERBY子句,它们已在指令行的顺序(页Error!Notavalidlink.)中说明。关于SELECT语句可用于提炼数据的其它选项,参见选择并处理指令列中数据(页Error!Notavalidlink.)。用这种方法提炼数据,必须自己编写数据库访问程序。另外,还必须编写选择屏幕程序,这使用户用该屏幕限制数据集被读取成为可能(参见使用选择屏幕(页Error!Notavalidlink.))。用逻辑数据库读取数据时,无需自己编写数据库访问程序。系统将自动创建选择屏幕。但是,不会影响读取数据的顺序。下面内容将说明如何用临时数据集给这些数据记录排序。用内表提炼数据将数据保存在内表中时,对于读取的每个数据库都需要一个内表。该内表包含数据库表的部分或所有列。无论是使用平铺结构为每个数据库表创建内表,还是使用嵌套结构创建内表,包含多少栏都由用户决定。对于使用平铺结构的表,必须使用关键字。在嵌套结构的表中,可以根据逻辑数据库中的层次从数据库表保存数据。这里不需要关键字。如果使用大量数据,则将数据保存在内表中并在其中提炼数据有以下缺点:由于系统一个接一个地处理所有内表,所以在几个内表中划分大量数据时,必须考虑处理内表所需的运行时间。并且系统以未压缩形式存储内表,这意味着大量的数据需要大量的存储空间。甚至系统还必须将数据集展开成已分页的区域,这样就降低了处理速度。创建和处理内表(页Error!Notavalidlink.)详细说明了如何使用内表。下面的主题包含了两个使用内表提炼数据的示例:用平铺内表提炼数据下面的示例说明如何使用平铺内表提炼数据:该程序被连接到逻辑数据库F1S。REPORTSAPMZTST.DATA:SUMTYPEI,CNTTYPEI.TABLES:SPFLI,SFLIGHT,SBOOK.DATA:SORT_SPFLILIKESPFLIOCCURS100WITHHEADERLINE,SORT_SFLIGHTLIKESFLIGHTOCCURS100WITHHEADERLINE,SORT_SBOOKLIKESBOOKOCCURS100WITHHEADERLINE.START-OF-SELECTION.3GETSPFLI.APPENDSPFLITOSORT_SPFLI.GETSFLIGHT.APPENDSFLIGHTTOSORT_SFLIGHT.GETSBOOK.APPENDSBOOKTOSORT_SBOOK.END-OF-SELECTION.SORT:SORT_SPFLIBYCITYFROMCITYTOCONNID,SORT_SFLIGHTBYFLDATE,SORT_SBOOKBYCLASSSMOKERBOOKID.LOOPATSORT_SPFLI.SKIP.WRITE:/SORT_SPFLI-CARRID,SORT_SPFLI-CONNID,'from',(15)SORT_SPFLI-CITYFROM,'to',(15)SORT_SPFLI-CITYTO.ULINE.LOOPATSORT_SFLIGHTWHERECARRID=SORT_SPFLI-CARRIDANDCONNID=SORT_SPFLI-CONNID.SKIP.WRITE:/'Date:',SORT_SFLIGHT-FLDATE.WRITE:20'Book-ID',40'Smoker',50'Class'.ULINE.SUM=0.CNT=0.LOOPATSORT_SBOOKWHERECARRID=SORT_SFLIGHT-CARRIDANDCONNID=SORT_SFLIGHT-CONNIDANDFLDATE=SORT_SFLIGHT-FLDATE.WRITE:/SORT_SBOOK-BOOKIDUNDER'Book-ID',SORT_SBOOK-SMOKERUNDER'Smoker',SORT_SBOOK-CLASSUNDER'Class'.SUM=SUM+SORT_SBOOK-LUGGWEIGHT.CNT=CNT+1.ENDLOOP.ULINE.WRITE:'Numberofbookings:',(3)CNT,/'Totalluggageweight:',(3)SUM,SORT_SBOOK-WUNIT.ENDLOOP.ENDLOOP.该程序创建已提炼数据的示例(页1)中显示的列表。检索数据的GET事件明显独立于排序过程。数据库表的结构和内容完全由三个内表确定。用SORT语句排序过程之后(参见内表排序(页Error!Notavalidlink.)),系统将显示表的内容。该循环结构与在读取数据过程中提炼数据(页1)中的示例中的SELECT循环结构完全对应。使用嵌套内表提炼数据下面的示例说明如何使用嵌套内表给数据排序。该程序被连接到逻辑数据库F1S。REPORTSAPMZTST.DATA:SUMTYPEI,CNTTYPEI.TABLES:SPFLI,SFLIGHT,SBOOK.DATA:BEGINOFSORT_SBOOK,BOOKIDLIKESBOOK-BOOKID,SMOKERLIKESBOOK-SMOKER,CLASSLIKESBOOK-CLASS,LUGGWEIGHTLIKESBOOK-LUGGWEIGHT,WUNITLIKESBOOK-WUNIT,EN
本文标题:SAP的ABAP4语言中文培训教材第二部分第五章提炼数据
链接地址:https://www.777doc.com/doc-2849014 .html