Cube 緯度分析

leniz發表於2013-07-18
  Cube的效果如何,需要通過緯度表的大小來判斷,系統自帶有一隻程式去分析,但是每次會把系統所有的Cube都分析一遍,結果也不好找。  所以稍微修改了一下。

程式前提: Cube 執行一次“資料庫統計”, 在Cube 的管理頁面,有一個效能標籤頁,在那裡可以執行此操作。

REPORT ZR_INFOCUBE_DESIGNS .
******************************************************************************
*todo: analyse the dimension table , compare the result to fact table
*modi: Robin Lei
*date: 2013.7.18
*******************************************************************************

TYPE-POOLSRSDRSDU.

DATAL_T_CUBE      TYPE RSD_T_CUBE,
      L_S_CUBE      TYPE RSD_S_CUBE,
      L_FACTROWS    TYPE I,
      L_S_TABLSIZE  TYPE RSDU_S_TABLSIZE,
      L_T_TABLSIZE  TYPE RSDU_T_TABLSIZE,
      L_DENSITY     TYPE F,
      L_PDENSITY    TYPE DECIMALS 1,
      L_COUNTER     TYPE I,
      L_ODD         TYPE I.

PARAMETERS:L_CUBE TYPE RSINFOCUBE.


* get list of all active infocubes in the system
CALL FUNCTION 'RSD_CUBE_MULTI_GET_ONLY_DB'
  EXPORTING
    I_READ_ALL      RS_C_TRUE
*   I_T_INFOCUBE    =
    I_OBJVERS       RS_C_OBJVERS-ACTIVE
*   I_CUBETYPE      = 'B'
*   I_T_CUBETYPE    =
*   I_WITH_ATR_NAV  = RS_C_FALSE
  IMPORTING
    E_T_CUBE        L_T_CUBE
*   E_T_CUBE_IOBJ   =
*   E_T_DIME_IOBJ   =
*   E_T_IC_VAL_IOBJ =
  EXCEPTIONS
    ILLEGAL_INPUT   1
    OTHERS          2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


* loop over the cubes and get information
L_COUNTER 0.

LOOP AT L_T_CUBE INTO L_S_CUBE WHERE  INFOCUBE L_CUBE .

* get cube layout information
  CALL FUNCTION 'RSDU_INFOCUBE_TABLE_SIZES'
    EXPORTING
      I_INFOCUBE   L_S_CUBE-INFOCUBE
      I_CHECK      RS_C_TRUE
    IMPORTING
      E_FACTROWS   L_FACTROWS
      E_T_TABLSIZE L_T_TABLSIZE
      E_DENSITY    L_DENSITY.

* give details only for non-empty cubes
  IF L_FACTROWS 0CONTINUEENDIF.

* count non-empty cubes
  L_COUNTER L_COUNTER + 1.

* set format
  FORMAT COLOR COL_BACKGROUND INVERSE ON.

* print cube infos
  L_PDENSITY L_DENSITY.
  WRITEAT /   L_S_CUBE-INFOCUBE,
         AT 20  'rows:'L_FACTROWS,
         AT 40  'density:'L_PDENSITY'%'.

* print cube table infos
  LOOP AT L_T_TABLSIZE INTO L_S_TABLSIZE.
*   swap formats
    L_ODD L_COUNTER MOD 2.
    IF L_ODD 1.
      FORMAT COLOR COL_BACKGROUND INTENSIFIED OFF INVERSE OFF.
    ELSE.
      FORMAT COLOR COL_BACKGROUND INTENSIFIED ON INVERSE OFF.
    ENDIF.
*   write ...
    IF L_S_TABLSIZE-SIZE_CHECK <> RSDU_C_CHECK-GREEN.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF INVERSE ON.
    ENDIF.
    WRITEAT /   L_S_CUBE-INFOCUBE,
           AT 20  L_S_TABLSIZE-TABLNM,
           AT 40  'rows:'L_S_TABLSIZE-ROWS,
           AT 60  'ratio:'L_S_TABLSIZE-PERCENT'%'.

  ENDLOOP.

ENDLOOP.

IF SY-SUBRC NE 0.
  WRITEL_CUBE ,'NOT EXIST!'.
ENDIF.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-766643/,如需轉載,請註明出處,否則將追究法律責任。

相關文章