Analyse unpünktlicher Flüge | Los Angeles International Airport
Power BI - Business Intelligence Analytics & Reporting | 2015–2017
Der technische Weg von der Datenerhebung bis zur fertigen Kennzahl
Diskussionsgrundlage für den Flughafenbetreiber fLAirport
Routinemäßige Analyse der Verspätungen
Unpünktliche Flüge am größten Flughafen der Gesellschaft, dem Los Angeles International Airport, sollen routinemäßig untersucht werden. Um über verschiedene Abteilungen hinweg die gleiche Diskussionsgrundlage zu haben, soll ein für alle zugänglicher Bericht erstellt werden.
In Abstimmung mit der Führungsebene wurden folgende Anforderungen an den Bericht herausgearbeitet
Vier technische Arbeitsschritte bis zur vollständigen Analyse
SQL Native Query — Gefiltert an der Quelle, nicht clientseitig nachgezogen
Power Query (M) — Zeit-Parsing als Funktion, die ≥5-Minuten-Regel an genau einer Stelle
Star Schema — Eine Faktentabelle, zwei Zeit-Dimensionen, Airline-Lookup und eine Measures-Tabelle
DAX Measures — DIVIDE-sicher, Filterkontext bewusst genutzt
Gefiltert an der Quelle, nicht clientseitig nachgezogen
SELECT fl_date, EXTRACT(WEEK FROM fl_date) AS fl_week,
CASE WHEN dest = 'LAX' THEN 'arrival'
WHEN origin = 'LAX' THEN 'departure' END AS fl_direction,
origin AS fl_origin, dest AS fl_dest,
crs_dep_time AS raw_dep_crs, crs_arr_time AS raw_arr_crs,
dep_time AS raw_dep, arr_time AS raw_arr,
ABS(dep_delay) AS delay_dep, ABS(arr_delay) AS delay_arr,
op_carrier
FROM flights
WHERE EXTRACT(YEAR FROM fl_date) BETWEEN 2015 AND 2017
AND (origin = 'LAX' OR dest = 'LAX')
AND cancelled = FALSE AND diverted = FALSE
EXTRACT(WEEK...) berechnet die Kalenderwoche performant auf dem Datenbankserver.fl_direction entsteht per CASE zur Unterscheidung von Ankunft und Abflug.ABS() macht Verspätungen vorzeichenlos, wodurch Verfrühung und Verspätung gleichermaßen zählen.op_carrier dient als Schlüssel für den späteren Tabellen-Join in Power Query.Zeit-Parsing als Funktion, die ≥5-Minuten-Regel an genau einer Stelle
// fnParseFlightTime — hhmm → time, einmal statt 4× kopiert
(raw) => let
_n = Text.PadStart(Text.From(raw), 4, "0") & "00"
in try #time(Number.FromText(Text.Start(_n, 2)),
Number.FromText(Text.Middle(_n, 2, 2)), 0)
otherwise null
// ≥5-Minuten-Regel — genau eine Quelle der Wahrheit
fl_delay_status =
let d = if [fl_direction] = "arrival" then [delay_arr]
else [delay_dep]
in if d >= 5 then [fl_direction] & " delay" else "on time"
delayed = [fl_delay_status] <> "on time" // abgeleitet
fl_delay_status, damit Definitionen nicht auseinanderdriften.delayed nutzen die Ergebnisse von fl_delay_status, statt die Logik neu zu berechnen.Eine Faktentabelle, zwei Zeit-Dimensionen, Airline-Lookup und eine Measures-Tabelle
Ein Star Schema: Die Trennung von Datum und Uhrzeit trägt die Zeitreihen.
Report_Flights_Data: Faktentabelle (1 Zeile = 1 Flug)_Calendar: Datumsebene (Jahr → Quartal → Monat → Woche → Tag)_Time: Tagesuhrzeit (Stunde) für die TagesansichtOrigin_Unique_Carrieres: Airline-Code → Klarname_Measures: eigene Tabelle für alle KennzahlenDIVIDE-sicher, Filterkontext bewusst genutzt
-- Ø-Verspätung: Summe / Anzahl der VERSPÄTETEN Flüge
avg_delay_value_total = DIVIDE([sum_delays_total], [cnt_total_delays])
otp_rate = DIVIDE([cnt_total_ontimes], [cnt_total]) -- 29,85 %
delay_rate = DIVIDE([cnt_total_delays], [cnt_total]) -- 70 %
delay_index = [delay_rate] * [avg_delay_value_total] -- 18,54
-- Kernzahl 3,51 %: eine Rangquelle für Farbe UND Anteil
top3_avg_delay_value_in_pct =
DIVIDE(
SUMX(FILTER(VALUES(op_carrier_name), [top3_avg_ranking] <= 3),
[cnt_total_delays]),
[cnt_total_delays])
DIVIDE garantiert eine fehlerfreie Division und fängt Berechnungsfehler durch Nullwerte automatisch ab.RANKX über SUMX zu DIVIDE für die exakte Berechnung der 3,51-%-Kernzahl.Konsolidierte Sicht, Detail-Charts siehe StoryView
Alle acht Werte sind berechnete DAX-Measures auf der Faktentabelle, keine roh übernommenen Spaltenwerte: von einfachen Zählern (cnt_total, cnt_op_carrier) bis zu abgeleiteten Quoten (otp_rate, delay_index).
13 Fluggesellschaften, Top-3-Anteil an der Gesamtverspätung
Analyse unpünktlicher Flüge | Los Angeles International Airport
Power BI - Business Intelligence Analytics & Reporting | 2015–2017
Vom Rohdatenimport bis zur Kennzahl
SQL, Power Query (M), Datenmodell und DAX greifen bewusst ineinander: Jede Filterung, jede Bereinigungsregel und jede Kennzahl ist an genau einer Stelle definiert, nicht mehrfach kopiert.
Dieser Aufbau macht die Analyse reproduzierbar und flexibel: Neue Zeiträume oder zusätzliche Airlines lassen sich ergänzen, ohne die bestehende Logik anzufassen.