2015 © Trivadis BASEL BERN BRUGG LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 2015 © Trivadis Analytische Funktionen.

Slides:



Advertisements
Ähnliche Präsentationen
ER-Datenmodell und Abfragen in SQL
Advertisements

Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Objektorientierung mit VBA
SQL als Abfragesprache
Auswertung im GTDS fixe Abläufe für Standard-Aufgaben Mamma-Auswertung
IS: Datenbanken, © Till Hänisch 2000 Übungen SQL.
Übung Datenbanksysteme SQL-Anfragen (2)
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein
Datenbanken?.
You need to use your mouse to see this presentation © Heidi Behrens.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein
2012 © Trivadis BASEL BERN LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN Welcome November 2012 Highlights BI.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
Datenbanksysteme für hörer anderer Fachrichtungen
Copyright Oracle Corporation, All rights reserved. 6 Unteranfragen (Subqueries)
Einführung in Datenbankmodellierung und SQL
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Aggregatsfunktion SQL = Structured Query Language.
Aggregatsfunktion mit Group by und having SQL = Structured Query Language.
Am Beispiel der Tabelle Crew des Raumschiffes Enterprise
Pilotphase Neustrukturierung GESTERN ENTWICKLUNGEN Immer mehr Stellenprozente für Jugendarbeit Stärkere Konzentration auf die Region.
Verdichten von Daten mit Gruppenfunktionen
Naturwissenschaftlich-technologische Ausbildungsrichtung in der 8., 9. und 10. Jahrgangsstufe.
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
3 Einzelzeilen-Funktionen. 3-2 Ziele Verschiedene Typen von Funktionen, die in SQL verfügbar sind Verwendung von numerischen, Zeichen- und Datumsfunktionen.
2 Auswählen und Sortieren von Daten. 2-2 Filtern von Zeilen mit Selektion "…suche alle Angestellten in Abteilung 10" EMP EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT.
10 Sichten (Views) Ziele Verständnis einer View Erzeugen einer View Lesen von Daten durch eine Sicht Ändern der Definition von Views Einfügen, Ändern.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
Einfache SQL-Befehle Schedule: Timing Topic 40 minutes Lecture
Datenbank für Skriptenverkauf
Datenbanken abfragen mit SQL
Customizing Tools: Genehmigungsverfahren
Customizing Tools: Abfragen
Exotisches SQL Author: Sven Weller.
DOAG Regionaltreffen NRW 10. Juni 2003 TDS Deutschland AG & Co. oHG PIPELINED FUNCTIONS Autor: Karl-Otto Spiecker Vortrag: Bernd Löschner.
Bewerbungs- eingang Bewerbungs- bearbeitung Stellenangebote VermittlungKommunikationZusatzleistungen.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Januar 2011 E-Learning Schulungsunterlage für Bezirksmanager.
PCA Principal Component Analysis. Gliederung PCA – Warum eigentlich? PCA – Was ist zu tun? Was passiert eigentlich? Anwendungen Zusammenfassung.
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
Aachen, | WISS Seminarvortrag von Christian Wißmach Analyse von Zeitreihen.
Herzlich willkommen zur VDW-Jahrespressekonferenz 2012 Frankfurt am Main, 09. Februar 2012.
- Seite 1 TIME INTELLIGENCE ® by Titel.
Abfragen Wiederholung Manuel Friedrich Schiller-Gymnasium Hof.
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Darstellung der Relationenalgebra als Programmiersprache
Vorlesung #6 SQL (Teil 3).
SQL Join.
Wirtschaftsinformatik
Abfragesprache SQL in ORACLE
Abfragesprache SQL in ORACLE
Sichten.
Create Table, Rechte und Rollen
Textmuster.
Left Join, Right Join, Outer Join
Funktionen, GROUP BY, HAVING Views anlegen und verwenden
Stream-Verwaltung mit konventionellen Datenbanksystemen
Oracle Statistiken im HORIZON-Umfeld
Nutzung und Modellierung von Datenbanken
(Structured Query Language)
 Präsentation transkript:

