From a3aa5f2c81cb0ed4cf581265e81f51baa8f2a8a1 Mon Sep 17 00:00:00 2001 From: Peter Koerhuis Date: Mon, 7 Mar 2016 11:05:37 +0000 Subject: [PATCH] KPI-module verder inrichten svn path=/Customer/trunk/; revision=28376 --- DEMO/demo.sql | 374 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 372 insertions(+), 2 deletions(-) diff --git a/DEMO/demo.sql b/DEMO/demo.sql index c26fe8576..0971f60eb 100644 --- a/DEMO/demo.sql +++ b/DEMO/demo.sql @@ -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;