REPORT ZSSTAT20.
***********************************************************************
* *
* This program displays the percentage of dialog steps ran under *
* 1 second for the two peak business hours (the two contiguous one *
* hour periods whose sum of dialog steps is the largest for all *
* such periods of the day. *
* The list displys the data by day between and including the start *
* and end date specified on the input screen. *
* The percentage is an accumulated value for the servers determined *
* on the selection screen. *
* *
***********************************************************************
TABLES: SAPWLACCTP.
PARAMETERS: STARTDAT LIKE SAPWLACCTP-STARTDATE DEFAULT SY-DATUM.
PARAMETERS: ENDDATE LIKE SAPWLACCTP-STARTDATE DEFAULT SY-DATUM.
SELECT-OPTIONS HOST FOR SAPWLACCTP-HOSTID.
DATA: PERIODTYPE LIKE SAPWLACCTP-PERIODTYPE VALUE 'D',
HOSTID LIKE SAPWLACCTP-HOSTID,
DAY(9), NDAY TYPE I, INDX LIKE SY-TABIX.
DATA: BEGIN OF WEEK OCCURS 7,
DAY(9),
END OF WEEK.
DATA: BEGIN OF TASKTYPE_STATISTIC OCCURS 50.
INCLUDE STRUCTURE SAPWLTSKTI.
DATA: END OF TASKTYPE_STATISTIC.
DATA: BEGIN OF TASKTYPE_SUM OCCURS 50,
TIME LIKE SAPWLTSKTI-TIME,
COUNT LIKE SAPWLTSKTI-COUNT,
CSUM LIKE SAPWLTSKTI-COUNT,
CNT001 LIKE SAPWLRTDIS-CNT001,
CNT002 LIKE SAPWLRTDIS-CNT001,
CNT003 LIKE SAPWLRTDIS-CNT001,
CNT004 LIKE SAPWLRTDIS-CNT001,
CNT005 LIKE SAPWLRTDIS-CNT001,
CNT006 LIKE SAPWLRTDIS-CNT001,
CNT007 LIKE SAPWLRTDIS-CNT001,
CNT008 LIKE SAPWLRTDIS-CNT001,
CNT009 LIKE SAPWLRTDIS-CNT001,
END OF TASKTYPE_SUM.
DATA: SUM TYPE P DECIMALS 1, ISUM LIKE SAPWLTSKTI-COUNT,
KEY1 LIKE TASKTYPE_SUM-TIME, KEY2 LIKE TASKTYPE_SUM-TIME.
* Fill the week table
WEEK-DAY = 'Monday'. APPEND WEEK.
WEEK-DAY = 'Tuesday'. APPEND WEEK.
WEEK-DAY = 'Wednesday'. APPEND WEEK.
WEEK-DAY = 'Thursday'. APPEND WEEK.
WEEK-DAY = 'Friday'. APPEND WEEK.
WEEK-DAY = 'Saturday'. APPEND WEEK.
WEEK-DAY = 'Sunday'. APPEND WEEK.
* Display the selected servers and the list header
SKIP.
WRITE: / 'Accumulated data for servers:'.
LOOP AT HOST.
WRITE: HOST-LOW.
ENDLOOP.
SKIP 3.
WRITE: /5 'Day-Date' COLOR 2, 28 'Time' COLOR 2,
38 'Dialogue Steps' COLOR 2, 58 '% of Response <1s' COLOR 2.
* Loop on the days and collect the dialog step/response time data
WHILE ENDDATE >= STARTDAT.
NDAY = STARTDAT MOD 7.
IF NDAY > 1.
NDAY = NDAY - 1.
ELSE.
NDAY = NDAY + 6.
ENDIF.
READ TABLE WEEK INDEX NDAY.
CLEAR TASKTYPE_SUM.
REFRESH TASKTYPE_SUM.
LOOP AT HOST.
HOSTID = HOST-LOW.
PERFORM CALCULATE.
ENDLOOP.
SKIP.
* Determine and display the total number of dialog steps per day
CLEAR ISUM.
LOOP AT TASKTYPE_SUM.
ISUM = ISUM + TASKTYPE_SUM-COUNT.
ENDLOOP.
WRITE: / STARTDAT, WEEK-DAY, 28 '*Total*', 38 ISUM.
* Delete the long night periods
LOOP AT TASKTYPE_SUM.
IF TASKTYPE_SUM-TIME CS '00--06'. DELETE TASKTYPE_SUM. ENDIF.
IF TASKTYPE_SUM-TIME CS '21--24'. DELETE TASKTYPE_SUM. ENDIF.
ENDLOOP.
* Find the two periods of the day with the most dialog steps
* sort tasktype_sum by count descending.
* loop at tasktype_sum.
* if sy-tabix > 2. delete tasktype_sum. endif.
* endloop.
*
* Find the two continuous periods of the day with the most dialog steps
LOOP AT TASKTYPE_SUM.
IF SY-TABIX = 1.
ISUM = TASKTYPE_SUM-COUNT.
CONTINUE.
ELSE.
TASKTYPE_SUM-CSUM = ISUM + TASKTYPE_SUM-COUNT.
MODIFY TASKTYPE_SUM.
ISUM = TASKTYPE_SUM-COUNT.
ENDIF.
ENDLOOP.
SORT TASKTYPE_SUM BY CSUM DESCENDING.
READ TABLE TASKTYPE_SUM INDEX 1.
KEY1 = TASKTYPE_SUM-TIME.
SORT TASKTYPE_SUM BY TIME.
READ TABLE TASKTYPE_SUM WITH KEY TIME = KEY1.
INDX = SY-TABIX - 1.
READ TABLE TASKTYPE_SUM INDEX INDX.
KEY2 = TASKTYPE_SUM-TIME.
LOOP AT TASKTYPE_SUM.
IF TASKTYPE_SUM-TIME <> KEY1 AND TASKTYPE_SUM-TIME <> KEY2.
DELETE TASKTYPE_SUM.
ENDIF.
ENDLOOP.
* Display the two periods of the day with the most dialog steps
LOOP AT TASKTYPE_SUM.
SUM = TASKTYPE_SUM-CNT001 + TASKTYPE_SUM-CNT002 +
TASKTYPE_SUM-CNT003 + TASKTYPE_SUM-CNT004 +
TASKTYPE_SUM-CNT005 + TASKTYPE_SUM-CNT006.
SUM = SUM * 100.
SUM = SUM / TASKTYPE_SUM-COUNT.
IF SUM < 90.
WRITE: /28 TASKTYPE_SUM-TIME,
38 TASKTYPE_SUM-COUNT, 62(5) SUM COLOR 3.
ELSE.
WRITE: /28 TASKTYPE_SUM-TIME,
38 TASKTYPE_SUM-COUNT, 62(5) SUM.
ENDIF.
ENDLOOP.
STARTDAT = STARTDAT + 1.
ENDWHILE.
*---------------------------------------------------------------------*
* FORM CALCULATE *
*---------------------------------------------------------------------*
* Collect the statistics data *
*---------------------------------------------------------------------*
FORM CALCULATE.
CLEAR TASKTYPE_STATISTIC.
REFRESH TASKTYPE_STATISTIC.
CALL FUNCTION 'SAPWL_WORKLOAD_GET_STATISTIC'
EXPORTING
PERIODTYPE = PERIODTYPE
HOSTID = HOSTID
STARTDATE = STARTDAT
TABLES
TASKTYPE_STATISTIC = TASKTYPE_STATISTIC
EXCEPTIONS
NO_DATA_FOUND = 1.
LOOP AT TASKTYPE_STATISTIC.
CLEAR TASKTYPE_SUM.
IF TASKTYPE_STATISTIC-TASKTYPE = 'DIALOG'.
MOVE-CORRESPONDING TASKTYPE_STATISTIC TO TASKTYPE_SUM.
COLLECT TASKTYPE_SUM.
ENDIF.
ENDLOOP.
ENDFORM.