2015 © Trivadis BASEL BERN BRUGG LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 2015 © Trivadis Analytische Funktionen Fortgeschrittene Anwendungen Roger Troller Principal Consultant Trivadis AG Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis AGENDA 1.Gruppenswitches  LAST_VALUE, „Vererbung“ von Werten 2.Ressourcenzuteilung zu einem Projekt  ROW_NUMBER, Running Summaries, Window Definitionen 3.Vorhersagen  Lineare Regression, Geglätteter Mittelwert (Moving Average), Saisonale Bereinigung, Trend Ermittlung, Prognose unter Berücksichtigung saisonaler Schwankungen Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Problemstellung Hallo Trivadis-World War weiss wie ich die folgende Abfrage richtig umsetzen kann: SELECT LOG_ID, analytische_funktion(FLAG) basierend auf LOG_ID FROM tabelle WHERE... Immer wenn ein LOG_ID = 15 wird Flag zu 'E'... und sobald ein LOG_ID = 16 kommt wird Flag wieder zu 'A' Beispiel mit folgenden Daten: 12 A <- implizit A, weil das erste Vorkommen weiter unten eine 15 ist 15 E <- Switch 18 E <- bleibt 16 A <- Switch 05 A <- bleibt 15 E <- Switch 32 E <- bleibt 15 E <- bleibt 16 A <- Switch usw. Danke im voraus für das Feedback... Lieber Gruss ______________________________ Antonio Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Problemstellung  Abhängig von einem Wert einer bestimmten Spalte sollen die nachfolgenden Datensätze einer bestimmten Gruppe zugeordnet werden…  Gruppe „E“ alle Zeilen die einem Datensatz mit Wert „15“ in der Spalte val folgen  Gruppe „A“ alle Zeilen die einem Datensatz mit Wert „16“ in der Spalte val folgen  Führende Zeilen sollen abhängig vom ersten Auftreten von „15“ oder „16“ der anderen Gruppe zugefügt werden…  Oder bildlich: Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Datenbasis SELECT ID, val, switch_result FROM DATA order by id; ID VAL SWITCH_RESULT Gruppe "A"... nächste relevante Zeile enthält Gruppe "A"... nächste relevante Zeile enthält Gruppe "A"... nächste relevante Zeile enthält Wechsel auf Gruppe "E" 5 18 "E" 6 22 "E" 7 16 Wechsel auf Gruppe "A" 8 12 "A" 9 05 "A" Wechsel auf Gruppe "E" "E" Auf Gruppe "E" bleiben "E" Wechsel auf Gruppe "A" Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Feststellen der „Switches“ SELECT ID, val, DECODE(val,'15','E','16','A',NULL) SWITCH, switch_result FROM DATA; ID VAL SWITCH SWITCH_RESULT Gruppe "A"... nächste relevante Zeile enthält Gruppe "A"... nächste relevante Zeile enthält Gruppe "A"... nächste relevante Zeile enthält E Wechsel auf Gruppe "E" 5 18 "E" 6 22 "E" 7 16 A Wechsel auf Gruppe "A" 8 12 "A" 9 05 "A" E Wechsel auf Gruppe "E" "E" E "E" "E" A Wechsel auf Gruppe "A" Analytische Funktionen - Fortgeschrittene Anwendung Und jetzt müssten wir eigentlich nur noch «erben»…von vorhergehenden oder nachfolgenden Zeilen

2015 © Trivadis Wer hat sich schon über LAST_VALUE gewundert? SELECT ENAME, SAL, FIRST_VALUE(SAL) OVER (ORDER BY SAL DESC) AS FIRST_SAL FROM EMP WHERE DEPTNO = 10 / ENAME SAL FIRST_SAL KING CLARK MILLER Analytische Funktionen - Fortgeschrittene Anwendung  Und was bringt LAST_VALUE zurück?

2015 © Trivadis Wer hat sich schon über LAST_VALUE gewundert? SELECT ENAME, SAL, FIRST_VALUE(SAL) OVER (ORDER BY SAL DESC) AS FIRST_SAL, LAST_VALUE(SAL) OVER (ORDER BY SAL DESC) AS LAST_SAL FROM EMP WHERE DEPTNO = 10 / ENAME SAL FIRST_SAL LAST_SAL KING CLARK MILLER Analytische Funktionen - Fortgeschrittene Anwendung  Wieso?  Wie nutzen wir dies?

