Separate the data boundaries
I kept real DEFRA profiling separate from the fictional corporate analytics path. This prevents synthetic findings from being presented as public-data facts.
Data Engineering · Analytics Engineering
A controlled analytics pipeline with governed reporting and operational freshness monitoring.
My approach
I kept real DEFRA profiling separate from the fictional corporate analytics path. This prevents synthetic findings from being presented as public-data facts.
I used stable keys, MySQL controls, dbt models, tests, and reporting marts to keep business logic traceable.
I used Airflow, reconciliation, freshness checks, and repeat loads before reporting. The Power BI monitoring page, Grafana, and Streamlit read the same governed monitoring views.
The problem
Spend data is useful only when users can trust its source, transformation, and totals.
Duplicate, incomplete, or inconsistent records can change financial totals.
Repeated loads must not create duplicate records.
A failed or stale load must be visible before users act on the reporting output.
Explore the implementation concepts: dbt modelling → Airflow orchestration → Data freshness →
How the system works
Power BI business pages read governed marts. The Power BI monitoring page, Grafana, and Streamlit read separate freshness audit views.
Design decisions
Each decision controls a specific risk in the path from source data to reporting.
Business logic stays in the governed data layer. Power BI does not recreate the same logic.
A duplicate can contain valid business information. The pipeline does not remove it without evidence.
A rerun must not change record counts or financial totals. Explore idempotency →
Historical data can be valid even when its business date is old. The monitor tests load recency and period completeness as separate controls. Explore data freshness →
Concepts used
The case study shows where each concept sits. The Concept Library explains how it works.
Pipeline reliability
Transformation
Orchestration
Trust
Modelling
Operations
Monitoring
Decision evidence
Business and monitoring views each have one decision job. Every screenshot is evidence, not decoration.
Source: original Power BI, Grafana, and Streamlit screenshots from the project repository. Figures use the project dataset and evidence boundaries stated above.
Evidence
The case study must show both the analytical result and the checks that support it.
dbt tests check model quality.
Reconciliation checks compare records and totals.
Freshness rules passed after failure detection and controlled recovery.
The loader runs twice and compares row counts. It stops the pipeline if a rerun changes the result.
first_counts = load_once(connection, project_root)
report = {"first_run_counts": first_counts}
if args.verify_idempotency:
second_counts = load_once(connection, project_root)
report["second_run_counts"] = second_counts
report["idempotency_verified"] = first_counts == second_counts
if not report["idempotency_verified"]:
raise RuntimeError("Row counts changed on rerun")
First load → second load. Row counts and the reconciled GBP total remained unchanged.