← All work

Youth Labour Market Information Dashboard

An automated Databricks pipeline, from REST APIs to a governed star schema, behind a Power BI dashboard that explains each month in plain language.

Databricks · Power BI
Youth Labour Market Information Dashboard
Role
Solo build: pipeline, model and report
Stack
Databricks, Unity Catalog, Python, SQL, Power BI, DAX
Data
Statistics Canada Labour Force Survey via REST API
Refresh
Monthly, scheduled job
Context

Why it mattered

Young people aged 15 to 24 are usually the first to feel a cooling job market. In August 2026, Alberta's youth unemployment rate sat 8.5 percentage points above the rate for everyone 15 and over, and 20.5% of unemployed Albertans had been looking for work for more than 27 weeks, up from 17.1% a year earlier.

The dashboard that tracked this ran on local Excel files. Every month, when Statistics Canada released the Labour Force Survey, the tables were downloaded, cleaned and pasted in by hand. That took roughly two days, left no record of who changed what, and meant there was never one trusted version of the data.

I rebuilt it end to end on Databricks: governed tables in Unity Catalog, a medallion pipeline that runs on a schedule, a star schema built for Power BI, and executive insights that rewrite themselves for whatever the reader filters.

The question
How is the youth labour market moving each month, how does it compare with the overall labour market and other provinces, and can the answer refresh itself the day new data lands?
  • Is the gap between youth and overall unemployment widening or closing?
  • Which industries employ young people right now?
  • How much unemployment is long-term, and is it rising?
Approach

How I solved it

01 · Ingest

Monthly survey tables land through the API.

A bronze_ingestion notebook calls the Statistics Canada REST API for each Labour Force Survey table and writes the responses to Delta tables exactly as delivered.

Labour force characteristicsEmployment by industryUnemployment durationGeography and code listsBronze tablesraw API responses,unchanged
02 · Govern

Everything lives in one Unity Catalog.

Bronze, silver and gold are separate schemas in a single catalog, so access is granted per layer, lineage is tracked from API call to report, and every Delta table keeps its version history.

catalogyouth_lmibronzelfs_rawindustry_rawsilverdimensionsfactsgolddim_* tablesfact_* tablesAccess grantsLineageVersion history
03 · Refine

Bronze to silver to gold.

Silver tasks type the columns, remove duplicates and conform geography, age, gender and industry codes. Gold tasks reshape the clean data for reporting.

Bronzeraw API pulls,as deliveredSilvertyped, deduplicated,conformed codesGoldstar schemafor Power BIrawready for analytics
04 · Model

Gold is a star schema.

One fact table of monthly survey measures, surrounded by the dimensions people filter on. Power BI reads it fast and the DAX stays simple.

dim_datedim_geographydim_age_groupdim_genderdim_industrydim_characteristicfact_labour_forcemonthly LFS measures
05 · Automate

One job, five tasks, every month.

The youth_lmi_monthly_refresh job chains every notebook from bronze ingestion to gold fact tables. Runs take 5 to 10 minutes, and only new reference months are merged in.

DATABRICKS JOByouth_lmi_monthly_refreshmonthlybronze_ingestionsilver_dimensionssilver_factsgold_dimensiongold_fact_tablesINCREMENTALnew months merge in, history stays putonly new and changed rows are processed
06 · Serve

Connect, model, publish.

Power BI reads the gold tables through the Databricks connector. The semantic model holds the measures, from year-over-year change to the youth gap, and the report is published to the Power BI Service.

GoldtablesDatabricksconnectorsemantic modelPower BI Service
07 · Explain

Insights that follow the filters.

DAX measures compare the selection with the same month last year and pick the wording, so the executive summary is correct for any province, age group or gender.

GAP THIS MONTH8.5 ppGAP A YEAR AGO8.3 ppFILTERSAlberta · 15+RULEScompare withlast year,choose the verbGENERATED TEXTThe youth unemploymentrate currently sits8.5 percentage pointsabove the overallrate, with that gapwidening by 0.2 ppyear over year.MonthlyIndustriesLong-termYouth gap
Outcome

What it delivers

5 to 10 minper monthly refresh, measured across the job's runs, down from roughly two days by hand
1 jobfive chained tasks, from bronze ingestion to gold fact tables
1 sourcelocal Excel files retired; Unity Catalog is the governed source
4 filtersgeography, age group, gender and date drive every visual and insight
Demo

See it for yourself

A short screen recording of the finished work. It only plays when you press the button.

Youth Labour Market Information Dashboard preview