Sei sulla pagina 1di 3

General

This article deals with the functionality of Expert Routine in BI7


Transformations. I have recently discovered the effectiveness of this issue
and would like to share the knowledge.
Business Scenario
You load an InfoCube or DSO with many Master Data readings in the Update
Rules (i.e. Assign Master Data Attribute of an InfoObject). In case that this
data load has long times - performance can be improved using various ABAP
Routines in the Update Rule or Start/End Routines (using Internal Tables for
Master Data and deleting irrelevant records).
Expert Routine can improve even further more the performance of the data
load by enabling the user to define exactly how the Transformation works.
Example
The transformation retrieves data from InfoSource DEMO_IS to InfoCube
DEMO_IC:
InfoSource

InfoCube

Assigment

0CALMONTH

0CALMONTH

Direct

0MATERIAL

0MATERIAL

Direct

0CUSTOMER

0CUSTOMER

Direct

ZCUSTSALE

ZCUSTSALE*

Direct

0MATL_GRP1

Master Data of 0MATERIAL

0CUST_CLAS

Master Data of 0CUSTOMER

0SALES_OFF

Master Data of 0CUSTOMER

0DISTR_CHAN

Master Data of ZCUSTSALE

0SALES_GRP

Master Data of ZCUSTSALE

*ZCUSTSALE - Customer sales view master data


In order to dramatically improve performance, the following steps should be
taken:
1.

Use Internal Tables of Master Data (instead of direct read of physical PTables)

2.
3.

Make minimum Select and Read statements.


Necessary Select and Read statements should be executed effeiciently
by using (Sort & Binary Search).
Example for the Expert Routine
*Global Section
TYPES:
BEGIN OF CUSTOMER_DATA,
CUSTOMER LIKE /BI0/PCUSTOMER-CUSTOMER,
CUST_CLAS LIKE /BI0/PCUSTOMER-CUST_CLAS,
SALES_OFF LIKE /BI0/0CUSTOMER-SALES_OFF,
END OF CUSTOMER_DATA.TYPES:
BEGIN OF ZCUSTSALES_DATA,
ZCUSTSALES LIKE /BIC/PZCUSTSALE-ZCUSTSALE,
DISTR_CHAN LIKE /BIC/PZCUSTSALE-DISTR_CHAN,
SALES_GRP LIKE /BIC/PZCUSTSALE-SALES_GRP,
END OF CUSTOMER_DATA.
DATA:
LINE_CUSTOMER_DATA TYPE CUSTOMER_DATA,
LINE_ZCUSTSALE_DATA TYPE ZCUSTSALE_DATA,
ITAB_CUSTOMER_DATA LIKE SORTED TABLE OF LINE_CUSTOMER_DATA,
ITAB_ZCUSTSALE_DATA LIKE SORTED TABLE OF LINE_ZCUSTSALE_DATA.
*Begin of Expert Routine:
*Make the proper Select Statements before(!) looping on the DataPackage
*fill 0CUSTOMER master data into Internal Table:
SELECT DISTINCT CUSTOMER CUST_CLAS SALES_OFF
FROM /BI0/PCUSTOMER
INTO CORRESPONDING FIELDS OF TABLE ITAB_CUSTOMER_DATA
WHERE OBJVERS EQ 'A'.
*fill ZCUSTSALE master data into Internal Table:
SELECT DISTINCT ZCUSTSALE DISTR_CHAN SALES_GRP
FROM /BI0/PZCUSTSALE
INTO CORRESPONDING FIELDS OF TABLE ITAB_ZCUSTSALE_DATA
WHERE OBJVERS EQ 'A'.
*Loop on Data Package to make proper assignments:
DATA:
LINE_DATA_PACKAGE LIKE LINE OF DATA_PACKAGE.
LOOP AT DATA_PACKAGE INTO LINE_DATA_PACKAGE.
*make direct assignments for Result Fields:
RESULT_FIELDS-MATERIAL = LINE_DATA_PACKAGE-MATERIAL.
RESULT_FIELDS-CUSTOMER = LINE_DATA_PACKAGE-CUSTOMER.

RESULT_FIELDS-ZCUSTSALE = LINE_DATA_PACKAGE-ZCUSTSALE.
RESULT_FIELDS-CALMONTH = LINE_DATA_PACKAGE-CALMONTH.
*Read the proper CUSTOMER data from Internal Table using Binary Search.
CLEAR LINE_CUSTOMER_DATA.
READ ITAB_CUSTOMER_DATA WITH KEY
CUSTOMER = LINE_DATA_PACKAGE-CUSTOMER
INTO LINE_CUSTOMER_DATA BINARY SEARCH.
*Assign read values to Result Fields:
RESULT_FIELDS-CUST_CLAS = LINE_DATA_PACKAGE-CUST_CLAS.
RESULT_FIELDS-SALES_OFF = LINE_DATA_PACKAGE-SALES_OFF.
*Read the proper ZCUSTSALE data from Internal Table using Binary Search.
CLEAR LINE_ZCUSTSALE_DATA.
READ ITAB_ZCUSTSALE_DATA WITH KEY
ZCUSTSALE = LINE_DATA_PACKAGE-ZCUSTSALE
INTO LINE_ZCUSTSALE_DATA BINARY SEARCH.
*Assign read values to Result Fields:
RESULT_FIELDS-DISTR_CHAN = LINE_DATA_PACKAGE-DISTR_CHAN.
RESULT_FIELDS-SALES_GRP = LINE_DATA_PACKAGE-SALES_GRP.
APPEND RESULT_FIELDS TO RESULT_PACKAGE.
ENDLOOP.
 

Potrebbero piacerti anche