In addition to the standard and user defined dimensions, BPC also requires a dimension called Measures. This dimension is included automatically in all application sets. It is not listed as a dimension in the Manage Dimensions task, but is displayed on the Current View bar in BPC for Excel. The Measures dimension allows you to change the view of your data between Periodic, Quarter-to-date (QTD), Year-to-date (YTD)).
BPC system provides pre-defined measures like Periodic, YTD and QTD. Whenever there is a requirement to have the custom calculation which is different from the provided measures we need to go for custom measures. For example, there might be a case where the Quarterly Value of a dimension member is an Average of the monthly values instead of addition. We would need to create custom measures for similar cases.
Now let’s say we are using Custom measures for a certain dimension based on some custom property which we have created; We need to specify the Technical Name of the property in the Custom measure formula.
During Transport from one system to another system, the custom measures are not updated as per the current system. (This happens because of the fact that we are using custom property for calculating the measure) i.e., in BPC, the technical names of custom made properties change when transported from one system to another.
So, manual intervention is required.
To overcome this issue every time when a transport is made, we developed a Custom Transaction ZTBPC_FORMULAPP, which helps us in updating these custom measures. (i.e., overhead to maintain Custom Measures MANUALLY (Manual approach is not suggested) in Quality or Production Systems).
To update Custom Measures for Environment after transport in target system
We should run this transaction whenever there is a modification in the custom measure(s).
Custom measures are updated automatically and no manual process is required apart from triggering the ABAP Program.
Appendix
Appendix A
***********************************************************************
* LOGIC : THIS PROGRAM IS USED TO MODIFY CUSTOM MEASURES
* IN UJA_FORMULA_APP TABLE SAY WITH FORMULA NAMES
* CONTAIN AVGQTR / AVGYEAR KEYWORDS (OR ANY OTHER KEYWORDS)
* SELECTION CONDITION: USER PROVIDES APPSET_ID
***********************************************************************
REPORT ZBPC_ACTIVATE_FORMULAPP.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS : P_APPSET TYPE UJ_APPSET_ID. ”SAP BUSINESSOBJECTS - APPSET ID
SELECTION-SCREEN END OF BLOCK B1.
*----------------------------------------------------------------------------
* DATA DECLARATION
*----------------------------------------------------------------------------
DATA: L_VARKEY LIKE RSTABLE-VARKEY.
DATA: GV_OBJNM TYPE RSIOBJNM, " INFOOBJECT
GV_APPSET TYPE UJ_APPSET_ID, " APPSET ID
GV_FORMULA TYPE STRING,
GV_NEW TYPE STRING,
GV_OLD TYPE STRING,
GV_LATER TYPE STRING,
GV_FORMER TYPE STRING,
GV_FLAG TYPE I. " CHANGE INDICATOR FLAG
CONSTANTS: GC_AVGQTR TYPE RSTXTLG VALUE 'AVERAGEFORQUARTER',
GC_AVGYEAR TYPE RSTXTLG VALUE 'AVERAGEFORYEAR',
GC_E TYPE CHAR1 VALUE 'E',
GC_A TYPE CHAR1 VALUE 'A',
GC_S TYPE CHAR1 VALUE 'S',
GC_2 TYPE CHAR1 VALUE '2',
GC_3 TYPE CHAR1 VALUE '3',
GC_I TYPE CHAR1 VALUE 'I',
GC_TABNAME TYPE RSTABLE-TABNAME VALUE 'UJA_FORMULA_APP'.
FIELD-SYMBOLS: <GV_FORMULA> TYPE ANY,
<GS_FORMULA> TYPE ANY,
<GV_FORMULA_NAME> TYPE ANY.
DATA: GT_FORMULA TYPE STANDARD TABLE OF UJA_FORMULA_APP,
GT_APPENDTAB TYPE STANDARD TABLE OF UJA_FORMULA_APP, " ITAB
GO_FORMULA TYPE REF TO DATA.
* CREATING WORK AREA FOR ITAB
CREATE DATA GO_FORMULA LIKE LINE OF GT_FORMULA.
ASSIGN GO_FORMULA->* TO <GS_FORMULA>.
TYPES: BEGIN OF T_OBJNM,
IOBJNM TYPE RSIOBJNM, " INFOOBJECT
TXTLG TYPE RSTXTLG, " LONG DESCRIPTION
END OF T_OBJNM.
DATA: GT_OBJNM TYPE TABLE OF T_OBJNM,
GS_OBJNM TYPE T_OBJNM,
GV_AVGQTR TYPE UJ_FORMULA_NAME VALUE '%AVGQTR%',
GV_AVGYEAR TYPE UJ_FORMULA_NAME VALUE '%AVGYEAR%',
GV_LEN TYPE I.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_APPSET-LOW'(005).
SCREEN-REQUIRED = GC_2.
MODIFY SCREEN.
ENDIF. " IF SCREEN-NAME = 'P_APPSET-LOW'.
ENDLOOP.
*----------------------------------------------------------------------*
* SELECTION SCREEN VALIDATION
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON P_APPSET.
IF SY-UCOMM EQ 'ONLI'(006).
IF P_APPSET IS INITIAL. " CHECK IF APPSET IS INITIAL
MESSAGE 'ENTER APPSET ID'(001) TYPE GC_E.
ELSE.
IF P_APPSET IS NOT INITIAL.
SELECT SINGLE APPSET_ID FROM UJA_APPSET_INFO
INTO GV_APPSET
WHERE APPSET_ID = P_APPSET.
IF SY-SUBRC <> 0.
MESSAGE 'INVALID APPSET ID'(002) TYPE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*---------------------------------------------------------------------*
* F4 HELP
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_APPSET.
TYPES: BEGIN OF L_TAB,
APPSET_ID TYPE UJ_APPSET_ID,
END OF L_TAB.
DATA: GT_TAB TYPE STANDARD TABLE OF L_TAB. "DECLARE THE INTERNAL TABLE AS U LIKE
DATA: GT_RET TYPE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
SELECT APPSET_ID FROM UJA_APPSET_INFO
INTO TABLE GT_TAB. " SELECTING AVAILABLE APPSETS
IF GT_TAB IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' " FUCNTION MODULE TO
EXPORTING
RETFIELD = 'APPSET_ID'(007) "FIELD NAME IN YOUR VALUE TAB I.E IT_TAB
VALUE_ORG = GC_S
TABLES
VALUE_TAB = GT_TAB[]
RETURN_TAB = GT_RET[].
IF SY-SUBRC EQ 0.
READ TABLE GT_RET INDEX 1.
P_APPSET = GT_RET-FIELDVAL.
ENDIF.
ENDIF.
*--------------------------------------------------------------------*
* START-OF-SELECTION.
*--------------------------------------------------------------------*
START-OF-SELECTION.
* GET THE SYSTEM MAINTAINED INFOROBJECT NAME FOR ACCOUNTTYPEFOR AVGQTR REPORT
*** SELCT FROM RSDIOBJT TABLE FOR INFOTYPE
SELECT IOBJNM TXTLG " INFOOBJECT DATA FROM RSDIOBJT
INTO TABLE GT_OBJNM
WHERE OBJVERS = GC_A
AND ( TXTLG = GC_AVGQTR ) OR ( TXTLG = GC_AVGYEAR ) .
IF SY-SUBRC = 0.
* GET ALL ITEMS WITH *AVGQTR* IN FORMULA NAME FOR THE SELECTED APPSET
SORT GT_OBJNM BY IOBJNM.
DELETE ADJACENT DUPLICATES FROM GT_OBJNM. " DELETING REPEATED ENTRIES
* FETCHING FORMULA DATA
SELECT * FROM UJA_FORMULA_APP
INTO TABLE GT_FORMULA
WHERE APPSET_ID = P_APPSET
AND ( FORMULA_NAME LIKE GV_ AVGQTR ) OR ( FORMULA_NAME LIKE GV_ AVGYEAR ).
ENDIF.
IF GT_FORMULA IS NOT INITIAL.
GV_AVGQTR = 'AVGQTR'.
GV_AVGYEAR = 'AVGYEAR'.
LOOP AT GT_FORMULA ASSIGNING <GS_FORMULA>.
CLEAR GV_OBJNM.
ASSIGN COMPONENT 'FORMULA_STAT' OF STRUCTURE <GS_FORMULA> TO <GV_FORMULA>.
* CHECK THE LAST FOUR CHARACTERS OF FORMULA_NAME AND THEN DECIDE THE INFOOBJECT VALUE
ASSIGN COMPONENT 'FORMULA_NAME' OF STRUCTURE <GS_FORMULA> TO <GV_FORMULA_NAME>.
IF <GV_FORMULA_NAME> CS GV_AVGQTR.
READ TABLE GT_OBJNM INTO GS_OBJNM WITH KEY TXTLG = GC_AVGQTR.
IF SY-SUBRC = 0.
GV_OBJNM = GS_OBJNM-IOBJNM.
ENDIF.
ELSEIF <GV_FORMULA_NAME> CS GV_AVGYEAR.
READ TABLE GT_OBJNM INTO GS_OBJNM WITH KEY TXTLG = GC_AVGYEAR.
IF SY-SUBRC = 0.
GV_OBJNM = GS_OBJNM-IOBJNM.
ENDIF.
ENDIF.
IF GV_OBJNM IS NOT INITIAL.
* ASSIGN AND CHANGE THE INFOOBJECT NAME IN THE FORMULA
SPLIT <GV_FORMULA> AT GC_2 INTO GV_FORMER GV_LATER.
SPLIT GV_LATER AT '"' INTO GV_OLD GV_LATER.
IF GV_OLD NE GV_OBJNM . " COMPARE EXISTING AND NEW FORMULA
GV_FLAG = 1. " FLAG IS RAISED IF GV_NEW AND GV_OBJNM DIFFER
CLEAR : GV_NEW, <GV_FORMULA>.
MOVE GV_OBJNM TO GV_NEW.
CONCATENATE GV_FORMER GC_2 GV_NEW '"' GV_LATER INTO <GV_FORMULA>.
REPLACE ALL OCCURRENCES OF GV_OLD IN <GV_FORMULA> WITH GV_NEW.
APPEND <GS_FORMULA> TO GT_APPENDTAB.
ENDIF. ”GV_OLD NE GV_OBJNM
ENDIF. ”GV_OBJNM
ENDLOOP.
ENDIF.
IF GV_FLAG IS NOT INITIAL.
L_VARKEY = SY-MANDT.
* START MODIFYING THE DB TABLE
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
MODE_RSTABLE = GC_E
TABNAME = GC_TABNAME
VARKEY = L_VARKEY
X_TABNAME = ' '
X_VARKEY = ' '
_SCOPE = GC_2
_WAIT = ' '
_COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC = 0.
* MODIFY USING THE INTERNAL TABLE GT_FORMULA
MODIFY UJA_FORMULA_APP FROM TABLE GT_APPENDTAB.
IF SY-SUBRC = 0.
GV_FLAG = 2.
ENDIF.
* END MODIFYING DB TABLE
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
MODE_RSTABLE = GC_E
TABNAME = GC_TABNAME
VARKEY = L_VARKEY
X_TABNAME = ' '
X_VARKEY = ' '
_SCOPE = GC_3
_SYNCHRON = ' '
_COLLECT = ' '.
IF ( SY-SUBRC = 0 ) AND ( GV_FLAG = 2 ).
GV_FLAG = 3.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'CUSTOM MEASURED ARE UP TO DATE'(008) TYPE GC_I.
LEAVE LIST-PROCESSING.
ENDIF.
IF GV_FLAG = 3.
MESSAGE 'SUCCESSFULLY MAINTAINED CUSTOM MEASURES IN CURRENT SYSTEMS'(009) TYPE GC_S.
ELSE.
MESSAGE 'UNABLE TO EXUCUTE, CHECK LOCK ON DATABASE TABLE UJA_FORMULA_APP'(010) TYPE GC_E.
ENDIF.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |