Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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.

Ähnliche Präsentationen


Präsentation zum Thema: "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."—  Präsentation transkript:

1 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

2 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

3 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

4 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

5 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

6 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

7 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?

8 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?

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

18 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

19 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

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

21 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…

22 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

23 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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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

32 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

33 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

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

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

36 2015 © Trivadis Datenbasis Analytische Funktionen - Fortgeschrittene Anwendung

37 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

38 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

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

40 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

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

42 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

43 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

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

45 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

46 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

47 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

48 2015 © Trivadis Saisonale Bereinigung Analytische Funktionen - Fortgeschrittene Anwendung

49 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

50 2015 © Trivadis Trend Ermittlung Analytische Funktionen - Fortgeschrittene Anwendung

51 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

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

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

54 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


Herunterladen ppt "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."

Ähnliche Präsentationen


Google-Anzeigen