Skip to content

feat(dbt): introduce fct_offres unified mart (D94) - #80

Merged
GMartin-Data merged 1 commit into
mainfrom
feat/fct-offres-mart-unifie
May 20, 2026
Merged

GMartin-Data merged 1 commit into
mainfrom
feat/fct-offres-mart-unifie

Conversation

@GMartin-Data

Copy link
Copy Markdown
Owner

Objectif

Fusion en un mart unifié fct_offres au grain offre (D94) des deux marts initialement envisagés : fct_offres_enrichies (mergé) et fct_contexte_territorial (feature branch abandonnée, D96).

Architecture

Pattern Kimball wide fact table sur BigQuery — table de présentation dénormalisée, une seule data source Looker, zéro blend. Le mart consomme int_offres_analytiques (couche analytique partagée) + trois sources contextuelles en snapshot temporel (D97) :

  • int_densite_sectorielle_commune — LEFT JOIN sur code_commune (URSSAF effectifs IT communaux)
  • int_tensions_bassin_emploi — LEFT JOIN sur code_departement (tension BMO départementale)
  • stg_urssaf__masse_salariale_na88 — CROSS JOIN sur 1 ligne (benchmark salaire IT national)

Apports

  • F3 métriques fenêtrées (D100) : 5 colonnes COUNT OVER + DENSE_RANK.
  • F8 audit dbt (D103) : dbt_loaded_at, dbt_invocation_id.
  • F9 partitioning + clustering (D104) : partition mensuelle sur date_creation, cluster categorie_metier, code_departement, source.
  • Métadonnées D75 : statut_donnee, is_fiable_*, pct_couverture_* précalculées pour Looker.

Layout

fct_offres.sql à la racine plate de marts/ (un seul modèle, critère D93). Suppression du sous-dossier offres_enrichies/. Purge de mart_contexte_territorial.sql (stub résiduel). Consolidation YAML sous _marts__models.yml. Fix #78 inclus : description de int_tensions_bassin_emploi.code_departement mise à jour (référence fct_offres).

Validation empirique

  • 7 spot checks PASS : cardinalité 1:1, fraîcheur snapshots, asymétrie Adzuna/FT, jointure PLM, cohérence statut_donnee, fenêtre entreprise 60j, rang volume commune.
  • uv run dbt build --select fct_offres : PASS=41 WARN=0 ERROR=0.
  • Cardinalité 1:1 strictement préservée (10 269 lignes).
  • Zéro itération corrective déclenchée.

Découvertes empiriques documentées (cadrage-fct-offres.md)

  • Inversion couverture entreprise : FT 31.47% vs Adzuna 99.12%.
  • Top 10 recruteurs dominé par intermédiaires/plateformes (6/10).
  • Décomposition empirique 'masquée' : 544 offres non joinables + 62 dans départements tous bassins masqués.

Décisions associées

D75, D93, D94, D96, D97, D100, D103, D104

Closes #78

Replace fct_offres_enrichies + fct_contexte_territorial (abandoned
feature branch, D96) with a single wide fact table at the offres
grain. Combines int_offres_analytiques (analytic shared layer,
F1+F2+F5+F6) with three contextual sources via the snapshot pattern
(D97): URSSAF effectifs density (LEFT JOIN on code_commune), BMO
tension (LEFT JOIN on code_departement), URSSAF mass salary national
benchmark (CROSS JOIN on a single post-filter row).

Adds F3 windowed metrics (D100), F8 dbt audit (D103), F9 partitioning
+ clustering (D104). Carries D75 reliability metadata (statut_donnee,
is_fiable_*, pct_couverture_*) precomputed for Looker dashboard
consumption.

Layout changes: fct_offres.sql now lives at the flat root of marts/
since a single mart resides there (consistent with D93 subfolder
criterion); offres_enrichies/ subfolder removed; mart_contexte_-
territorial.sql stub purged; YAML consolidated under
_marts__models.yml.

Empirical validation (Conv 3bis): 7 spot checks PASS, dbt build
PASS=41 WARN=0 ERROR=0, zero corrective iteration triggered.
Cardinality 1:1 preserved (10269 rows). Three pedagogical findings
documented in cadrage-fct-offres.md: FT/Adzuna entreprise coverage
inversion (31.47% vs 99.12%), top recruiters dominated by
intermediaries/platforms (6/10), 'masquée' status empirical 2-case
decomposition (544 unjoinable + 62 all-bassins-masked).

Refs: D75, D94, D96, D97, D100, D103, D104
Closes: #78
@GMartin-Data
GMartin-Data merged commit 37ab4d8 into main May 20, 2026
6 checks passed
@GMartin-Data
GMartin-Data deleted the feat/fct-offres-mart-unifie branch May 20, 2026 06:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(dbt): drop obsolete mart_contexte_territorial reference in int_tensions_bassin_emploi YAML

1 participant