refactor: multi-dashboard structural migration
Some checks failed
CI / lint-and-test (pull_request) Has been cancelled
Some checks failed
CI / lint-and-test (pull_request) Has been cancelled
- Rename dbt project from toronto_housing to portfolio - Restructure dbt models into domain subdirectories: - shared/ for cross-domain dimensions (dim_time) - staging/toronto/, intermediate/toronto/, marts/toronto/ - Update SQLAlchemy models for raw_toronto schema - Add explicit cross-schema FK relationships for FactRentals - Namespace figure factories under figures/toronto/ - Namespace notebooks under notebooks/toronto/ - Update Makefile with domain-specific targets and env loading - Update all documentation for multi-dashboard structure This enables adding new dashboard projects (e.g., /football, /energy) without structural conflicts or naming collisions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
57
dbt/models/intermediate/toronto/int_rentals__annual.sql
Normal file
57
dbt/models/intermediate/toronto/int_rentals__annual.sql
Normal file
@@ -0,0 +1,57 @@
|
||||
-- Intermediate: Annual rental data enriched with dimensions
|
||||
-- Joins rentals with time and zone dimensions for analysis
|
||||
|
||||
with rentals as (
|
||||
select * from {{ ref('stg_cmhc__rentals') }}
|
||||
),
|
||||
|
||||
time_dim as (
|
||||
select * from {{ ref('stg_dimensions__time') }}
|
||||
),
|
||||
|
||||
zone_dim as (
|
||||
select * from {{ ref('stg_dimensions__cmhc_zones') }}
|
||||
),
|
||||
|
||||
enriched as (
|
||||
select
|
||||
r.rental_id,
|
||||
|
||||
-- Time attributes
|
||||
t.date_key,
|
||||
t.full_date,
|
||||
t.year,
|
||||
t.month,
|
||||
t.quarter,
|
||||
|
||||
-- Zone attributes
|
||||
z.zone_key,
|
||||
z.zone_code,
|
||||
z.zone_name,
|
||||
|
||||
-- Bedroom type
|
||||
r.bedroom_type,
|
||||
|
||||
-- Metrics
|
||||
r.rental_universe,
|
||||
r.avg_rent,
|
||||
r.median_rent,
|
||||
r.vacancy_rate,
|
||||
r.availability_rate,
|
||||
r.turnover_rate,
|
||||
r.year_over_year_rent_change,
|
||||
r.reliability_code,
|
||||
|
||||
-- Calculated metrics
|
||||
case
|
||||
when r.rental_universe > 0 and r.vacancy_rate is not null
|
||||
then round(r.rental_universe * (r.vacancy_rate / 100), 0)
|
||||
else null
|
||||
end as vacant_units_estimate
|
||||
|
||||
from rentals r
|
||||
inner join time_dim t on r.date_key = t.date_key
|
||||
inner join zone_dim z on r.zone_key = z.zone_key
|
||||
)
|
||||
|
||||
select * from enriched
|
||||
Reference in New Issue
Block a user