2015 © Trivadis „Erben“ von oben mit IGNORE NULLS WITH DATA2 AS (SELECT id, val, DECODE(val,'15','E','16','A',NULL) AS switch, switch_result FROM DATA) SELECT id, val, switch, LAST_VALUE(switch IGNORE NULLS) OVER (ORDER BY id) AS switch2 FROM data2 / ID VAL SWITCH SWITCH E E 5 18 E 6 22 E 7 16 A A 8 12 A 9 05 A E E E E E E A A Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis „Erben“ von unten (falls notwendig) und „drehen“ WITH DATA2 AS (SELECT id, val, DECODE(val,'15','E','16','A',NULL) AS switch, switch_result FROM DATA),data3 AS (SELECT id, val, switch, LAST_VALUE(switch IGNORE NULLS) OVER (ORDER BY id) AS switch2 FROM data2) SELECT ID, val, switch, switch2, COALESCE(switch2,DECODE(FIRST_VALUE(switch2 IGNORE NULLS) OVER (ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),'E','A','A','E')) AS switch3 FROM data3 / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis „Erben“ von unten (falls notwendig) und „drehen“ ID VAL SWITCH SWITCH2 SWITCH A 2 03 A 3 12 A 4 15 E E E 5 18 E E 6 22 E E 7 16 A A A 8 12 A A 9 05 A A E E E E E E E E E E A A A Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Fazit  LAST_VALUE ist cool, wenn man es am richtigen Ort einsetzt  IGNORE NULLS kann hilfreich sein  Ist auch in anderen analytischen Funktionen möglich Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis AGENDA 1.Gruppenswitches  LAST_VALUE, „Vererbung“ von Werten 2.Ressourcenzuteilung zu einem Projekt  ROW_NUMBER, Running Summaries, Window Definitionen 3.Vorhersagen  Lineare Regression, Geglätteter Mittelwert (Moving Average), Saisonale Bereinigung, Trend Ermittlung, Prognose unter Berücksichtigung saisonaler Schwankungen Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Mitarbeiter SELECT e.first_name,e.hourly_rate,e.skill,LISTAGG(TO_CHAR(month_year,'MON') || ':' || FLOOR(ea.percentage * 20 / 100),',') WITHIN GROUP (ORDER BY ea.month_year) AS available_days_month FROM employees e INNER JOIN employee_availabilities ea ON (e.first_name = ea.first_name) GROUP BY e.first_name,e.hourly_rate,e.skill / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Mitarbeiter FIRST_NAME HOURLY_RATE SKILL AVAILABLE_DAYS Yu 100 UI Design JAN:16,FEB:16,MAR:0,APR:16,MAY:16,JUN:12 Bob 80 Java JAN:20,FEB:20,MAR:8,APR:20,MAY:20,JUN:20 Liz 60 PL/SQL JAN:12,FEB:12,MAR:12,APR:12,MAY:12,JUN:12 Mia 75 Java JAN:20,FEB:20,MAR:20,APR:20,MAY:20,JUN:20 Bill 150 DBA JAN:8,FEB:8,MAR:8,APR:4,MAY:8,JUN:8 John 140 Java JAN:16,FEB:20,MAR:16,APR:12,MAY:20,JUN:12 Marc 85 PL/SQL JAN:20,FEB:20,MAR:20,APR:0,MAY:0,JUN:0 Mimi 40 PL/SQL JAN:10,FEB:6,MAR:10,APR:10,MAY:10,JUN:10 Fatma 90 PL/SQL JAN:20,FEB:20,MAR:0,APR:0,MAY:10,JUN:16 Jimmy 70 DBA JAN:0,FEB:8,MAR:20,APR:20,MAY:20,JUN:20 Sarah 90 UI Design JAN:0,FEB:0,MAR:8,APR:12,MAY:12,JUN:12 Robert 180 PL/SQL JAN:10,FEB:10,MAR:10,APR:10,MAY:10,JUN:10 12 rows selected Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Projekte SELECT p.project_name,p.start_date,p.end_date,pn.skill,pn.days_needed FROM projects p INNER JOIN project_needs pn ON (pn.project_name = p.project_name) / PROJECT_NAME START_DATE END_DATE SKILL DAYS_NEEDED HR System Java 30 HR System PL/SQL 40 HR System UI Design 20 HR System DBA 20 DWH System Java 10 DWH System PL/SQL 30 DWH System UI Design 30 DWH System DBA Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Ressourcen pro Skill und Monat SELECT e.skill, ea.month_year, e.first_name, e.hourly_rate, ea.percentage * 20 / 100 AS available_days FROM employees e INNER JOIN employee_availabilities ea ON (e.first_name = ea.first_name) where ea.percentage > 0 ORDER BY e.skill,ea.month_year / SKILL MONTH_YEAR FIRST_NAME HOURLY_RATE AVAILABLE_DAYS DBA Bill DBA Bill DBA Jimmy 70 8 DBA Bill DBA Jimmy DBA Bill Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Verknüpfen der Ressourcen mit den Projekten WITH projekte AS (…),mitarbeiter AS (…) SELECT p.project_name, p.skill, p.days_needed, e.first_name, TO_CHAR(e.month_year,'Mon/YYYY') month_year, e.hourly_rate, e.days, SUM(e.days) OVER (PARTITION BY p.project_name, p.skill, e.first_name) AS tot_days FROM mitarbeiter e INNER JOIN projekte p ON ( p.skill = e.skill AND e.month_year BETWEEN p.start_date AND p.end_date) ORDER BY p.skill, p.days_needed, e.first_name, e.month_year / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Verknüpfen der Ressourcen mit den Projekten PROJECT_NAME SKILL DAYS_NEEDED FIRST_NAME MONTH_YEAR HOURLY_RATE DAYS TOT_DAYS HR System DBA 20 Bill Jan/ HR System DBA 20 Bill Feb/ HR System DBA 20 Bill Mar/ HR System DBA 20 Bill Apr/ HR System DBA 20 Jimmy Feb/ HR System DBA 20 Jimmy Mar/ HR System DBA 20 Jimmy Apr/ HR System Java 30 Bob Jan/ HR System Java 30 Bob Feb/ HR System Java 30 Bob Mar/ HR System Java 30 Bob Apr/ HR System Java 30 John Jan/ HR System Java 30 John Feb/ HR System Java 30 John Mar/ HR System Java 30 John Apr/ Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Definition der Zuteilungsreihenfolge  Schnellstmögliche Terminierung  Kostengünstigste Umsetzung  Kleinste Zahl involvierter Projektmitarbeiter  … Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Definition der Zuteilungsreihenfolge WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…) SELECT skill, days_needed, first_name, TO_CHAR(month_year,'Mon/YYYY') month_year, hourly_rate, month_year, days, tot_days, ROW_NUMBER() OVER (PARTITION BY skill ORDER BY month_year, days, hourly_rate, first_name, tot_days) AS pick_order FROM mitproj_verkn / Analytische Funktionen - Fortgeschrittene Anwendung  Projekt wird nicht mehr gezeigt, da ja auf ein einzelnes Projekt (HR System) eingeschränkt wurde…

