基于ABAP的多维分析报表的设计与实现
- 格式:doc
- 大小:1.78 MB
- 文档页数:6
SAP报表开发指南目录1选择屏幕 (3)1.1屏幕输入命令 (3)1.2创建元素块 (12)1.3事件及其事件关键字 (15)1.4分页 (19)1.5通过窗口滚动窗口 (19)1.6按页滚动 (20)1.7列表中的颜色 (20)1.8交互式报表 (24)1.9次列表的页眉 (26)1.10列表中的消息 (26)1.11从程序中触发事件 (28)1.12从列表中读取行 (29)1.13在光标位置处读列表 (30)1.14传递列表属性 (30)1.15将光标设置到显示列表行的特定字段 (31)1.16将光标设置到输出窗口中列表的特定行 (31)2报表取数 (31)3数据整理 (32)4WRITE输出 (32)5报表编制的实例 (32)6扩展 (32)6.1屏幕控制 (32)6.2设置下拉框 (33)6.3自制Search Help (34)1 选择屏幕屏幕输入命令在ABAP/4中要自屏幕输入变量数据的内容,使用的命令是 PARAMETERS 及SELECTION-OPTIONSPARAMETER:输入一个变量或字段内容SELECTION-OPTIONS:使用条件筛选画面来输入数据1.1.1 PARAMETERS 语句基本格式可以按照用DATA语句声明字段的方式用PARAMETERS语句声明字段。
用PARAMETERS 语句声明的字段称为参数。
通常,输入字段的所有参数都将出现在选择屏幕上。
系统处理输入屏幕时,报表用户在这些输入字段中键入的值将被分配给相应的参数。
它为基本的输入命令,类似如BASIC的INPUT命令,但无法使用F格式(浮点数)。
1、要声明参数及其数据类型语法:PARAMETERS <p>[(<length>)] <type> [<decimals>].该语句创建参数<p>。
附加项<length>、<type>和 <decimals> 与 DATA 语句相同。
ABAP4报表编程模板 ABAP/4 报表编程模板初学者必看*&--------------------------------------------------------------**& Report Z_X_XXXXX*& Module : Module \ SubModule*&--------------------------------------------------------------**& Created : author (2003.10.09)*& Modified : author (someday)* Intention : 程序的详细说明* 请⽤户在ABAP/4 REPORT编程时,参考本程序提供的编程框架** 在编码规范有出⼊时,以本程序为准* 以下各事件可根据实际编程需要使⽤,对于需要处理的事件,可将该事* 件后⾯的语句注释去掉,再编写相应的⼦程序代码。
*&--------------------------------------------------------------*INCLUDE Z_X_XXXXXTOP . " TOP ⼦程序,⽤来声明全局变量*----以下三个⼦程序只有在多个程序调⽤同⼀逻辑时才建议使⽤-----**INCLUDE Z_X_XXXXXO01 . " PBO ⼦程序*INCLUDE Z_X_XXXXXI01 . " PAI ⼦程序*INCLUDE Z_X_XXXXXF01 . " form ⼦程序INITIALIZATION.* PERform INI_SELECTION_SCREEN. " 初始化选择屏上的变量AT SELECTION-SCREEN.* PERform INI_DATA. " 初始化全局变量START-OF-SELECTION.* PERform PRECESS_DATA. " 主要数据处理逻辑AT LINE-SELECTION.* PERform PRECESS_LINE_SELECTED. " ⾏选择时的处理AT USER-COMMAND.* PERform PRECESS_USER_COMMAND. * ⽤⾃定义命令按钮时的处理TOP-OF-PAGE.* PERform PAGE_HEADER. " 页眉END-OF-PAGE.* PERform PAGE_FOOT. " 页脚*&--------------------------------------------------------------**& form PRECESS_DATA*&--------------------------------------------------------------** text*---------------------------------------------------------------** --> p1 text* <-- p2 text*---------------------------------------------------------------*form PRECESS_DATA.*如果逻辑简单, 则合并若⼲form为⼀个PERform SEL_DBTAB_XXXXX. " 从透明表中取数据赋给内表PERform CMP_ITAB_XXXXX. " 内表中数据计算处理PERform WRT_ITAB_RESULT. " 输出内表数据ENDform. " PRECESS_DATA*&--------------------------------------------------------------**& form SEL_DBTAB_XXXXX*&--------------------------------------------------------------** text*---------------------------------------------------------------** --> p1 text* <-- p2 text*---------------------------------------------------------------*form SEL_DBTAB_XXXXX.select * into corresponding fields of itab_salesfrom bsidwhere bukrs = s_bukrs.authority-check object 'Z:FI-00001'id 'ACTVT' field '03'id 'BUKRS' field itab_sales-bukrsid 'GSBER' field itab_sales-gsber. "权限检查if sy-subrc ne 0. "权限检查未通过continue.endif.append itab_sales.clear itab_sales.endselect.ENDform. " SEL_DBTAB_XXXXX*&--------------------------------------------------------------**& form CMP_ITAB_XXXXX*&--------------------------------------------------------------** text*---------------------------------------------------------------** --> p1 text* <-- p2 text*---------------------------------------------------------------* form CMP_ITAB_XXXXX.ENDform. " CMP_ITAB_XXXXX*&--------------------------------------------------------------* *& form WRT_ITAB_RESULT*&--------------------------------------------------------------* * text*---------------------------------------------------------------* * --> p1 text* <-- p2 text*---------------------------------------------------------------* form WRT_ITAB_RESULT.* PERform WRT_ITAB_SUB.ENDform. " WRT_ITAB_RESULT*&--------------------------------------------------------------* *& form PAGE_HEADER*&--------------------------------------------------------------* * text*---------------------------------------------------------------* * --> p1 text* <-- p2 text*---------------------------------------------------------------* form PAGE_HEADER.ENDform. " PAGE_HEADER*&--------------------------------------------------------------* *& form INI_DATA*&--------------------------------------------------------------* * text*---------------------------------------------------------------* * --> p1 text* <-- p2 text*---------------------------------------------------------------* form INI_DATA.ENDform. " INI_DATA*&--------------------------------------------------------------* *& form INI_SELECTION_SCREEN*&--------------------------------------------------------------* * text*---------------------------------------------------------------** --> p1 text* <-- p2 text*---------------------------------------------------------------*form INI_SELECTION_SCREEN.ENDform. " INI_SELECTION_SCREEN*&--------------------------------------------------------------**& Include Z_X_XXXXXTOP*&--------------------------------------------------------------*REPORT Z_X_XXXXX .*-------------------声明系统字典对象----------------------------*TABLES: t001.*--------------------声明 Selection-screen 变量-----------------*SELECTION-SCREEN BEGIN OF BLOCK B1WITH FRAMETITLE TEXT-001.SELECTION-SCREEN SKIP.SELECT-OPTIONS: S_BUKRS FOR T001-BUKRS MEMORY ID BUK.PARAMETERS: P_DATE LIKE SY-DATUM DEFAULT SY-DATUM.SELECTION-SCREEN END OF BLOCK B1.*--------------------声明全局变量-------------------------------**声明内表时,表名为 ITAB_XXXX,后缀尽可能为关联DBTab或内表⽤途DATA: bldat like bsid-bldat.RANGES: R_FIELD FOR DBTAB-FIELD.说明:以上是模板程序的框架及说明,在R/3系统的开发环境中有该模板程序(Z_X_XXXXX),建议编程序之前,先将该程序另存⼀新⽂件,再根据需要修改这新⽂件。
sap多会计准则多套报表的实现方式SAP系统支持多会计准则和多套报表的实现。
这通常涉及到在系统中进行相应的配置和设置,以确保系统能够满足不同国家或地区的会计法规和报告要求。
以下是一般情况下实现多会计准则和多套报表的方式:1. 公司代码设置:-在SAP系统中,公司代码是会计实体的核心概念。
每个公司代码都可以配置为遵循特定的会计准则。
你可以为每个公司代码设置不同的法定会计准则,以满足各个国家或地区的法规要求。
2. 本地化模块和扩展:- SAP提供了各种本地化模块和国家特定的解决方案,以支持不同国家或地区的会计规范。
这些模块通常包含了本地会计法规的配置和报表模板。
3. 会计准则变更:-在SAP系统中,你可以根据需要随时更改公司代码的会计准则。
这使得公司能够适应法规或业务策略的变化而进行调整。
4. 多套报表的配置:- SAP系统允许你配置和生成多套报表。
你可以根据需要定义不同的报表版本,每个版本可以包含特定的财务报表或管理报表。
这样,你可以为每个公司代码或会计准则定义适当的报表版本。
5. 联合会计:- SAP S/4HANA系统引入了联合会计(Universal Journal)的概念,这使得在一个单一的数据库表中存储了所有会计数据,包括财务会计、管理会计和资产会计。
这简化了多会计准则的管理和报表生成。
6. 报表管理工具:- SAP提供了各种报表管理工具,如SAP BusinessObjects BI平台,用于生成、分发和分析财务报表。
通过这些工具,你可以更灵活地定制报表,以满足不同的会计准则和报告要求。
总体而言,SAP系统的灵活性和强大性使其成为满足多会计准则和多套报表需求的理想选择。
系统管理员和财务团队可以根据组织的需要进行相应的配置和定制,以确保满足不同国家或地区的法规和报告标准。
Smartform报表实例目的:根据用户需求自定义打印报表。
说明:Smartform的创建需要指定页格式、样式,如果报表中存在条码,则需要指定条码格式。
涉及内容:页格式(SPAD)、条码格式(SE73)、样式(SMARTFORMS)、报表(SMARTFORMS)。
1.4 SMARTFORMS创建报表表格1.4.1 创建报表表格1、T-CODE:SMARTFORMS,输入表格名称,点击”创建“按钮,如图1.4.1-1:图1.4.1-12、输入表格的描述,然后保存,如图1.4.1-2:图1.4.1-21.4.2 全局设置-表格属性1、在表格属性的“输出选项”页签中指定页格式和样式,可以是系统标准的也可以是前面创建的,本练习选择前面自定义的页格式和样式,如图1.4.2-1:图1.4.2-11.4.3 全局设置-表格接口1、在表格接口的“导入”页签中配置Import参数(要同程序中调用该Smartform的程序的参数相同),本练习配置了5个导入参数,如图1.4.3-1:图1.4.3-1说明:a、可选和值传递选项处可以根据实际情况而定,如果勾选了可选的选项,则在程序调用时可不对该参数进行传递值,否则为必须传递的参数,如果没有对必须传递的参数传值就会报错;b、自定义上面的9个参数为系统生成,在“导出”页签中也有3个系统生成的参数,本练习不会使用到,所以不做详细介绍;c、“表”和“例外”页签中也可以进行参数配置,但是本练习都没使用到,所以也不做详细介绍;d、导入参数也可以是导入内表,这样可以在“页和窗口”的主窗口中进行循环打印。
1.4.4 全局设置-全局定义1、在全局定义的“全局数据”页签中配置Smartform中的参数,如图1.4.4-1:图1.4.4-1说明:a、全局数据中的参数通常是为了将表格接口中导入的参数进行处理并赋值。
2、在全局定义的“初始化”页签中将导入Smartform的参数进行处理后赋值给输出参数,如图1.4.4-2:图1.4.4-2说明:a、输入参数为值需要处理的参数;b、输出参数为输入参数处理后的数值返回,可以和输入参数同名,也可以再“全局数据”页签中进行自定义,本练习使用的是自定义的参数;c、本练习的值处理代码如下:MATNR = MATNR1 .MAKTX = MAKTX1 .BISMT = BISMT1 .LGORT = LGORT1 .CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'EXPORTINGINPUT = MEINS1LANGUAGE = SY-LANGUIMPORTING* LONG_TEXT =OUTPUT = MEINS* SHORT_TEXT =* EXCEPTIONS* UNIT_NOT_FOUND = 1* OTHERS = 2.IF SY-SUBRC <> 0.* Implement suitable error handling hereENDIF.*MEINS = MEINS1 .CONDENSE MATNR .CONDENSE MAKTX .CONDENSE MEINS .CONDENSE BISMT .CONDENSE LGORT .1.4.5 页和窗口-新页面经过1.4.1-1.4.4就完成了数据的处理。
ABAP报表开发实例ABAP报表开发实例。
在这里示范一个实例,讲讲abap开发报表的简单过程。
程序的正确与否我们不与讨论,我们只关心这个程序的编写过程。
首先,在任何程序的开始阶段,我们都要确定将会用到的表。
我们所讲的这个程序是查询采购订单是否完成的。
将会用到以下三个表:EKKO,EKPO,EKET 。
程序的开头为:REPORT TEST.TABLES: EKKO,EKET,EKPO.现在我们已经定义了所要用到的表,接下来的工作就是定义内表和数据。
内表是用来存储我们从上述三个表中查询到的数据。
相关定义如下:DATA: BEGIN OF ITAB OCCURS 0,EBELN LIKE EKKO-EBELN,MENGE LIKE EKPO-MENGE,WEMNG l_IKE EKET-WEMNG,END OF ITAB.现在我们已经定义完了内表ITAB。
接着我们该定义数据了。
数据就像C语言里的常量。
其相关定义如下:DATA: MATNR l_IKE EKPO-MATNR,MENGE l_IKE EKPO-MENGE,WEMNG LIKE EKET-WEMNG,EBELN LIKE EKPO-EBELN.到这里我们已经把程序里要用到的数据和内表都定义好了。
接着我们要做的工作就是选择屏幕。
所谓选择屏幕是指程序运行时,你要从屏幕上输入的内容。
比如说一个程序运行时,你输入一个物料号,就可以得到该物料的当前的库存数,那你就要编写一个屏幕以供查询者输入查询的条件。
其相关定义如下:SELECT-OPTIONS: EBELN1 FOR EKKO-EBELN,BEDAT FOR EKKO-BEDAT,EKGRP FOR EKKO-EKGRP.PARAMETERS: R1 RADIOBUTTON GROUP RADI,R2 RADIOBUTTON GROUP RADI,R3 RADIOBUTTON GROUP RADI.现在我们已经完成了程序的前期准备,接着就开始真正的到表里查询我们需要的相关数据了。
应用ABAP在SAP系统中进行报表开发
黄玲
【期刊名称】《中国电子商务》
【年(卷),期】2011(000)010
【摘要】本文围绕怎样利用ABAP/4开发平台及其提供的编程语言进行报表的个性化设计和开发展开讨论。
【总页数】2页(P59-60)
【作者】黄玲
【作者单位】福建省工业设备安装有限公司,福建福州350011
【正文语种】中文
【中图分类】TP311
【相关文献】
1.应用ABAP/4在SAP R/3系统中进行报表开发 [J], 查洋
2.ABAP/4在R/3报表开发中的应用研究 [J], 马国雷;车敏;雷晓萍
3.ABAP在SAP系统开发中的应用 [J], 贾英新
4.应用ABAP/4在SAP R/3系统中进行报表开发 [J], 魏黎黎
5.基于SAPR/3系统的ABAP语言OpenSQL应用 [J], 姜永鹏
因版权原因,仅展示原文概要,查看原文内容请购买。
A B A P报表程序开发规范 The latest revision on November 22, 2020A B A P报表程序开发规范一、目的为保证在R/3系统中使用ABAP语言开发报表程序的规范性,特制定本开发规范。
在本开发规范的约束下,将源代码与报表开发人的相关性降到最低;即只要具备基本的ABAP开发技巧,遵循本开发规范,不同的开发人员开发的同样逻辑的源代码应该是基本相同的。
二、适用范围本技术规范适用于捷顺R/3系统的所有开发人员和除标准对象外的所有ABAP报表程序开发。
三、职责ABAP开发小组负责程序的开发、传输请求的创建及提交。
BASIS小组负责传输请求向PRD系统的传输。
四、开发流程1、开发人员接收业务顾问提交的开发需求;如果需要,开发人员应当配合业务顾问进行用户需求分析;2、开发人员根据开发需求在DEV100中进行程序开发;3、开发人员将程序传输至质量保证系统中进行初步测试,测试完毕后通知业务顾问进入用户测试阶段;4、程序在质量保证系统中经用户测试通过后,开发人员申请将程序传输至生产系统,相关主管审批通过后,BASIS人员负责将传输请求传输至生产系统。
5、如果程序需要作为后台程序运行,需要在传输申请中做出说明,由BASIS人员在生产系统中定义后台作业。
6、开发和修改程序都需要填写开发文档。
开发文档存放于服务器的专用目录中,每个程序一个文档,新程序需要新建文档,修改程序需要修改原来的程序文档(在原文档基础上追加内容,不允许删除原文档内容),记录本次修改的内容和请求号等信息。
开发程序申请传输生产系统中时,同时提交开发文档审核,相关主管需要同时检查程序和文档的规范性。
五、命名规则1、用户开发对象的命名规则1)用户开发对象的名称必须以Z开头,只能使用字母、数字和下划线。
用户开发对象包括开发类、程序、函数组、函数、透明表、结构等。
2)开发类一般使用ZREPORT,如有特殊需要,可以创建新的开发类。
ABAP-ALV报表开发ALV相关概念ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,不象一般的写屏方式拷出来或是导出成文件不同列的内容粘在一块,这种方式便于数据导出来放在电子表格里进行加工。
ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST):ALV实现方式:ALV 可以通过两种方式实现:Two ApproachesConventional (Using SAP Standard Function Modules).Object Oriented (Using SAP Standard Classes and Methods).以下我们要讲的为Function Modules方式。
ALV实现流程:第一步:定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS: SLIS.第二步:定义数据类型或者内表的实体对象.第三步:定义一些需要用到的变量.第四步:定义自己的选择屏幕.第五步:start-of-selection部分.1)用一个子函数完成对ALV表单标题区域的赋值(i_list_comments).2)用一个子函数完成自己所需要数据的抓取.3)用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置.4)用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?是用哪个功能键触发等等.5)用一个子函数FORM DISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTION MODULE.下面根据一个普通的例子(purchase order)来具体解释各步骤:*第一步:TABLES:EKKO,EKPO,T001,LFA1.TYPE-POOLS SLIS."有时可以还要包含*第二步:TYPES : BEGIN OF TYP_PURORDER, "TYPE OF Purchase Order InformationAEDAT TYPE EKKO-AEDAT, "Date on Which Record Was CreatedEBELN TYPE EKKO-EBELN, "Purchasing Document NumberMATNR TYPE EKPO-MATNR, "Material NumberTXZ01 TYPE EKPO-TXZ01,MENGE TYPE EKPO-MENGE, "Purchase Order QuantityMEINS TYPE EKPO-MEINS, "Purchase Order Unit of MeasureNETPR TYPE EKPO-NETPR, "Net Price in Purchasing DocumentWAERS TYPE EKKO-WAERS, "Currency KeyNETWR TYPE EKPO-NETWR, "Net Order Value in PO CurrencyEND OF TYP_PURORDER.DATA: ST_PURORDER TYPE TYP_PURORDER, "MAIN STRUCTERTD_PURORDER TYPE STANDARD TABLE OF TYP_PURORDER. "MAIN TABLE*第三步:*----------------------------------------------------------------------** COUNTER DEF*----------------------------------------------------------------------*DATA: W_BUKRS TYPE T001-BUKRS, "用于公司代码的检索W_LIFNR TYPE LFA1-LIFNR, "用于购买者代码的检索W_DATUM TYPE EKKO-AEDAT,W_DATE(10) TYPE C.*----------------------------------------------------------------------** FOR ALV DEF*----------------------------------------------------------------------*DATA: ST_LAYO TYPE SLIS_LAYOUT_ALV, "ALV LAYOUT STRTD_EVENT TYPE SLIS_T_EVENT, "ALV EVENT TABST_EVENT TYPE SLIS_ALV_EVENT, "ALV EVENT STRTD_COMMENT TYPE SLIS_T_LISTHEADER, "SET HEADER TABST_COMMENT LIKE LINE OF TD_COMMENT, "SET HEADER STRST_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "ALV FIELDCAT STRTD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "ALV FIELDCAT TABST_SORT TYPE SLIS_SORTINFO_ALV, "ALV SORT STRTD_SORT TYPE SLIS_T_SORTINFO_ALV. "ALV SORT TAB*1)SLIS_LAYOUT_ALV是一个类型,它用来定义ALV报表的整体属性例如:*ST_LAYO-ZEBRA = 'X'.“显示成斑马纹样式*ST_LAYO-DETAIL_POPUP = 'X'.“是否弹出详细信息窗口*ST_LAYO-F2CODE = '&ETA'. “设置触发弹出详细信息窗口的功能码,这里是双击*ST_LAYO-COLWIDTH_OPTIMIZE = 'X'. “优化列宽选项是否设置*ST_LAYO-DETAIL_INITIAL_LINES = 'X'.*ST_LAYO -no_vline = 'X'.“这个用来设置列间隔线*ST_LAYO -detail_titlebar = '详细内容'. “设置弹出窗口的标题栏*2)SLIS_T_EVENT是一个取得事件的内表,通过函数REUSE_ALV_EVENTS_GET取得多个事件(包括操作页眉页脚的事件).*3)SLIS_T_LISTHEADER操作页眉页脚的内表.*4)SLIS_T_FIELDCAT_ALV操作ALV报表列的内表.*5)SLIS_T_SORTINFO_ALV对显示数据排序的内表。
一,首先介绍一下ABAP的程序的类型:Program type(程序类型)Introductory statement(类型描述)1 REPORT(报表)M PROGRAM(屏幕程序)F FUNCTION-POOL(函数组)K CLASS-POOL(类组)J CLASS-POOL(接口组)T TYPE-POOL(类型池)二,下面介绍报表中用到的事件以及作用:1. LOAD-OF-PROGRAM:程序开始执行时候自动调用这个事件在SUBMIT,CALL TRANSACTION,PERFORM等执行的时候系统会自动调用这个事件。
所以无需声明即可。
2. INITIALIZATION(1).只能用于报表程序(2).在选择屏幕出现之前执行,如果用逻辑数据库的话,这个是唯一能够修改选择屏幕初始值的地方。
(3).通常的用法是在这里给选择屏幕中的字段赋值。
3. AT SelectION-SCREEN(1).其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。
(2).根据SY-UCOMM这个系统变量可以判断用户的命令(3).在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX的选择等等。
所以分为以下几个方面:1. ... ON psel :在PARAMETER变化是触发的事件2. ... ON END OF sel :Select-OPTION触发的事件3. ... ON V ALUE-REQUEST FOR psel_low_high :选择的帮助(F4)4. ... ON HELP-REQUEST FOR psel_low_high :选择的帮助(F1)5. ... ON RADIOBUTTON GROUP radi :单选按钮事件6. ... ON BLOCK block :框架的触发事件7. ... OUTPUT :响应屏幕上的事件,修改选择屏幕的唯一方法4. START-OF-SelectION报表程序必须执行的事件,在进入第二屏幕之前触发。
基于ABAP的多维分析报表的设计与实现作者:于佳
来源:《电子技术与软件工程》2015年第17期
摘要
本文使用ABAP语言,结合多维分析技术,设计与实现了公司HR人才库系统。
本系统同时满足了实时分析和多维分析的要求,使决策层和管理层能够快速多角度分析数据。
使用ABAP语言开发该系统,即可以有效的控制用户权限,又能保证数据的实时性。
但是一般使用ABAP语言开发的报表不具备多维分析的功能。
本文结合多维数据库表技术和预计算技术,实现了ABAP语言的多维分析功能,充分结合了ABAP报表与商务智能分析报表的优点。
【关键词】多维分析多维数据库表预计算
1 设计背景
公司ERP系统经过7年的实施与运行,HR模块数据已趋于准确完善,然而一直未能实现多维度实时分析报表功能。
原有的基于SAP BW的人才库系统只能做数据汇总,不能下钻到员工个人明细信息。
而且BW系统的处理链抽数慢,每次抽数需要5个小时,不能做到实时抽数。
基于以上因素,公司亟需开发一个基于ABAP的人才库报表系统。
然而由于系统数据量大,计算速度慢成了系统实现一大制约条件。
本系统要解决的难题就是如何既保留ABAP报表的实时性、灵活性、准确性,又做到大数据量的快速计算。
2 需求分析
使用ABAP语言建立一套人才库多维分析报表系统,该系统可以实现从多个维度分析人员构成情况。
(1)报表具有商务智能报表的高级多维分析功能,报表展开速度快,且能下钻查看明细;
(2)报表具有ABAP报表的灵活性,能够读取任意格式数据的功能,克服商务智能报表无法读取任意格式数据(如照片)的缺点;
(3)报表具有ABAP报表的实时性,克服商务智能系统抽数不及时的缺点。
(4)报表具有ABAP报表权限管理的灵活性、严格性,克服商务智能报表权限控制颗粒度较粗的问题。
3 功能模块设计
本系统要实现权限管理、用户管理、报表输出三个模块的功能,其中报表输出模块包括八个子模块,它们分别是:职务分类信息、专业人员信息、专家信息、职称信息、技能等级信息、执(职)业资格信息、学历信息、校友信息。
本系统的功能模块图设计为如图1所示。
本系统的权限管理模块按照角色来控制,每一个角色都赋予不同的权限范围,用户赋予该角色以后只能查看到限定权限范围内的组织结构或人员信息,以保证信息的保密性。
用户管理模块用于增、删、查、改用户信息,每个用户可以修改自己的信息,但只有超级权限的管理员可以增、删、查、改其他用户的信息。
报表输出模块是整个系统的核心部分,用于向用户展示八个子模块的多维分析报表,报表可以从组织结构下钻到员工,并且能够查看员工的详细个人信息。
4 多维分析技术的设计与实现
本系统的核心技术是使用了多维数据库表技术和预计算技术,用于提高多维分析报表的实时计算速度。
4.1 多维数据库表技术的设计与实现
多维数据库表和普通的关系型数据库表是不同的。
关系型数据库表是数据记录(关系元组)的线性(一维)集合。
当数据量非常大时,用SQL语句查询记录会很耗时间和资源,因此关系型数据库不适合应用于多维分析。
二维或以上维度的表称为多维数据库表。
使用多维数据库表存储数据不仅可以减少存储空间,而且可以加快数据查找及运算的速度。
例如:数据源中的关系型数据库表如表1所示。
表1:数据源中的关系型数据库表
利用多维数据库表技术可以将该表改造成如表2所示。
表2:改造后的多维数据库表
数据存储单元由18格缩减到8格,大大减少了存储空间。
与此同时,由于记录数的减少,查询频率也会相应减少。
例如查询人力资源部高级职称人数时,关系型数据库表要查询到第六条才能得到结果,而多维数据库表只需要查询到第二条就能得到结果。
这样就能大大提高查询效率。
另外,在累加时,多维数据库表也能显示出极大的优势。
例如计算人力资源部三种职称的人员总数时,关系型数据库表要查询三条记录后再逐次累加,而多维数据库表只需要查找到第二条记录,将三个字段的数据累加即可。
这一改造极大提高了程序的运算速度。
4.2 预计算技术的设计与实现
本系统数据量极大,如果所有的数据采取实时计算将造成程序长时间不响应。
因此,本系统采用预计算与实时计算相结合的方式,以保证报表即快速又准确。
对于耗时较长的数据计算
(比如层级较多的递归计算)采用在每天凌晨0点进行,将各维度数据提前计算好后存储在多维数据库表中。
对于耗时较短的数据计算(比如末级节点的下钻计算)则采用实时计算的方式。
预计算程序的核心代码截图如图2所示。
为了保证下钻到员工明细数据是最新的数据,这部分代码需要采取实时计算的方式。
核心代码如图3所示。
5 实现结果
根据多维分析技术开发报表,使该系统运行速度快,数据全面、准确,用户满意度高。
建成后的报表截图如图4所示。
报表可以按照组织结构、毕业院校、用工属性等多个维度对数据进行筛选分析,并且组织结构可以按照组织层级下钻到末级组织和员工。
如果需要查看员工个人详细信息,则使用实时计算技术展开到该员工的详细信息页面。
如图5。
6 总结与改进方向
本系统结合多维数据库表技术和预计算技术,使用ABAP语言实现多维分析,不仅保留了ABAP报表的实时性和灵活性,而且使报表查询速度大幅提升,充分结合了ABAP报表与商务智能分析报表的优点。
本系统存在很大的优化空间。
现在只是单纯地对各种数据进行了汇总统计,只能算是一个多维分析型报表,还没有数据挖掘功能,不能分析原因、预测未来。
将来可以在统计数据的基础上加入驾驶舱分析技术,对汇总数据进行全方位地分析、总结及预测,为决策层和管理层提供更有力的帮助。
参考文献
[1]车敦仁,周立柱.OLAP及多维数据库技术[J].数据库研究与进展95——第十三届全国数据库学术会议论文集,1995.
[2]姚琦.基于多维数据库的财务数据管理[J].长春师范学院学报,2011.
[3]于波,赵征,唐世渭.OLAP中的CUBE计算问题[J].计算机应用,2003.
作者单位
中国东方电气集团有限公司中央研究院信息化研究所四川省成都市 611731。