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:
@@ -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.
|
||||
Reference in New Issue
Block a user