HANA CalculationEngine CalculationScenarios
HANA CalculationEngine CalculationScenarios
HANA CalculationEngine CalculationScenarios
/*
[NAME]
- HANA_CalculationEngine_CalculationScenarios
[DESCRIPTION]
[SOURCE]
[VALID FOR]
- Revisions: all
[INVOLVED TABLES]
- M_CE_CALCSCENARIOS_OVERVIEW
[INPUT PARAMETERS]
- BEGIN_TIME
Begin time
'2018/12/05 14:05:00' --> Set begin time to 5th of December 2018, 14:05
'C' --> Set begin time to current time
'C-S900' --> Set begin time to current time minus 900 seconds
'C-M15' --> Set begin time to current time minus 15 minutes
'C-H5' --> Set begin time to current time minus 5 hours
'C-D1' --> Set begin time to current time minus 1 day
'C-W4' --> Set begin time to current time minus 4 weeks
'E-S900' --> Set begin time to end time minus 900 seconds
'E-M15' --> Set begin time to end time minus 15 minutes
'E-H5' --> Set begin time to end time minus 5 hours
'E-D1' --> Set begin time to end time minus 1 day
'E-W4' --> Set begin time to end time minus 4 weeks
'MIN' --> Set begin time to minimum (1000/01/01 00:00:00)
- END_TIME
End time
'2018/12/08 14:05:00' --> Set end time to 8th of December 2018, 14:05
'C' --> Set end time to current time
'C-S900' --> Set end time to current time minus 900 seconds
'C-M15' --> Set end time to current time minus 15 minutes
'C-H5' --> Set end time to current time minus 5 hours
'C-D1' --> Set end time to current time minus 1 day
'C-W4' --> Set end time to current time minus 4 weeks
'B+S900' --> Set end time to begin time plus 900 seconds
'B+M15' --> Set end time to begin time plus 15 minutes
'B+H5' --> Set end time to begin time plus 5 hours
'B+D1' --> Set end time to begin time plus 1 day
'B+W4' --> Set end time to begin time plus 4 weeks
'MAX' --> Set end time to maximum (9999/12/31 23:59:59)
- TIMEZONE
- HOST
Host name
- PORT
Port number
- SERVICE_NAME
Service name
- COMPONENT
- SCENARIO_NAME
- ONLY_PERSISTENT_SCENARIOS
- AGGREGATE_BY
- ORDER_BY
[OUTPUT PARAMETERS]
[EXAMPLE OUTPUT]
-----------------------------------------------------------------------------------
---------------------------
|CREATION_TIME |HOST |PORT |COMPONENT|SCENARIO_NAME
|P|SIZE_MB |SIZE_PCT|
-----------------------------------------------------------------------------------
---------------------------
|2015/09/12 15:11:01|saphana1|30003|BW |SAPBWP:0BW:BIA:ZOCNNM14
|X| 16.81| 10.49|
|2015/09/12 15:08:10|saphana1|30003|BW |SAPBWP:0BW:BIA:ZOCNNM55
|X| 9.66| 6.03|
|2015/09/12 15:05:58|saphana1|30003|BW |SAPBWP:0BW:BIA:ZMINNM03
|X| 8.72| 5.44|
|2015/09/12 15:06:14|saphana1|30003|BW |SAPBWP:0BW:BIA:ZSCNNM12
|X| 8.11| 5.06|
|2015/09/12 15:06:30|saphana1|30003|BW |SAPBWP:0BW:BIA:ZAFZZM01
|X| 7.33| 4.57|
|2015/09/12 15:06:02|saphana1|30003|BW |SAPBWP:0BW:BIA:ZSCNNM56
|X| 6.33| 3.95|
|2015/09/12 15:05:59|saphana1|30003|BW |SAPBWP:0BW:BIA:0ASA_MP01
|X| 6.13| 3.82|
|2015/09/12 15:06:09|saphana1|30003|BW |SAPBWP:0BW:BIA:ZRRNNM13
|X| 4.40| 2.74|
|2015/09/12 15:06:59|saphana1|30003|BW |SAPBWP:0BW:BIA:ZOCNNM06
|X| 4.38| 2.73|
|2015/09/12 15:12:13|saphana1|30003|BW |SAPBWP:0BW:BIA:ZSCNNM50
|X| 4.37| 2.73|
|2015/09/12 15:06:05|saphana1|30003|BW |SAPBWP:0BW:BIA:ZSCNNM03
|X| 3.55| 2.21|
-----------------------------------------------------------------------------------
---------------------------
*/
CREATION_TIME,
HOST,
PORT,
SERVICE_NAME SERVICE,
COMPONENT,
SCENARIO_NAME,
MAP(PERSISTENT, 'TRUE', 'X', '') P,
LPAD(SCENARIOS, 9) SCENARIOS,
LPAD(TO_DECIMAL(SIZE_MB, 10, 2), 8) SIZE_MB,
LPAD(TO_DECIMAL(MAP(SIZE_MB, 0, 0, SIZE_MB / SUM(SIZE_MB) OVER () * 100), 10, 2),
8) SIZE_PCT
FROM
( SELECT
CASE WHEN BI.AGGREGATE_BY = 'NONE'
THEN TO_VARCHAR(CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(CS.CREATE_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE CS.CREATE_TIME
END, 'YYYY/MM/DD HH24:MI:SS') ELSE 'any'
END CREATION_TIME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'HOST') != 0
THEN CS.HOST ELSE MAP(BI.HOST, '%', 'any', BI.HOST)
END HOST,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'PORT') != 0
THEN TO_VARCHAR(CS.PORT) ELSE MAP(BI.PORT, '%', 'any', BI.PORT)
END PORT,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SERVICE') != 0
THEN S.SERVICE_NAME ELSE MAP(BI.SERVICE_NAME, '%', 'any',
BI.SERVICE_NAME) END SERVICE_NAME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'COMPONENT') != 0
THEN CS.COMPONENT ELSE MAP(BI.COMPONENT, '%', 'any', BI.COMPONENT)
END COMPONENT,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SCENARIO') != 0
THEN CS.SCENARIO_NAME ELSE MAP(BI.SCENARIO_NAME, '%', 'any',
BI.SCENARIO_NAME) END SCENARIO_NAME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'PERSISTENT') != 0
THEN CS.IS_PERSISTENT ELSE MAP(BI.ONLY_PERSISTENT_SCENARIOS, 'X', 'TRUE',
'any') END PERSISTENT,
COUNT(*) SCENARIOS,
SUM(CS.MEMORY_SIZE / 1024 / 1024) SIZE_MB,
BI.ORDER_BY
FROM
( SELECT
CASE
WHEN BEGIN_TIME = 'C' THEN CURRENT_TIMESTAMP
WHEN BEGIN_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-S'))
WHEN BEGIN_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-M') * 60)
WHEN BEGIN_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-H') * 3600)
WHEN BEGIN_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-D') * 86400)
WHEN BEGIN_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-W') * 86400 * 7)
WHEN BEGIN_TIME LIKE 'E-S%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'), -
SUBSTR_AFTER(BEGIN_TIME, 'E-S'))
WHEN BEGIN_TIME LIKE 'E-M%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'), -
SUBSTR_AFTER(BEGIN_TIME, 'E-M') * 60)
WHEN BEGIN_TIME LIKE 'E-H%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'), -
SUBSTR_AFTER(BEGIN_TIME, 'E-H') * 3600)
WHEN BEGIN_TIME LIKE 'E-D%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'), -
SUBSTR_AFTER(BEGIN_TIME, 'E-D') * 86400)
WHEN BEGIN_TIME LIKE 'E-W%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'), -
SUBSTR_AFTER(BEGIN_TIME, 'E-W') * 86400 * 7)
WHEN BEGIN_TIME = 'MIN' THEN
TO_TIMESTAMP('1000/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(BEGIN_TIME, 1, 1) NOT IN ('C', 'E', 'M') THEN
TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS')
END BEGIN_TIME,
CASE
WHEN END_TIME = 'C' THEN CURRENT_TIMESTAMP
WHEN END_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-S'))
WHEN END_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-M') * 60)
WHEN END_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-H') * 3600)
WHEN END_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-D') * 86400)
WHEN END_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-W') * 86400 * 7)
WHEN END_TIME LIKE 'B+S%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+S'))
WHEN END_TIME LIKE 'B+M%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+M') * 60)
WHEN END_TIME LIKE 'B+H%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+H') * 3600)
WHEN END_TIME LIKE 'B+D%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+D') * 86400)
WHEN END_TIME LIKE 'B+W%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+W') * 86400 * 7)
WHEN END_TIME = 'MAX' THEN
TO_TIMESTAMP('9999/12/31 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(END_TIME, 1, 1) NOT IN ('C', 'B', 'M') THEN
TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS')
END END_TIME,
TIMEZONE,
HOST,
PORT,
SERVICE_NAME,
COMPONENT,
SCENARIO_NAME,
ONLY_PERSISTENT_SCENARIOS,
AGGREGATE_BY,
ORDER_BY
FROM
( SELECT /* Modification section */
'1000/10/18 07:58:00' BEGIN_TIME, /* YYYY/MM/DD HH24:MI:SS
timestamp, C, C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-W<weeks>, E-
S<seconds>, E-M<minutes>, E-H<hours>, E-D<days>, E-W<weeks>, MIN */
'9999/10/18 08:05:00' END_TIME, /* YYYY/MM/DD HH24:MI:SS
timestamp, C, C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-W<weeks>,
B+S<seconds>, B+M<minutes>, B+H<hours>, B+D<days>, B+W<weeks>, MAX */
'SERVER' TIMEZONE, /* SERVER, UTC */
'%' HOST,
'%' PORT,
'%' SERVICE_NAME,
'%' COMPONENT,
'%' SCENARIO_NAME,
'X' ONLY_PERSISTENT_SCENARIOS,
'HOST, PORT' AGGREGATE_BY, /* HOST, PORT, SERVICE, COMPONENT, SCENARIO,
PERSISTENT or comma separated combinations, NONE for no aggregation */
'SIZE' ORDER_BY /* TIME, NAME, SIZE */
FROM
DUMMY
)
) BI,
M_SERVICES S,
M_CE_CALCSCENARIOS_OVERVIEW CS
WHERE
S.HOST LIKE BI.HOST AND
TO_VARCHAR(S.PORT) LIKE BI.PORT AND
S.SERVICE_NAME LIKE BI.SERVICE_NAME AND
CS.HOST = S.HOST AND
CS.PORT = S.PORT AND
CS.COMPONENT LIKE BI.COMPONENT AND
CS.SCENARIO_NAME LIKE BI.SCENARIO_NAME AND
CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(CS.CREATE_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE CS.CREATE_TIME END
BETWEEN BI.BEGIN_TIME AND BI.END_TIME AND
( BI.ONLY_PERSISTENT_SCENARIOS = ' ' OR CS.IS_PERSISTENT = 'TRUE' )
GROUP BY
CASE WHEN BI.AGGREGATE_BY = 'NONE'
THEN TO_VARCHAR(CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(CS.CREATE_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE CS.CREATE_TIME
END, 'YYYY/MM/DD HH24:MI:SS') ELSE 'any'
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'HOST') != 0
THEN CS.HOST ELSE MAP(BI.HOST, '%', 'any', BI.HOST)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'PORT') != 0
THEN TO_VARCHAR(CS.PORT) ELSE MAP(BI.PORT, '%', 'any', BI.PORT)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SERVICE') != 0
THEN S.SERVICE_NAME ELSE MAP(BI.SERVICE_NAME, '%', 'any',
BI.SERVICE_NAME) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'COMPONENT') != 0
THEN CS.COMPONENT ELSE MAP(BI.COMPONENT, '%', 'any', BI.COMPONENT)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SCENARIO') != 0
THEN CS.SCENARIO_NAME ELSE MAP(BI.SCENARIO_NAME, '%', 'any',
BI.SCENARIO_NAME) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'PERSISTENT') != 0
THEN CS.IS_PERSISTENT ELSE MAP(BI.ONLY_PERSISTENT_SCENARIOS, 'X', 'TRUE',
'any') END,
BI.ORDER_BY
)
ORDER BY
MAP(ORDER_BY, 'TIME', CREATION_TIME) DESC,
MAP(ORDER_BY, 'SIZE', SIZE_MB) DESC,
MAP(ORDER_BY, 'NAME', SCENARIO_NAME)