Report pages: OpenSky snapshot
A Real-Time Dashboard with two tiles, built on an Eventhouse table of live aircraft states from the OpenSky Network. Tile 1 shows distinct aircraft per 5 minutes and honours the dashboard time range. Tile 2 lists airborne readings below -20 m/s whose reported vertical rate is within 5 m/s of the rate calculated from the altitude change.
Tile 2 was tightened after a first version that used the reported rate alone: most of that version's hits looked inconsistent with altitude.
Built in one session on a Fabric trial on 25 Oct 2026. The repo includes a log of the problems hit along the way.
aircraft_states. A saved KQL function, aircraft_clean(), converts epoch seconds to datetimes and keeps one row per aircraft and position time.vertical_rate_ms below -20 every 5 minutes.dcount estimate).aircraft_clean() removed 8,583 of the 54,587 rows (about 15.7%), mostly repeats.origin_country is inferred from the transponder address, so this is registration country, not where the aircraft were flying.rapid_descent_consistent was created from tile 2 and showed Running. At about 13:03 UTC its History tab showed 1 recorded activation, a borderline case: reported -21.46 m/s against -16.7 m/s calculated from altitude.
Notification delivery is not verified. The account has no working mailbox or Teams subscription: the email test failed and a Teams subscription error was shown.

A one-page Power BI report on an imported snapshot of aircraft_clean() (46,004 rows), not a live connection to the Eventhouse. Four KPI cards, distinct aircraft per 5-minute window, the top 8 origin countries, and a table of the 26 airborne readings reported below -20 m/s.
The report was built with Claude Code and Microsoft's Power BI authoring plugin.
Checks. The five count measures match a KQL cross-check on the final data (46,004 / 1,088 / 1,081 / 26 / 21), the table's 26 readings equal the Readings Below -20 m/s measure, and the nine rows at the top of the table match a DAX query on the model. The top-8 countries measure was checked with a DAX query only, not in KQL.
Limits. The time axis shows 12-hour labels, the table scrolls (about eight of its 26 rows are visible at once), and the Power BI project files are not published because they contain the Eventhouse address.