After running a BW-system for several years, there will be many InfoProviders where you are not sure if they are really being used by BEx Queries. But every time you have to modify or would like to replace the InfoProvider, you will have to edit the Multiprovider in which the Infoprovider is included.
A good option would be to remove the (unused) Infoprovider from the Multiprovider (where it won’t be called at query runtime to read data).
It would take a lot of time to check every query (based on the Multiprovider in which the Infoprovider is included). Therefore, it would be better to check the BW metadata tables via an ABAP program.
In order to determine the usage of a part provider in a query, we will have to
Instructions for use:
Selection-Screen: Example with three InfoProvider (to check for usage)
The result is split into the
Results: Example with three InfoProvider (to check for usage)
With the two lists ("LIST OF RESULTS:" / "CUBES WITHOUT MULTIPROVIDER INCLUSION") you know which Infoprovider is not used by BEX elements within the resp. Multiprovider or that this Infoprovider is not used by any Multiprovider at all.
Please note that the program is only fitting for InfoCubes/DSOs within a Multiprovider and that it is not used for aggregation levels, planning functions or Composite Providers.
*&———————————————————————* *& Report ZBI_BEX_PARTCUBES_UNUSED *&———————————————————————* *& Created by/on: C. Heinrich – (11.02.2016) *& Targets: *& A) check usage of Cubes/DSO, included in Multiprovider, in queries *& and global BEx-elements (e.g. restricted key-figures) *& B) also show Provider, which are not included in any Multiprovider *& Additions: *& -> beside (all types of) Cubes, also DSOs are supported *&———————————————————————* REPORT ZBI_BEX_PARTCUBES_UNUSED LINE-SIZE 160 NO STANDARD PAGE HEADING.
TABLES: RSDCUBET.
**** Variables, internal tables DATA: BEGIN OF ls_mpro, " List of MultiProvider INFOCUBE TYPE RSINFOPROV, PARTCUBE TYPE RSINFOPROV, USED(1) TYPE C, END OF ls_mpro, lt_mpro LIKE STANDARD TABLE OF ls_mpro. DATA: BEGIN OF ls_keyf, " List of found key-figures INFOCUBE TYPE RSINFOPROV, PARTCUBE TYPE RSINFOPROV, IOBJNM TYPE RSIOBJNM, END OF ls_keyf, lt_keyf LIKE HASHED TABLE OF ls_keyf WITH UNIQUE KEY INFOCUBE IOBJNM PARTCUBE. DATA: BEGIN OF ls_compic, " List of queries/elements to MultiProvider COMPUID TYPE SYSUUID_25, MAPNAME TYPE RSZCOMPID, INFOCUBE TYPE RSINFOPROV, PARTCUBE TYPE RSINFOPROV, FLAG_KEYF(1) TYPE C, " key-f. of part-cube included(=X)? FLAG_SEL_IC(1) TYPE C, " selection at 0INFOPROV exists? (Y/N) FLAG_PARTCUBE(1) TYPE C, " selection at corret part-cube (=Y)? END OF ls_compic, lt_compic LIKE STANDARD TABLE OF ls_compic. DATA: lv_used(1) TYPE c. *** Field-symbols: FIELD-SYMBOLS: LIKE ls_mpro, LIKE ls_compic, LIKE ls_keyf.
**** A) Selection-screen SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. SELECT-OPTIONS: S_CUBE FOR RSDCUBET-INFOCUBE OBLIGATORY. SELECTION-SCREEN: END OF BLOCK b1.
*** B) Checking usage of Partprovider(s): START-OF-SELECTION.
" –> getting list of Multiprovider, including the Cube(s): SELECT RSDCUBEMULTI~INFOCUBE RSDCUBEMULTI~PARTCUBE FROM RSDCUBEMULTI INTO CORRESPONDING FIELDS OF TABLE lt_mpro WHERE RSDCUBEMULTI~OBJVERS = ‘A’ AND RSDCUBEMULTI~PARTCUBE IN S_CUBE.
SKIP 1. FORMAT INTENSIFIED ON. WRITE: / ‘==> CHECK PER MULTI-PROVIDER AND GLOBAL BEX-ELEMENT:’. FORMAT INTENSIFIED OFF. LOOP AT lt_mpro ASSIGNING . " Header: Multiprovider / Part-Cube WRITE: / ‘Multiprovider: ‘, -INFOCUBE, 50 ‘Partprov.: ‘, -PARTCUBE. " –> get key-figures of part-cube which are included at the Multiprovider(s): SELECT RSDICMULTIIOBJ~INFOCUBE RSDICMULTIIOBJ~IOBJNM RSDICMULTIIOBJ~PARTCUBE FROM RSDICMULTIIOBJ INNER JOIN RSDIOBJ ON RSDICMULTIIOBJ~PARTIOBJ = RSDIOBJ~IOBJNM AND RSDICMULTIIOBJ~OBJVERS = RSDIOBJ~OBJVERS INTO CORRESPONDING FIELDS OF TABLE lt_keyf WHERE RSDICMULTIIOBJ~INFOCUBE = -INFOCUBE AND RSDICMULTIIOBJ~PARTCUBE = -PARTCUBE AND RSDICMULTIIOBJ~OBJVERS = ‘A’ AND RSDIOBJ~IOBJTP = ‘KYF’.
*** –> now get queries and other BEx-elements similar to restricted key-figures *** and structures, containing the key-figure(s) of the Partprovider(s): SELECT COMPUID MAPNAME INFOCUBE FROM RSZCOMPIC INNER JOIN RSZELTDIR ON RSZCOMPIC~COMPUID = RSZELTDIR~ELTUID AND RSZCOMPIC~OBJVERS = RSZELTDIR~OBJVERS INTO CORRESPONDING FIELDS OF ls_compic WHERE RSZCOMPIC~INFOCUBE = -INFOCUBE AND RSZCOMPIC~OBJVERS = ‘A’. ls_compic-PARTCUBE = -PARTCUBE. APPEND ls_compic TO lt_compic. ENDSELECT.