KPI-module verder inrichten

svn path=/Customer/trunk/; revision=28376
This commit is contained in:
Peter Koerhuis
2016-03-07 11:05:37 +00:00
parent de071c2b50
commit a3aa5f2c81

View File

@@ -3426,6 +3426,356 @@ CREATE OR REPLACE VIEW demo_v_rap_kpi_definitie
AS
SELECT * FROM kpi_definitie;
----- Views voor berekenen KPI's -----------------------------------------------
-- Views voor berekening (genormeerde) KPI-scores o.b.v. handmatig/automatisch ingevulde KPI-meldingen.
-- E<>n view per melding. Nummering is gelijk aan die van de de standaardmeldingen.
-- mld_stdmelding Budget en Kosten 1542 A
-- mld_kenmerk Catering^
-- mld_kenmerk Werkelijke kosten 2319 A
-- mld_kenmerk Extra kosten 2295 A
-- mld_kenmerk Receptie^
-- mld_kenmerk Werkelijke kosten 2320 A
-- mld_kenmerk Extra kosten 2296 A
-- mld_kenmerk Schoonmaak^
-- mld_kenmerk Werkelijke kosten 2321 A
-- mld_kenmerk Extra kosten 2297 A
-- mld_kenmerk Documentmanagement^
-- mld_kenmerk Werkelijke kosten 2322 A
-- mld_kenmerk Extra kosten 2298 A
CREATE OR REPLACE VIEW demo_v_kpi1
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CK1','RK11','RK12','SK23','SK25','DK33')),
kosten AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
(cat_kost + cat_extra) / cat_kost cat_score,
(rec_kost + rec_extra) / rec_kost rec_score,
(sch_kost + sch_extra) / sch_kost sch_score,
(doc_kost + doc_extra) / doc_kost doc_score,
rec_extra / (rec_kost + rec_extra) rec_onvoorz_score,
sch_extra / (sch_kost + sch_extra) sch_regie_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(cat_kost.mld_kenmerkmelding_waarde) cat_kost,
fac.safe_to_number(cat_extra.mld_kenmerkmelding_waarde) cat_extra,
fac.safe_to_number(rec_kost.mld_kenmerkmelding_waarde) rec_kost,
fac.safe_to_number(rec_extra.mld_kenmerkmelding_waarde) rec_extra,
fac.safe_to_number(sch_kost.mld_kenmerkmelding_waarde) sch_kost,
fac.safe_to_number(sch_extra.mld_kenmerkmelding_waarde) sch_extra,
fac.safe_to_number(doc_kost.mld_kenmerkmelding_waarde) doc_kost,
fac.safe_to_number(doc_extra.mld_kenmerkmelding_waarde) doc_extra
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2319) cat_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2295) cat_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2320) rec_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2296) rec_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2321) sch_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2297) sch_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2322) doc_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2298) doc_extra,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1542
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND cat_kost.mld_melding_key = m.mld_melding_key
AND cat_extra.mld_melding_key(+) = m.mld_melding_key
AND rec_kost.mld_melding_key = m.mld_melding_key
AND rec_extra.mld_melding_key(+) = m.mld_melding_key
AND sch_kost.mld_melding_key = m.mld_melding_key
AND sch_extra.mld_melding_key(+) = m.mld_melding_key
AND doc_kost.mld_melding_key = m.mld_melding_key
AND doc_extra.mld_melding_key(+) = m.mld_melding_key) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
DECODE(SUBSTR(n.kpi_code, 1, 1),
'R', 'Receptie',
'S', 'Schoonmaak',
'D', 'Documentmanagement',
'C', 'Catering') proces,
'Kosten' onderdeel,
DECODE(n.kpi_code,
'CK1', cat_score,
'RK11', rec_score,
'RK12', rec_onvoorz_score,
'SK23', sch_regie_score,
'SK25', sch_score,
'DK33', doc_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, kosten k) m
;
-- mld_stdmelding Audit Catering 1541
-- mld_kenmerk Wachttijden bij kassa^
-- mld_kenmerk Tijdstip1
-- mld_kenmerk Aantal bezoekers 2281 A
-- mld_kenmerk Aantal op tijd 2285 A
-- mld_kenmerk Tijdstip2
-- mld_kenmerk Aantal bezoekers 2282 A
-- mld_kenmerk Aantal op tijd 2286 A
-- mld_kenmerk Tijdstip3
-- mld_kenmerk Aantal bezoekers 2283 A
-- mld_kenmerk Aantal op tijd 2287 A
-- mld_kenmerk Opmerking
-- mld_kenmerk Assortimentsaanbod^
-- mld_kenmerk Aantal producten assortiment 2289 A
-- mld_kenmerk Aantal producten aanwezig 2288 A
-- mld_kenmerk Opmerking
-- mld_kenmerk HACCP controle^
-- mld_kenmerk Totaal aantal HACCP punten 2317 A
-- mld_kenmerk Aantal goede HACCP punten 2284 A
CREATE OR REPLACE VIEW demo_v_kpi2
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CK2', 'CK3', 'CK4')),
audits AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
(tijdig1 + tijdig2 + tijdig3) / (num_bez1 + num_bez2 + num_bez3) wachttijd_score,
aanw_prod / num_prod assortiment_score,
goed_haccp / num_haccp haccp_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(num_bez1.mld_kenmerkmelding_waarde) num_bez1,
fac.safe_to_number(tijdig1.mld_kenmerkmelding_waarde) tijdig1,
fac.safe_to_number(num_bez2.mld_kenmerkmelding_waarde) num_bez2,
fac.safe_to_number(tijdig2.mld_kenmerkmelding_waarde) tijdig2,
fac.safe_to_number(num_bez3.mld_kenmerkmelding_waarde) num_bez3,
fac.safe_to_number(tijdig3.mld_kenmerkmelding_waarde) tijdig3,
fac.safe_to_number(num_prod.mld_kenmerkmelding_waarde) num_prod,
fac.safe_to_number(aanw_prod.mld_kenmerkmelding_waarde) aanw_prod,
fac.safe_to_number(num_haccp.mld_kenmerkmelding_waarde) num_haccp,
fac.safe_to_number(goed_haccp.mld_kenmerkmelding_waarde) goed_haccp
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2281) num_bez1,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2285) tijdig1,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2282) num_bez2,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2286) tijdig2,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2283) num_bez3,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2287) tijdig3,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2289) num_prod,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2288) aanw_prod,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2317) num_haccp,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2284) goed_haccp,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1541
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND num_bez1.mld_melding_key(+) = m.mld_melding_key
AND tijdig1.mld_melding_key(+) = m.mld_melding_key
AND num_bez2.mld_melding_key(+) = m.mld_melding_key
AND tijdig2.mld_melding_key(+) = m.mld_melding_key
AND num_bez3.mld_melding_key(+) = m.mld_melding_key
AND tijdig3.mld_melding_key(+) = m.mld_melding_key
AND num_prod.mld_melding_key(+) = m.mld_melding_key
AND aanw_prod.mld_melding_key(+) = m.mld_melding_key
AND num_haccp.mld_melding_key(+) = m.mld_melding_key
AND goed_haccp.mld_melding_key(+) = m.mld_melding_key) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
'Catering' proces,
'Kwaliteit' onderdeel,
DECODE(n.kpi_code,
'CK2', wachttijd_score,
'CK3', assortiment_score,
'CK4', haccp_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, audits k) m
;
-- mld_stdmelding KTO Receptie 1544 A
-- mld_srtkenmerk Cijfer 2647 A
-- mld_srtkenmerk Opmerking
-- TODO: divide-by-zero voorkomen
CREATE OR REPLACE VIEW demo_v_kpi3
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('RT19')), --('CT6','RT19','RT20','ST30','DT40')),
kto AS
(SELECT MIN(mld_melding_key) mld_melding_key,
alg_locatie_key,
periode,
mld_stdmelding_key, SUM(cijfer) / COUNT(*) avg_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
m.mld_stdmelding_key,
fac.safe_to_number(cijfer.mld_kenmerkmelding_waarde) cijfer
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL
AND mld_kenmerk_key IN (SELECT mld_kenmerk_key FROM mld_kenmerk
WHERE mld_kenmerk_verwijder IS NULL
AND mld_srtkenmerk_key = 2647) ) cijfer,
alg_locatie dloc,
fac_usrdata dperiode
WHERE m.mld_stdmelding_key IN (1544)
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND cijfer.mld_melding_key = m.mld_melding_key)
GROUP BY alg_locatie_key, periode, mld_stdmelding_key)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
DECODE(SUBSTR(n.kpi_code, 1, 1),
'R', 'Receptie',
'S', 'Schoonmaak',
'D', 'Documentmanagement',
'C', 'Catering') proces,
'Tevredenheid' onderdeel,
avg_score score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, kto k
WHERE k.mld_stdmelding_key = DECODE(n.kpi_code,
'RT19', 1544)) m
;
-- mld_stdmelding Duurzaamheid en derving Catering 1543
-- mld_kenmerk Gebruik biologische producten^
-- mld_kenmerk Percentage Biologisch 2310 A
-- mld_kenmerk Opmerking
-- mld_kenmerk Derving^
-- mld_kenmerk Percentage derving 2311 A
-- mld_kenmerk Opmerking
CREATE OR REPLACE VIEW demo_v_kpi4
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CD7', 'CD8')),
audits AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
perc_bio / 100 bio_score,
perc_derv / 100 derving_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(perc_bio.mld_kenmerkmelding_waarde) perc_bio,
fac.safe_to_number(perc_derv.mld_kenmerkmelding_waarde) perc_derv
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2310) perc_bio,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2311) perc_derv,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1543
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND perc_bio.mld_melding_key(+) = m.mld_melding_key
AND perc_derv.mld_melding_key(+) = m.mld_melding_key ) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
'Catering' proces,
'Duurzaamheid' onderdeel,
DECODE(n.kpi_code,
'CD7', bio_score,
'CD8', derving_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, audits k) m
;
CREATE OR REPLACE VIEW demo_v_kpi_all
AS
SELECT * FROM demo_v_kpi1
UNION ALL
SELECT * FROM demo_v_kpi2
UNION ALL
SELECT * FROM demo_v_kpi3
UNION ALL
SELECT * FROM demo_v_kpi4;
CREATE OR REPLACE PACKAGE demo
AS
PROCEDURE refreshscore(pUserKey IN NUMBER);
@@ -3437,7 +3787,27 @@ AS
PROCEDURE refreshscore(pUserKey IN NUMBER)
AS
BEGIN
NULL;
-- Waarden van de huidige periode(s) verwijderen.
-- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een
-- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt
DELETE kpi_score
WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN (
SELECT DISTINCT kpi_definitie_key, kpi_score_datum, alg_locatie_key
FROM demo_v_kpi_all);
-- Opnieuw genereren van KPI scores
INSERT INTO kpi_score (
kpi_definitie_key,
kpi_score_datum,
alg_locatie_key,
kpi_score_xmlnode,
kpi_score_refkey,
kpi_score_score,
kpi_score_norm_score,
kpi_score_drempels)
SELECT * FROM demo_v_kpi_all;
COMMIT;
END;
END;
/
@@ -3445,7 +3815,7 @@ END;
BEGIN adm.systrackscriptId('$Id$'); END;
/
BEGIN fac.registercustversion('DEMO', 4); END;
BEGIN fac.registercustversion('DEMO', 5); END;
/
COMMIT;