- ε©η¨ MDX θͺζ³εεΎ Query ζ Cube ηθ³ζ
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.