2015 © Trivadis Definition der Zuteilungsreihenfolge SKILL DAYS_NEEDED FIRST_NAME MONTH_YEAR HOURLY_RATE DAYS TOT_DAYS PICK_ORDER DBA 20 Bill Jan/ DBA 20 Jimmy Feb/ DBA 20 Bill Feb/ DBA 20 Bill Mar/ DBA 20 Jimmy Mar/ DBA 20 Bill Apr/ DBA 20 Jimmy Apr/ Java 30 John Jan/ Java 30 Mia Jan/ Java 30 Bob Jan/ Java 30 Mia Feb/ Java 30 Bob Feb/ Java 30 John Feb/ Java 30 Bob Mar/ Java 30 John Mar/ Java 30 Mia Mar/ Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Ermitteln der kummulierten Ressourcen WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…),zuteilung AS (…) SELECT z.skill,z.first_name,TO_CHAR(z.month_year,'Mon/YYYY') month_year,z.hourly_rate,z.days, z.tot_days,z.pick_order,z.days_needed,NVL(SUM(days) OVER (PARTITION BY z.skill ORDER BY z.pick_order ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0) AS previous_days FROM Zuteilung z / Analytische Funktionen - Fortgeschrittene Anwendung  Zeigt wie viele Tage wir schon konsumiert hätten, wenn wir alle vorhergehenden Picks nutzen würden.  Entscheidungsgrundlage für die Nutzung jeder Ressource

2015 © Trivadis Ermitteln der verfügbaren kummulierten Ressourcen SKILL FIRST_NAME MONTH_YEAR HOURLY_RATE DAYS TOT_DAYS PICK_ORDER DAYS_NEEDED PREVIOUS_DAYS DBA Bill Jan/ DBA Jimmy Feb/ DBA Bill Feb/ DBA Bill Mar/ DBA Jimmy Mar/ DBA Bill Apr/ DBA Jimmy Apr/ Java John Jan/ Java Mia Jan/ Java Bob Jan/ Java Mia Feb/ Java Bob Feb/ Java John Feb/ Java Bob Mar/ Java John Mar/ Java Mia Mar/ … Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Auswahl der Ressourcen WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…),zuteilung AS (…),aufsummiert AS (…) SELECT A.skill, A.first_name, TO_CHAR(A.month_year,'Mon/YYYY') month_year,A.hourly_rate, A.pick_order, A.days, A.days_needed, A.tot_days, A.previous_days,CASE WHEN a.previous_days < a.days_needed THEN LEAST(a.days_needed - a.previous_days,a.days) ELSE 0 END AS days_to_pick FROM aufsummiert a / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Auswahl der Ressourcen SKILL FIRST_NAME MONTH_YEAR HOURLY_RATE PICK_ORDER DAYS DAYS_NEEDED TOT_DAYS PREVIOUS_DAYS DAYS_TO_PICK DBA Bill Jan/ DBA Jimmy Feb/ DBA Bill Feb/ DBA Bill Mar/ DBA Jimmy Mar/ DBA Bill Apr/ DBA Jimmy Apr/ Java John Jan/ Java Mia Jan/ Java Bob Jan/ Java Mia Feb/ Java Bob Feb/ Java John Feb/ Java Bob Mar/ Java John Mar/ Java Mia Mar/ Java John Apr/ Java Mia Apr/ Java Bob Apr/ … Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Ermitteln der personellen Zuteilung inkl. Monat / Anzahl Tage WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…),zuteilung AS (…),aufsummiert AS (…),auswahl AS (…) SELECT skill, days_needed,SUM(days_to_pick * 8 * hourly_rate) AS COST,LAST_DAY(MAX(month_year)) AS project_termination,LISTAGG(first_name || ' (' || TO_CHAR(month_year,'Mon') || ':' || days_to_pick || ')',',') WITHIN GROUP (ORDER BY month_year, first_name) AS personen FROM auswahl WHERE days_to_pick > 0 GROUP BY skill, days_needed / SKILL DAYS_NEEDED COST PROJECT_TERMINATION PERSONEN DBA Bill (Jan:8),Bill (Feb:4),Jimmy (Feb:8) Java John (Jan:16),Mia (Jan:14) PL/SQL Liz (Jan:12),Marc (Jan:8),Mimi (Jan:10),Robert (Jan:10) UI Design Yu (Jan:16),Yu (Feb:4) Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Modifikation der Zuteilungsreihenfolge - Kostenoptimierung WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…),zuteilung as (SELECT skill, days_needed, first_name, month_year, hourly_rate, days, tot_days, ROW_NUMBER() OVER (PARTITION BY skill ORDER BY hourly_rate,days,month_year,first_name) AS pick_order FROM mitproj_verkn),aufsummiert AS (…),auswahl AS (…) SELECT skill, days_needed, sum(days_to_pick * 8 * hourly_rate) AS COST,last_day(MAX(month_year)) AS project_termination,listagg(first_name || ' (' || to_char(month_year,'Mon') || ':' || days_to_pick || ')',',') WITHIN GROUP (ORDER BY month_year, first_name) AS personen FROM auswahl WHERE days_to_pick > 0 GROUP BY skill, days_needed / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Optimiert nach Kosten KILL DAYS_NEEDED COST PROJECT_TERMINATION PERSONEN DBA Jimmy (Feb:8),Jimmy (Mar:12) Java Mia (Jan:20),Mia (Feb:10) PL/SQL Liz (Jan:4),Mimi (Jan:10),Mimi (Feb:6),Mimi (Mar:10),Mimi (Apr:10) UI Design Sarah (Mar:8),Sarah (Apr:12) Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Kleinste Zahl involvierter Personen WITH projekte AS (…),mitarbeiter AS (…),mitproj_verkn AS (…),zuteilung AS (SELECT skill, days_needed, first_name, month_year, hourly_rate, days, tot_days, ROW_NUMBER() OVER (PARTITION BY skill ORDER BY tot_days DESC,month_year ASC,hourly_rate,days,first_name) AS pick_order FROM mitproj_verkn),aufsummiert AS (…),auswahl AS (…) SELECT skill, days_needed, sum(days_to_pick * 8 * hourly_rate) AS COST,last_day(MAX(month_year)) AS project_termination,listagg(first_name || ' (' || to_char(month_year,'Mon') || ':' || days_to_pick || ')',',') WITHIN GROUP (ORDER BY month_year, first_name) AS personen FROM auswahl WHERE days_to_pick > 0 GROUP BY skill, days_needed / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Kleinste Zahl involvierter Personen SKILL DAYS_NEEDED COST PROJECT_TERMINATION PERSONEN DBA Jimmy (Feb:8),Jimmy (Mar:12) Java Mia (Jan:20),Mia (Feb:10) PL/SQL Marc (Jan:20),Marc (Feb:20) UI Design Yu (Jan:16),Yu (Feb:4) Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis AGENDA 1.Gruppenswitches  LAST_VALUE, „Vererbung“ von Werten 2.Ressourcenzuteilung zu einem Projekt  ROW_NUMBER, Running Summaries, Window Definitionen 3.Vorhersagen  Lineare Regression, Geglätteter Mittelwert (Moving Average), Saisonale Bereinigung, Trend Ermittlung, Prognose unter Berücksichtigung saisonaler Schwankungen Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Problemstellung  Ermittlung der zu erwartenden Ticketverkäufe für verschiedene Flug-Strecken  Wird benutzt um die Kosten eines Vertrages, welcher mit Partnern abgeschlossen wird im Voraus zu berechnen… Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Analytische Funktionen - Fortgeschrittene Anwendung « Prognosen sind eine schwierige Sache. Vor allem, wenn sie die Zukunft betreffen.» Mark Twain (1835 – 1910)

