M365Marketing - Schema ====================== Synthetic multi-channel marketing campaign performance dataset. Four tables joined on campaign_id, channel_id, and segment_id. 78 weeks (18 months) ending 2026-05-31. Tables ------ channels.csv (5 rows) --------------------- Column Type Notes ------------------ ------ -------------------------------------------------------------------------------------------------------------------------------------------- channel_id string Primary key. channel_name string Display name. attribution_window string Known imperfection: different channels use different attribution windows. Reconciling conversions across them is a chapter exercise (Ch 11). segments.csv (10 rows) ---------------------- Column Type Notes --------------------- ------- ---------------------------------------------- segment_id string Primary key. segment_name string Display name. industry string One of 8 industries. size_band string Enterprise+ or Mid-Market. tam_estimate_accounts integer Total addressable market size for the segment. campaigns.csv (24 rows) ----------------------- Column Type Notes ------------------ ------- ------------------------------------------------------------------- campaign_id string Primary key. Format CMP-NNNN. campaign_name string Synthetic name. channel_id string FK -> channels.channel_id. segment_id string FK -> segments.segment_id. attribution_window string Denormalized from the channel (reflects real warehouse design). weekly_budget_usd integer Planned weekly spend; actual varies in performance.csv. status string active, paused, or ended. Ended campaigns have no performance rows. performance.csv (~1,800 rows) ----------------------------- Column Type Notes ------------- ---------- -------------------------------------------------------------------------------------------------------------------------------- week_starting date (ISO) First day of the ISO week (Monday). campaign_id string FK -> campaigns.campaign_id. impressions integer 0 for paused weeks. clicks integer 0 for paused weeks. conversions integer 0 for paused weeks. spend_usd integer 0 for paused weeks. note string paused, platform-outage, or empty. Diagnostic: 3 campaigns have a platform-outage week - useful for anomaly-detection exercises. Suggested chapter exercises --------------------------- - Chapter 3 (story): Build the Monday-morning reallocation narrative - which campaigns should grow, hold, or shrink? Pair with the M365Marketing starter BRD. - Chapter 5 (focus and decluttering): Strip the cross-channel performance dashboard to a single answer per channel. - Chapter 10 (AI visuals - anomaly detection): Find the three platform-outage weeks. Compare anomaly-detection sensitivity at different thresholds. - Chapter 11 (prep for AI): Reconcile the attribution-window differences across channels. This is the canonical exercise for "AI data schemas" - the conversion metric is the same name across channels but means different things. - Chapter 12 (dashboard design): Compose the weekly portfolio dashboard for the Director of Product Marketing. Reproducibility --------------- Generated by scripts/datasets/generate-m365marketing.js using a seeded PRNG. Source seed: 0x4D6B7400.