feat(P3): powerbi export — CSV/JSON views + 8 placeholder views + data dictionary (REQ-190,199,208,209)

P3 (Wave 2, feat) — REQ-190, REQ-199, REQ-208, REQ-209

New components:
- core/metrics/powerbi_export.py — exports fact/dim tables + 8 placeholder views to CSV/JSON
- tests/test_powerbi_export.py — 6 tests (all pass)
- docs/METRICS_VIEWS.md — column-level data dictionary (REQ-209)
- metrics/powerbi/NOVA_DASHBOARD_README.md — folder-connector import guide + starter visual model (REQ-208)

8 placeholder views (deferred metrics, headers only):
- placeholder_live_infra_health (D-096)
- placeholder_live_outbox_rate (D-096)
- placeholder_tamper_evident_checkpoints (D-083)
- placeholder_onboarding_funnel (D-113/D-114/D-119)
- placeholder_drift_detection (D-096 + no scheduler)
- placeholder_live_cur_reconciliation (D-096)
- placeholder_sla_downtime (D-096)
- placeholder_predictive_reactive (future emitter)

D-120: Nova-native (CSV/JSON files, no live connector)
D-129: PowerBI ingests via folder connector

---ci---
project: acdl
phase: 3
milestone: v1.17
status: execute
---/ci---
This commit is contained in:
Jon Chery
2026-08-04 20:03:12 +00:00
parent 814fea6c3c
commit 3a7604dec0
4 changed files with 498 additions and 0 deletions
+66
View File
@@ -0,0 +1,66 @@
# Nova PowerBI Dashboard — Import Guide
> v1.17 — Strategic Direction, Leadership Metrics & Unified Story (REQ-208)
> Generated: 2026-08-04
This guide documents how to import Nova's metrics views into PowerBI
via the folder connector, and suggests a starter visual model.
## Import via folder connector
1. Open PowerBI Desktop.
2. **Get Data****Folder** → navigate to `metrics/powerbi/`.
3. PowerBI discovers all CSV/JSON files in the folder.
4. Combine the files — PowerBI creates a single query per file.
## Starter visual model
### Suggested joins
- `fact_run` ←→ `fact_decision` on `run_id` (run-level decision path)
- `fact_run` ←→ `fact_cost_estimate` on `run_id` (run-level cost)
- `fact_capability` ←→ `dim_capability` on `capability_id` (capability lookup)
- `fact_capability` ←→ `dim_milestone` on `milestone` (milestone lookup)
### Suggested visuals (4 starter visuals)
1. **Capability Health over Time** — bar chart: `fact_capability.status`
grouped by `run_at_utc`. Shows Verified/Skipped/Broken/Decayed trend.
Source: `fact_capability.csv`.
2. **Confidence Distribution** — histogram: `fact_confidence.score`.
Shows the distribution of confidence scores across all runs.
Source: `fact_confidence.csv`.
3. **Decision Accuracy** — KPI card: count of `fact_decision` where
`outcome = 'succeeded'` ÷ total `fact_decision` rows. Shows AI
Decision Accuracy (NORTH_STAR target ≥99.5%).
Source: `fact_decision.csv`.
4. **Cost Trend** — line chart: `fact_cost_estimate.delta_usd` over
`estimated_at`. Shows pre-apply cost estimate trend (Infracost).
Source: `fact_cost_estimate.csv`.
## Placeholder views (deferred metrics)
The 8 `placeholder_*.csv` files contain headers only (no data rows).
Each has a companion `placeholder_*.json` with the schema metadata
(columns, blocking decision, description). When the blocking decision
lifts (e.g., D-096 for live AWS), the collector will populate these
views and PowerBI will automatically pick up the data.
## Data refresh
The export is regenerated by running:
```bash
python3 core/metrics/collector.py # rebuilds nova_metrics.db
python3 core/metrics/powerbi_export.py # exports to metrics/powerbi/
```
In PowerBI, click **Refresh** to pick up the updated CSV/JSON files.
## Honesty model
Every metric in the export is `grounded` (cites a source file), `derived`
(documented formula), or `deferred` (cites a blocking decision ID). See
`docs/METRICS.md` (P4) for the canonical catalog and `docs/METRICS_VIEWS.md`
for the column-level data dictionary.