sap bw - infocube aggregate status (history) · pdf filesap bw - infocube aggregate status...
TRANSCRIPT
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 1
SAP BW - Infocube Aggregate
Status (History)
Applies to:
This article is applicable to all the SAP BI 7.0 consultants who are accustomed with SAP ABAP skills. For more information, visit the EDW HomePage .
Summary
To get the status history of aggregates (Infocubes) for specific date range.
Author: Suraj Tigga
Company: Capgemini Consulting India Pvt. Ltd.
Created on: 11 August 2010
Author Bio
Suraj Tigga is a Senior SAP BI / ABAP consultant at Capgemini Consulting, India. Suraj joined Capgemini Consulting in 2008 and has worked on multiple SAP BI implementation and support projects.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 2
Table of Contents
Scenario .............................................................................................................................................................. 3
Step-by-Step Solution ..................................................................................................................................... 3 Generic Datasource - > Standard DSO ........................................................................................................................ 3
ABAP Code -> Direct DSO -> Standard DSO (Load) ................................................................................................. 10
Disclaimer and Liability Notice .......................................................................................................................... 14
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 3
Scenario
Methods to show the detailed history of Infocube Aggregate present in BI System.
Generic Datasource -> Standard DSO
ABAP Code -> Direct DSO -> Standard DSO
Step-by-Step Solution
Document explains the steps for different methods to store the history of Infocube Aggregate Status using below mentioned methods:
Generic Datasource -> Standard DSO
a) Function Module (Generic Extractor)
b) Delta Enabled Generic Extractor
c) Data Load (Generic Extractor -> Standard DSO)
ABAP Code -> Direct DSO -> Standard DSO
a) ABAP Code (Full Load the Aggregate details to Direct DSO)
b) Data Load(ABAP Code - Direct DSO)
Generic Datasource - > Standard DSO
Step1: Function Module (Generic Extractor)
Function Module: ZAGGREGATE_STATUS
Extract Structure: ZAGGR_STATUS
Function Module: ZAGGREGATE_STATUS
FUNCTION zaggregate_status.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR
*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*" VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*" VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*" TABLES
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 4
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE ZAGGR_STATUS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
* Example: DataSource for table SFLIGHT
TABLES: zaggr_status.
* Auxiliary Selection criteria structure
DATA: l_s_select TYPE srsc_s_select.
* Maximum number of lines for DB table
STATICS: s_s_if TYPE srsc_s_if_simple,
* counter
s_counter_datapakid LIKE sy-tabix,
* cursor
s_cursor TYPE cursor.
* Select ranges
RANGES: l_r_info FOR zaggr_status-/bic/yinfo.
******** TYPES ***********************
TYPES: BEGIN OF ty_aggregate ,
infocube LIKE rsddaggrdir-infocube,
aggrcube LIKE rsddaggrdir-aggrcube,
objstat LIKE rsdcube-objstat,
num_entries TYPE rsddnumentries ,
calls TYPE rsddcalls ,
lastcall TYPE rsddlastcall ,
lastupdate TYPE rsddlastupdate ,
lastupdateuser TYPE rststpnm ,
timestmp TYPE rstimestmp ,
tstpnm TYPE rststpnm ,
txtsh LIKE rsddaggrt-txtsh,
END OF ty_aggregate.
********** WORK AREA ***********************
DATA: wa_aggregate TYPE ty_aggregate ,
wa_/BIC/AYAGGRH00 TYPE /BIC/AYAGGRH00 .
******* TABLES *****************************
DATA: t_/BIC/AYAGGRH00 TYPE STANDARD TABLE OF /BIC/AYAGGRH00 ,
t_aggregate TYPE STANDARD TABLE OF ty_aggregate .
DATA : l_string TYPE string ,
l_aggr TYPE /bic/oiyaggr ,
l_14(14) TYPE c ,
l_3(3) TYPE c.
DATA: l_dec TYPE p LENGTH 14 DECIMALS 3.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 5
* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
IF i_initflag = sbiwa_c_flag_on.
************************************************************************
* Initialization: check input parameters
* buffer input parameters
* prepare data selection
************************************************************************
* Check DataSource validity
CASE i_dsource.
WHEN 'ZAGGR1'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
* this is a typical log call. Please write every error message like this
log_write 'E' "message type
'R3' "message class
'009' "message number
i_dsource "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
APPEND LINES OF i_t_select TO s_s_if-t_select.
* Fill parameter buffer for data extraction calls
s_s_if-requnr = i_requnr.
s_s_if-dsource = i_dsource.
s_s_if-maxsize = i_maxsize.
* Fill field list table for an optimized select statement
* (in case that there is no 1:1 relation between InfoSource fields
* and database table fields this may be far from beeing trivial)
* APPEND LINES OF i_t_fields TO s_s_if-t_fields.
REFRESH i_t_fields.
i_t_fields-fieldnm = 'INFOCUBE'.
APPEND i_t_fields TO s_s_if-t_fields.
i_t_fields-fieldnm = 'AGGRCUBE'.
APPEND i_t_fields TO s_s_if-t_fields.
i_t_fields-fieldnm = 'OBJSTAT'.
APPEND i_t_fields TO s_s_if-t_fields.
i_t_fields-fieldnm = 'OBJSTAT'.
APPEND i_t_fields TO s_s_if-t_fields.
ELSE. "Initialization mode or data extraction ?
************************************************************************
* Data transfer: First Call OPEN CURSOR + FETCH
* Following Calls FETCH only
************************************************************************
* First data package -> OPEN CURSOR
IF s_counter_datapakid = 0.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 6
* Fill range tables BW will only pass down simple selection criteria
* of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = '/BIC/YINFO'.
MOVE-CORRESPONDING l_s_select TO l_r_info.
APPEND l_r_info.
ENDLOOP.
* Determine number of database records to be read per FETCH statement
* from input parameter I_MAXSIZE. If there is a one to one relation
* between DataSource table lines and database entries, this is trivial.
* In other cases, it may be impossible and some estimated value has to
* be determined.
OPEN CURSOR WITH HOLD s_cursor FOR
SELECT a~infocube
a~aggrcube
c~objstat
a~num_entries
a~calls
a~lastcall
a~lastupdate
a~lastupdateuser
a~timestmp
a~tstpnm
b~txtsh
FROM rsddaggrdir AS a
INNER JOIN rsddaggrt AS b ON a~aggruid = b~aggruid
AND a~objvers = b~objvers
INNER JOIN rsdcube AS c ON a~aggrcube = c~infocube
AND a~objvers = c~objvers
WHERE a~infocube IN l_r_info
AND a~objvers = 'A'.
ENDIF. "First data package ?
* Fetch records into interface table.
* named E_T_'Name of extract structure'.
FETCH NEXT CURSOR s_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE t_aggregate
PACKAGE SIZE s_s_if-maxsize.
IF sy-subrc <> 0.
CLOSE CURSOR s_cursor.
RAISE no_more_data.
ELSE.
LOOP AT t_aggregate INTO wa_aggregate.
wa_/bic/ayaggrh00-/bic/yinfo = wa_aggregate-infocube.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_aggregate-aggrcube
IMPORTING
output = wa_aggregate-aggrcube.
wa_/bic/ayaggrh00-/bic/yaggr = wa_aggregate-aggrcube.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 7
wa_/bic/ayaggrh00-/bic/yobjs = wa_aggregate-objstat.
wa_/bic/ayaggrh00-/bic/yrecord = wa_aggregate-num_entries.
wa_/bic/ayaggrh00-/bic/yusuage = wa_aggregate-calls.
* Last Call
l_dec = wa_aggregate-lastcall.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggrh00-/bic/ylast_dt = l_14+0(8).
wa_/bic/ayaggrh00-/bic/ylast_tm = l_14+8(6).
CLEAR: l_dec , l_string.
* Last Roll-Up
l_dec = wa_aggregate-lastupdate.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggrh00-/bic/yroll_dt = l_14+0(8).
wa_/bic/ayaggrh00-/bic/yroll_tm = l_14+8(6).
wa_/bic/ayaggrh00-/bic/yroll_by = wa_aggregate-lastupdateuser.
CLEAR l_string.
* Changed By
l_dec = wa_aggregate-timestmp.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggrh00-/bic/ychng_dt = l_14+0(8).
wa_/bic/ayaggrh00-/bic/ychng_tm = l_14+8(6).
wa_/bic/ayaggrh00-/bic/ychng_by = wa_aggregate-tstpnm.
CLEAR l_string.
* Description
wa_/bic/ayaggrh00-/bic/ydesc = wa_aggregate-txtsh.
APPEND wa_/bic/ayaggrh00 TO t_/bic/ayaggrh00.
CLEAR wa_/bic/ayaggrh00.
ENDLOOP.
e_t_data[] = t_/bic/ayaggrh00[].
ENDIF.
s_counter_datapakid = s_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 8
Step2: Delta Enabled Generic Extractor
Extract Structure: ZAGGR_STATUS
Delta Based on (Changed Date)
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 9
Step3: Data Load (Generic Extractor -> Standard DSO)
Extractor Test: (Transaction Code RSA3)
Execute the Extractor
Important Database Tables: RSDDAGGRDIR (Directory of the aggregates)
RSDDAGGRT (Aggregate texts)
RSDCUBE (Directory of InfoCubes / InfoProvider)
Next Steps:
a) Make transformations from datasource to DSO (Standard).
b) Execute the delta loads on regular intervals.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 10
ABAP Code -> Direct DSO -> Standard DSO (Load)
Step1: ABAP Code (Full Load the Aggregate details to Direct DSO)
ABAP Code: YAGGREGATE_STATUS (Load data to Direct DSO)
Based on the above mentioned tables (Earlier Method), data would be fetched and fed into direct DSO which will further loaded to Standard DSO regularly.
ABAP Code (Complete):
*&---------------------------------------------------------------------*
*& Report YAGGREGATE_STATUS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT yaggregate_status LINE-SIZE 132 LINE-COUNT 70
NO STANDARD PAGE HEADING .
******** TABLES ********************
TABLES : rsddaggrdir,
rsddaggrt,
rsdcube.
******** TYPES ***********************
TYPES: BEGIN OF ty_aggregate ,
infocube LIKE rsddaggrdir-infocube,
aggrcube LIKE rsddaggrdir-aggrcube,
objstat1 LIKE rsddaggrdir-objstat,
objstat2 LIKE rsdcube-objstat,
num_entries TYPE rsddnumentries ,
calls TYPE rsddcalls ,
lastcall TYPE rsddlastcall ,
lastupdate TYPE rsddlastupdate ,
lastupdateuser TYPE rststpnm ,
timestmp TYPE rstimestmp ,
tstpnm TYPE rststpnm ,
txtsh LIKE rsddaggrt-txtsh,
END OF ty_aggregate.
********** WORK AREA ***********************
DATA: wa_aggregate TYPE ty_aggregate ,
wa_/bic/ayaggre00 TYPE /bic/ayaggre00 .
******* TABLES *****************************
DATA: t_/bic/ayaggre00 TYPE STANDARD TABLE OF /bic/ayaggre00 ,
t_aggregate TYPE STANDARD TABLE OF ty_aggregate .
DATA : l_string TYPE string ,
l_aggr TYPE /bic/oiyaggr ,
l_14(14) TYPE c ,
l_3(3) TYPE c.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 11
DATA: l_dec TYPE p LENGTH 14 DECIMALS 3.
********* SELECTION SCREEN ***************
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
* Infocube
SELECT-OPTIONS: s_cube FOR rsddaggrdir-infocube.
* Active Version
PARAMETERS: p_vers LIKE rsddaggrdir-objvers DEFAULT 'A'.
SELECTION-SCREEN: END OF BLOCK b1.
********************************************
********** START-OF-SELECTION ***************
START-OF-SELECTION.
* Collate the Informations
SELECT a~infocube
a~aggrcube
a~objstat
c~objstat
a~num_entries
a~calls
a~lastcall
a~lastupdate
a~lastupdateuser
a~timestmp
a~tstpnm
b~txtsh
INTO TABLE t_aggregate
FROM rsddaggrdir AS a
INNER JOIN rsddaggrt AS b ON a~aggruid = b~aggruid
AND a~objvers = b~objvers
INNER JOIN rsdcube AS c ON a~aggrcube = c~infocube
AND a~objvers = c~objvers
WHERE a~infocube IN s_cube
AND a~objvers = p_vers.
IF sy-subrc EQ 0.
LOOP AT t_aggregate INTO wa_aggregate.
wa_/bic/ayaggre00-/bic/yinfo = wa_aggregate-infocube.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_aggregate-aggrcube
IMPORTING
output = wa_aggregate-aggrcube.
wa_/bic/ayaggre00-/bic/yaggr = wa_aggregate-aggrcube.
* wa_/bic/ayaggre00-/bic/yobj1 = wa_aggregate-objstat2.
wa_/bic/ayaggre00-/bic/yobjs = wa_aggregate-objstat1.
wa_/bic/ayaggre00-/bic/yrecord = wa_aggregate-num_entries.
wa_/bic/ayaggre00-/bic/yusuage = wa_aggregate-calls.
* Last Call
l_dec = wa_aggregate-lastcall.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggre00-/bic/ylast_dt = l_14+0(8).
wa_/bic/ayaggre00-/bic/ylast_tm = l_14+8(6).
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 12
CLEAR: l_dec , l_string.
* Last Roll-Up
l_dec = wa_aggregate-lastupdate.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggre00-/bic/yroll_dt = l_14+0(8).
wa_/bic/ayaggre00-/bic/yroll_tm = l_14+8(6).
wa_/bic/ayaggre00-/bic/yroll_by = wa_aggregate-lastupdateuser.
CLEAR l_string.
* Changed By
l_dec = wa_aggregate-timestmp.
l_string = l_dec.
SPLIT l_string AT '.' INTO l_14 l_3.
wa_/bic/ayaggre00-/bic/ychng_dt = l_14+0(8).
wa_/bic/ayaggre00-/bic/ychng_tm = l_14+8(6).
wa_/bic/ayaggre00-/bic/ychng_by = wa_aggregate-tstpnm.
CLEAR l_string.
* Description
wa_/bic/ayaggre00-/bic/ydesc = wa_aggregate-txtsh.
APPEND wa_/bic/ayaggre00 TO t_/bic/ayaggre00.
CLEAR wa_/bic/ayaggre00.
ENDLOOP.
DELETE FROM /bic/ayaggre00 WHERE /bic/yinfo NE space.
MODIFY /bic/ayaggre00 FROM TABLE t_/bic/ayaggre00.
ENDIF.
Direct DSO (Structure) – YAGGRE
Next Steps:
a) Create transformations between Direct DSO and Standard DSO.
b) Load the data regular intervals from ABAP Code to direct DSO and then further to standard
DSO.
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 13
Step2: Data Load (ABAP Code - Direct DSO)
Execute the ABAP Code YAGGREGATE_STATUS
Check the data in DSO YAGGRE
Aggregate Status (/BIC/YOBJS):
Value Description
ACT Active, executable
INA Inactive, not executable
OFF Switched off
PRO Productive
Next Steps:
After the data is loaded in Standard DSO, create a query having ‘Changed on date’ on Selection Screen (Which would give the aggregate status for that particular date range).
SAP BW - Infocube Aggregate Status (History)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com | UAC - uac.sap.com
© 2010 SAP AG 14
Disclaimer and Liability Notice
This document may discuss sample coding or other information that does not include SAP official interfaces and therefore is not supported by SAP. Changes made based on this information are not supported and can be overwritten during an upgrade.
SAP will not be held liable for any damages caused by using or misusing the information, code or methods suggested in this document, and anyone using these methods does so at his/her own risk.
SAP offers no guarantees and assumes no responsibility or liability of any type with respect to the content of this technical article or code sample, including any liability resulting from incompatibility between the content within this document and the materials and services offered by SAP. You agree that you will not hold, or seek to hold, SAP responsible or liable with respect to the content of this document.