Turn a CSV into a Report You Can Verify
Define a metric, build a traceable report and reconcile it with the source CSV. Use multiple views for different questions while keeping exclusions and exact values visible.
Fastest way
Ask your AI to do it
Paste this into the AI agent you already use:
Use CSV Story Report on my supplied CSV. Ask which question, dimension, metric, aggregation and unit I need. Inspect headers and invalid rows before calculating. Use a new output folder, reconcile the total and two groups independently, and show source lines and quality notes. For multiple views, check each view separately. Do not silently exclude rows or infer revenue or causality.
What does a verified CSV report include?
CSV Story Report produces an interactive report, browser slides, grouped CSV, exact summary and quality notes. The multi-view workflow supports 2–8 views. Optional PowerPoint is a separate export with Python dependencies and a separate visual review.
Define the question before calculating
Choose the grouping dimension, numeric column, aggregation, unit and reporting period. Inspect unique headers, row widths, missing values and duplicated events. The parser supports UTF-8 CSV up to 2 MiB, 10,000 data rows and 100 groups; it does not establish what a business metric means.
Choose count, sum or average deliberately
| Operation | Meaning for values 2, 4 and 9 | Check before using it |
|---|---|---|
| Row count | 3 rows; not automatically 3 unique customers | Define the event represented by a row |
| Additive sum | 15 in the supplied unit | Do not sum percentages or mixed currencies |
| Row-weighted average | 15 divided by 3 equals 5 | Do not confuse it with an unweighted mean of group averages |
Run one question, then add views
Read references/input.md and review the included generator. From the installed package folder, use Node.js 24+ to run the fictional example below. For several questions, read references/workspaces.md and start from examples/workspace.json. Keep monthly grouping distinct from a claim about growth.
Read this release’s setup before running the example
Confirm installation and invocation in your host
node scripts/build-report.mjs --input examples/report.json --csv examples/data.csv --output ./practice-reportReconcile totals and two groups independently
- Compare summary.json and groups.csv with the original CSV lines. Check the numerator and denominator for averages.
- Inspect data-quality.md. Fix rejected values; exclude rows only with an explicit decision and retain the recorded exclusions.
- Test search, sort and slide navigation. A display filter does not remove groups from the underlying summary.
- Import group labels as text and retain protective prefixes. Exact values are in JSON; displayed rounding may differ.
Turn reconciled findings into a presentation — Carry the calculation limitations into the narrative.
Inspect the current example output → — Compare the visible result with the exported files and checks described in this section.
What the report cannot establish
A sum of catalog list prices is not sales revenue. A monthly count is not proof of adoption. The output describes the supplied rows; duplicate-event auditing, causal explanations and source-system accuracy require separate work. Deliver the source, exact calculations and quality notes with the report.