# M365Marketing — Teaching Dataset

> Synthetic multi-channel marketing campaign performance across 24 campaigns × 5 channels × 78 weeks. Designed to support practice for the dashboard-design, AI-data-prep, and anomaly-detection chapters of *The Defensible Decision*.

**Wholly synthetic.** Any resemblance to a real company's data is coincidental.

## Files

- [`channels.csv`](channels.csv) — 5 marketing channels with attribution windows
- [`segments.csv`](segments.csv) — 10 audience segments with TAM estimates
- [`campaigns.csv`](campaigns.csv) — 24 campaigns
- [`performance.csv`](performance.csv) — ~1,800 rows of weekly performance
- [`SCHEMA.md`](SCHEMA.md) — full schema and known imperfections

## What it represents

A fictional B2B marketing organization running 24 concurrent campaigns across 5 channels (Paid Search, Paid Social, Display, Content Syndication, Field Event) targeting 10 audience segments across 8 industries. The weekly performance grain supports the standard B2B marketing-decision cadence: Monday-morning reallocation reviews, monthly portfolio retrospectives, quarterly budget planning.

The dataset is sized to support the chart-selection, dashboard-design, AI-data-prep, and anomaly-detection exercises in the relevant chapters. Joins are inexpensive.

## What it does NOT represent

- Lead-level data (campaign-week aggregates only)
- Customer-level pipeline (conversions only, no opportunity stage)
- Creative-level performance (campaign aggregates only)

## Deliberate imperfections

- **Mixed attribution windows** — different channels use different attribution windows. Paid Search and Display use `last-click-30d`; Paid Social uses `view-through-7d`; Content and Field use `first-touch-90d`. Reconciling cross-channel conversions is a chapter exercise.
- **Paused weeks** — ~1.5% of performance rows are paused (zero everything, `note='paused'`)
- **Platform outages** — 3 campaigns have a single platform-outage week (zero everything, `note='platform-outage'`). Useful for anomaly-detection exercises.

## Quick start

```bash
cat SCHEMA.md
head performance.csv
head campaigns.csv

# Load into Power BI:
# 1. Get Data → Text/CSV → select all four CSVs
# 2. Build relationships:
#    campaigns.channel_id → channels.channel_id
#    campaigns.segment_id → segments.segment_id
#    performance.campaign_id → campaigns.campaign_id
# 3. Mark week_starting as a date column
```

## Reference BRD

The [M365Marketing starter BRD](../../appendix-e/m365marketing-starter.md) is the BRD for this dataset.

## License and reuse

Released for teaching use alongside *The Defensible Decision*. Use freely.
