# CloudRevenue — Teaching Dataset

> Synthetic cloud subscription revenue across 8 product families × 247 tenants × 36 months. Designed to support practice for the chart-selection, dashboard-design, and AI-direction chapters of *The Defensible Decision*.

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

## Files

- [`products.csv`](products.csv) — 8 product families
- [`tenants.csv`](tenants.csv) — 247 enterprise tenants
- [`revenue.csv`](revenue.csv) — ~21,400 rows of tenant × product × month revenue
- [`SCHEMA.md`](SCHEMA.md) — full schema and known imperfections

## What it represents

A 3-year window (2023-06 through 2026-05) of monthly cloud subscription revenue for a fictional B2B cloud platform vendor with 8 product families spanning Data, Infrastructure, Security, Operations, and Productivity segments. The tenant base is 247 enterprises across 4 regions and 8 verticals, with realistic size-band distribution skewing toward SMB and Mid-Market.

The dataset is sized to support real practice: aggregate views, drill-downs, time-series analysis, and segmentation all return non-trivial result sets. Joins across the three tables are inexpensive.

## What it does NOT represent

- Customer-level contact information (none present by design)
- Cost data (revenue-only)
- Product feature usage (MAU only, no feature-level telemetry)
- Pipeline / forecast (closed revenue only)

## Deliberate imperfections

This dataset includes the kinds of imperfections real data has. Chapters 4, 5, 9, and 13 reference the cleanup work explicitly.

- **Region naming inconsistency** — ~12% of NA tenants stored as `North America` instead of `NA`
- **Null MAU** — ~2% of revenue rows have null MAU (telemetry outage)
- **In-flight billing close** — last 2 months (2026-04 and 2026-05) have ~30% null revenue
- **Mid-window churners** — 12 tenants churned between 2024-06 and 2025-08; revenue stops at `churn_month`

The imperfections are intentional. A chapter exercise that pretends the data is perfect is teaching the wrong discipline.

## Quick start

```bash
# Inspect the schema
cat SCHEMA.md

# Sample the data
head revenue.csv
head tenants.csv
head products.csv

# Load into Power BI:
# 1. Get Data → Text/CSV → select all three CSVs
# 2. Power Query auto-detects column types
# 3. Build relationships: revenue.tenant_id → tenants.tenant_id (many-to-one)
#                        revenue.product_id → products.product_id (many-to-one)
# 4. Mark "month" as date hierarchy
```

## Reference BRD

The [CloudRevenue starter BRD](../../appendix-e/cloudrevenue-starter.md) is the BRD for this dataset. Chapters 2 and Appendix E use it as the practice artifact for the BRD-authoring discipline.

## License and reuse

Released for teaching use alongside *The Defensible Decision*. Use freely in classes, workshops, and your own practice. No attribution required beyond what's already in this README.