2015 © Trivadis ACCOUNTING_MONTH ATH_TICKETS DXB_TICKETS rows selected ACCOUNTING_MONTH ATH_TICKETS DXB_TICKETS Analytische Funktionen - Fortgeschrittene Anwendung Datenbasis

2015 © Trivadis Datenbasis Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Einfache Prognose  REGR_SLOPE  Errechnet der Steigung pro Monat/Zielflughafen auf Grund der vorliegenden Erfahrungswerte  Umrechnen der so ermittelten Steigung in eine Prognose für das Folgejahr (aktueller Wert + 12 * Steigung) Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Einfache Prognose – REGR_SLOPE SELECT ts_order,accounting_month,ath_tickets,dxb_tickets,REGR_SLOPE(ath_tickets,ts_order) OVER (ORDER BY accounting_month RANGE BETWEEN NUMTOYMINTERVAL(23,'MONTH') PRECEDING AND CURRENT ROW) AS ath_slope,REGR_SLOPE(dxb_tickets,ts_order) OVER (ORDER BY accounting_month RANGE BETWEEN NUMTOYMINTERVAL(23,'MONTH') PRECEDING AND CURRENT ROW) AS dxb_slope FROM all_tickets / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Einfache Prognose – REGR_SLOPE ACCOUNTING_MONTH ATH_TICKETS ATH_SLOPE DXB_TICKETS DXB_SLOPE Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Einfache Prognose – Aufrechnen auf Folgejahr SELECT ADD_MONTHS(accounting_month,12) AS accounting_month,FLOOR(ath_tickets + 12 * ath_slope) AS ath_forecast,FLOOR(dxb_tickets + 12 * dxb_slope) AS dxb_forecast FROM slope WHERE accounting_month >= DATE ' ' / ACCOUNTING_MONTH ATH_TICKETS ATH_SLOPE ATH_FORECAST DXB_TICKETS DXB_SLOPE DXB_FORECAST Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Einfache Prognose – Aufrechnen auf Folgejahr Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Gut aber…was hier fehlt:  Geglätteter Mittelwert (+/- 6 Monate falls vorhanden)  Saisonale Abweichungen errechnen  Trend auf saisonalbereinigten Werten  Ermittlung der Prognose unter Berücksichtigung der Saisonalität Zum Thema Trendermittlung: Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Geglätteter Mittelwert über +/- 6 Monate SELECT t.*,ROUND(CASE WHEN ts_order BETWEEN 8 AND where we have some data THEN ( NVL(AVG(ath_tickets) OVER (ORDER BY accounting_month ROWS BETWEEN 5 PRECEDING AND 6 FOLLOWING),0) + NVL(AVG(ath_tickets) OVER (ORDER BY accounting_month ROWS BETWEEN 6 PRECEDING AND 5 FOLLOWING),0)) / 2 ELSE NULL END,2) AS ath_tickets_MA,ROUND(CASE WHEN ts_order BETWEEN 8 AND where we have some data THEN ( NVL(AVG(dxb_tickets) OVER (ORDER BY accounting_month ROWS BETWEEN 5 PRECEDING AND 6 FOLLOWING),0) + NVL(avg(dxb_tickets) OVER (ORDER BY accounting_month ROWS BETWEEN 6 PRECEDING AND 5 FOLLOWING),0)) / 2 ELSE NULL END,2) AS dxb_tickets_ma FROM all_tickets t / Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Geglätteter Mittelwert über +/- 6 Monate Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Saisonalität ermitteln SELECT...,AVG(ath_tickets / ath_tickets_ma) OVER (PARTITION BY EXTRACT(MONTH FROM accounting_month)) AS ath_tickets_seasonality,AVG(dxb_tickets / dxb_tickets_ma) OVER (PARTITION BY EXTRACT(MONTH FROM accounting_month)) AS dxb_tickets_seasonality FROM moving_average ma / ACCOUNTING_MONTH ATH_TICKETS_SEASONALITY DXB_TICKETS_SEASONALITY Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Saisonalität  Beschreibt den Durchschnitt der Faktoren (monatliche Tickets / geglätteter Mittelwert) für jeden Monat  Dies erlaubt uns später den ermittelten saisonbereinigten Trend für die Ermittlung der Prognose mit dem monatsspezifischen Saisonalitätsfaktoren zu multiplizieren.  Identisch für gleichen Monat verschiedener Jahre Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Saisonale Bereinigung SELECT...,ath_tickets / ath_tickets_seasonality AS ath_tickets_deseasonalized,dxb_tickets / dxb_tickets_seasonality AS dxb_tickets_deseasonalized... FROM seasonality s / ACCOUNTING_MONTH ATH_TICKETS ATH_TICKETS_DESEASONALIZED DXB_TICKETS DXB_TICKETS_DESEASONALIZED Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Saisonale Bereinigung Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Trend Ermittlung SELECT..., REGR_INTERCEPT(ath_tickets_deseasonalized,ts_order) OVER () + ts_order * REGR_SLOPE(ath_tickets_deseasonalized,ts_order) OVER () AS ath_tickets_trend, REGR_INTERCEPT(dxb_tickets_deseasonalized,ts_order) OVER () + ts_order * REGR_SLOPE(dxb_tickets_deseasonalized,ts_order) OVER () AS dxb_tickets_trend FROM deseasonalized ds / ACCOUNTING_MONTH ATH_TICKETS_DESEASONALIZED ATH_TICKETS_TREND DXB_TICKETS_DESEASONALIZED DXB_TICKETS_TREND Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Trend Ermittlung Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Prognose unter Berücksichtigung saisonaler Schwankungen SELECT...,ROUND(ath_tickets_trend * ath_tickets_seasonality) AS ath_tickes_forecast,ROUND(dxb_tickets_trend * dxb_tickets_seasonality) AS dxb_tickets_forecast FROM trend t / ACCOUNTING_MONTH ATH_TICKETS ATH_TICKES_FORECAST DXB_TICKETS DXB_TICKETS_FORECAST Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Prognose unter Berücksichtigung saisonaler Schwankungen Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Vergleiche einfache Prognose / erweiterte Prognose Analytische Funktionen - Fortgeschrittene Anwendung

2015 © Trivadis Besten Dank 2015 © Trivadis BASEL BERN BRUGG LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN Roger Troller Principal Consultant Analytische Funktionen - Fortgeschrittene Anwendung