Code20091203 - ooxxvv/MySAPnotes GitHub Wiki

Code20091203

  • εˆ©η”¨ MDX θͺžζ³•取得 Query ζˆ– Cube ηš„θ³‡ζ–™

Code

FUNCTION ztest001.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_ZNMHVSNM) TYPE  /BIC/OIZNMHVSNM
*"  EXPORTING
*"     VALUE(ES_RETURN) TYPE  BAPIRET2
*"  TABLES
*"      FT_OUTPUT STRUCTURE  ZSZQPSI0001_001
*"----------------------------------------------------------------------


  CONSTANTS: c_max_cells   TYPE bapi6111cd-cell_ordinal VALUE 10000.

  DATA: l_name        TYPE bapi6111mdx-line,
        l_datasetid   TYPE bapi6111gen-obj_handle,
        ls_mdx        TYPE bapi6111mdx,
        lt_mdx        TYPE TABLE OF bapi6111mdx WITH DEFAULT KEY,
        ls_cell_data  TYPE bapi6111cd,
        lt_cell_data  TYPE TABLE OF bapi6111cd WITH DEFAULT KEY.

  DATA: lt_header     LIKE  bapi6111fsd OCCURS 0,
        lt_data       LIKE  bapi6111fsd OCCURS 0,
        lw_data       LIKE LINE OF lt_data,
        l_index       LIKE syst-index,
        l_subrc       LIKE syst-subrc,
        l_string      TYPE string.

  FIELD-SYMBOLS: <fs_field> TYPE ANY.


  DEFINE append_mdx.
    ls_mdx = &1.
    append ls_mdx to lt_mdx.
  END-OF-DEFINITION.


*-Check
  IF i_znmhvsnm IS INITIAL.
    EXIT.
  ENDIF.

*-Set Where string
  CLEAR: l_string.
  CONCATENATE  'WHERE [ZNMHVSNM].[' i_znmhvsnm ']' INTO l_string.

*-Set MDX command
  append_mdx:  'SELECT',
      '[Measures].members ON AXIS(0),',
      'NON EMPTY [0PROFIT_CTR].[LEVEL01].members ',
      'PROPERTIES [0PROFIT_CTR].[10PROFIT_CTR] ON AXIS(1),',
      'NON EMPTY [ZNMHMT].[LEVEL01].MEMBERS ON AXIS(2)',
      'FROM ZMC_CA001/ZQPSI0001',
      l_string.

  CLEAR es_return.

*-Create MDX data set
  CALL FUNCTION 'BAPI_MDDATASET_CREATE_OBJECT'
    IMPORTING
      datasetid    = l_datasetid
      return       = es_return
    TABLES
      command_text = lt_mdx.

  CHECK es_return IS INITIAL.

*-Run MDX data selection
  CALL FUNCTION 'BAPI_MDDATASET_SELECT_DATA'
    EXPORTING
      datasetid = l_datasetid
    IMPORTING
      return    = es_return.

  CHECK es_return IS INITIAL.


*-Get Cell data
  CALL FUNCTION 'BAPI_MDDATASET_GET_FLAT_DATA'
    EXPORTING
      datasetid = l_datasetid
      start_row = 0
      end_row   = c_max_cells
    IMPORTING
      return    = es_return
    TABLES
      header    = lt_header
      data      = lt_data.


  CHECK es_return IS INITIAL.

*-Delete MDX data set
  CALL FUNCTION 'BAPI_MDDATASET_DELETE_OBJECT'
    EXPORTING
      datasetid = l_datasetid.


*-Adjust Output
  CLEAR: ft_output.

  LOOP AT lt_data INTO lw_data.

    IF lw_data-column EQ 0 AND NOT ft_output IS INITIAL.
      APPEND ft_output.
      CLEAR ft_output.
    ENDIF.

*---Adjust Format
    IF lw_data-column GE 2.
      REPLACE ALL OCCURRENCES OF ','
        IN lw_data-data WITH ''.
      REPLACE ALL OCCURRENCES OF 'TWD'
        IN lw_data-data WITH ''.
    ENDIF.

*---Assign space field
    l_index = lw_data-column.
    l_index = l_index + 1.
    ASSIGN COMPONENT l_index OF STRUCTURE ft_output TO <fs_field>.

*---Check assign success or not
    IF sy-subrc EQ 0.
      <fs_field> = lw_data-data.
    ENDIF.

  ENDLOOP.

ENDFUNCTION.
⚠️ **GitHub.com Fallback** ⚠️