Hi Thorsten,
I had this post as bookmark just in case there would be more discussion on this.
This is something i could come up with to convert Select Options into Native SQL for HANA. Probably you may have already found the solution.
SAP Demo Report RSMDS_DEMO
Please change the MANDT and Schema Information
REPORT zztest_hana_0001_sdn.
TABLES vbak.
PARAMETERS pa_con TYPE dbcon_name DEFAULT 'XXX'.
SELECT-OPTIONS : so_erdat FOR vbak-erdat,
so_vdatu FOR vbak-erdat,
so_kunnr FOR vbak-kunnr.
TYPES: BEGIN OF typ_dynamic,
vbeln TYPE vbeln,
END OF typ_dynamic.
*-- HANA Call Variables
DATA l_sql_con TYPE REF TO cl_sql_connection.
DATA l_sql TYPE REF TO cl_sql_statement.
DATA l_result TYPE REF TO cl_sql_result_set.
DATA l_statement TYPE string.
DATA ls_dbcon TYPE dbcon.
DATA lt_result TYPE STANDARD TABLE OF typ_dynamic.
DATA ls_result TYPE typ_dynamic.
DATA lf_result TYPE REF TO data.
DATA l_string TYPE string.
*-- Runtime Calc Variables
DATA dbcnt TYPE sy-dbcnt.
DATA seconds TYPE i.
DATA rate TYPE i.
DATA time_start TYPE timestampl.
DATA time_stop TYPE timestampl.
*-- Where clause generation
DATA acc_gen_cp TYPE rsmds_boolean.
DATA r_universe TYPE REF TO cl_rsmds_universe.
DATA r_dim0 TYPE REF TO if_rsmds_dimension.
DATA r_dim1 TYPE REF TO if_rsmds_dimension.
DATA r_renderer TYPE REF TO if_rsmds_condition_renderer.
DATA r_dim2 TYPE REF TO if_rsmds_dimension.
DATA r_dim3 TYPE REF TO if_rsmds_dimension.
DATA r_seti TYPE REF TO cl_rsmds_set.
DATA r_set TYPE REF TO cl_rsmds_set.
DATA incl_null TYPE rsmds_boolean.
DATA r_set0 TYPE REF TO cl_rsmds_set.
DATA rx_message TYPE REF TO cx_rsmds_message.
DEFINE start_timer.
get time stamp field time_start.
END-OF-DEFINITION.
DEFINE stop_timer.
get time stamp field time_stop.
perform calculate_rate
using time_start time_stop dbcnt
changing &2.
check &1 = &1.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form calculate_rate
*&---------------------------------------------------------------------*
FORM calculate_rate
USING
i_time_start LIKE time_start
i_time_stop LIKE time_stop
i_records TYPE i
CHANGING
e_rate LIKE rate.
DATA:
l_date_start TYPE d,
l_date_stop TYPE d,
l_time_start TYPE t,
l_time_stop TYPE t.
CONSTANTS:
c_tzone_utc TYPE timezone VALUE IS INITIAL.
IF i_time_start LT i_time_stop.
CONVERT TIME STAMP i_time_start TIME ZONE c_tzone_utc
INTO DATE l_date_start TIME l_time_start.
CONVERT TIME STAMP i_time_stop TIME ZONE c_tzone_utc
INTO DATE l_date_stop TIME l_time_stop.
TRY.
e_rate = i_records /
( ( l_date_stop * 86400 + l_time_stop + frac( i_time_stop ) ) -
( l_date_start * 86400 + l_time_start + frac( i_time_start ) ) ).
CATCH cx_sy_arithmetic_overflow.
CLEAR e_rate.
ENDTRY.
ELSE.
CLEAR e_rate.
ENDIF.
ENDFORM. "calculate_rate
START-OF-SELECTION.
start_timer.
r_universe = cl_rsmds_ddic_universe=>create_by_tabname( 'VBAK' ).
* Get references of dimensions from the dimension model by name
r_dim0 = r_universe->get_dimension_by_name( 'MANDT' ).
r_dim1 = r_universe->get_dimension_by_name( 'KUNNR' ).
r_dim2 = r_universe->get_dimension_by_name( 'ERDAT' ).
r_dim3 = r_universe->get_dimension_by_name( 'VDATU' ).
r_renderer = cl_rsmds_native_sql_renderer=>get_condition_renderer( ).
r_set0 = r_dim0->create_set_from_value( sy-mandt ).
r_seti = cl_rsmds_set=>get_universal_set( ).
TRY.
r_set = r_dim1->create_set_from_ranges(
i_t_ranges = so_kunnr[]
i_final = rsmds_c_boolean-true
i_accept_general_patterns = acc_gen_cp ).
CATCH cx_rsmds_input_invalid INTO rx_message.
MESSAGE rx_message TYPE 'I'.
LEAVE PROGRAM.
ENDTRY.
r_seti = r_seti->intersect( r_set ).
TRY.
r_set = r_dim2->create_set_from_ranges(
i_t_ranges = so_erdat[]
i_final = rsmds_c_boolean-true
i_accept_general_patterns = acc_gen_cp ).
CATCH cx_rsmds_input_invalid INTO rx_message.
MESSAGE rx_message TYPE 'I'.
LEAVE PROGRAM.
ENDTRY.
r_seti = r_seti->intersect( r_set ).
TRY.
r_set = r_dim3->create_set_from_ranges(
i_t_ranges = so_vdatu[]
i_final = rsmds_c_boolean-true
i_accept_general_patterns = acc_gen_cp ).
CATCH cx_rsmds_input_invalid INTO rx_message.
MESSAGE rx_message TYPE 'I'.
LEAVE PROGRAM.
ENDTRY.
r_seti = r_seti->intersect( r_set ).
l_string = r_seti->to_string(
i_r_renderer = r_renderer
i_include_null_conditions = incl_null ).
GET REFERENCE OF lt_result INTO lf_result.
SELECT SINGLE * FROM dbcon INTO ls_dbcon
WHERE con_name = pa_con
AND dbms = 'HDB'. "HANA
IF sy-subrc NE 0.
MESSAGE 'Invalid DB Con ID' TYPE 'E'.
ENDIF.
l_sql_con = cl_sql_connection=>get_connection( pa_con ).
CREATE OBJECT l_sql
EXPORTING
con_ref = l_sql_con.
l_sql->execute_ddl( |set schema { 'XXX' }| ). "Please substitue your Schema Name
IF l_string IS NOT INITIAL.
l_statement = |select vbeln from "VBAK" where mandt = '800' and |.
CONCATENATE l_statement l_string INTO l_statement.
ELSE.
l_statement = |select vbeln from "VBAK" where mandt = '800' |.
ENDIF.
TRY.
l_result = l_sql->execute_query( l_statement ).
l_result->set_param_table( lf_result ).
l_result->next_package( ).
l_result->close( ).
CATCH cx_sql_exception.
MESSAGE 'Call to HANA System Failed' TYPE 'E'.
ENDTRY.
dbcnt = lines( lt_result ).
stop_timer dbcnt rate.
WRITE: / 'ABAP (HANA DB) : SY-DBCNT =', dbcnt, 'RATE =', rate, '1/S'.
Regards,
Arun Sambargi