Guide · Variance analysis · 7 minute read

Explain what changed. Keep the evidence attached.

A month-over-month total tells you that something moved, not where the movement came from or whether the comparison is still trustworthy. A defensible CSV variance analysis connects the headline delta to category drivers, row denominators, schema changes, and completeness checks so another person can reproduce the conclusion.

Before the math

Define the comparison contract

Name one export as the baseline and the other as the current period. Then state the metric aggregation and grouping in plain language: for example, “sum Revenue by Region” or “count Orders by Status.” That sentence is the contract every number in the report must follow.

Use files produced by the same system and reporting grain where possible. A weekly order export cannot be compared directly with a monthly invoice export just because both contain an Amount column. Labels, row meaning, currency, and date coverage are part of the definition, even when they are not columns in the final driver table.

→ Open the baseline-versus-current workspace

Headline

Calculate absolute and percentage change safely

Absolute change is current − baseline. Percentage change is that delta divided by the absolute baseline. Show both: the percentage communicates scale, while the absolute number tells the reader what actually moved.

A zero baseline has no finite percentage denominator. Calling a move from 0 to 40 “100% growth” is mathematically wrong and materially misleading. Label it New or No baseline; if both values are zero, label it No change. Negative baselines also need the visible formula because sign conventions differ across finance and operations teams.

Breakdown

Rank category drivers without claiming causality

Aggregate the chosen metric for every category in the union of both files, not just categories that survived into the current export. For each region, product, channel, or status, calculate baseline, current, absolute delta, and percentage change. New and disappeared categories should be explicit states rather than silent zeroes.

Contribution to net change is category delta ÷ total delta. It can exceed 100% or be negative when gains and losses offset each other; that is useful evidence, not an error. When total delta is effectively zero, contribution percentages are undefined, so rank by absolute category movement instead. The largest observed driver explains arithmetic concentration, not business causality.

Trust check

Check schema and completeness before explaining the result

A convincing variance can still be invalid if the export changed. Compare headers to find added or removed columns and compare inferred types only for columns present on both sides. A metric that was numeric last month but text this month may disappear from the shared-metric list even when its header is unchanged.

For every shared column, compare missing-value rates using each file's own row count as denominator. Report the movement in percentage points: a change from 5% missing to 12% missing is +7 points, not +7%. Large completeness changes can explain apparent metric movement or warn that the two periods are no longer comparable.

→ Profile either snapshot in more detail

Recurring workflow

Save the setup, never the old result

A recurring variance report needs stable instructions: the two labels, metric column, and grouping column. Save those names as a data-free setup, then arm it before loading the next pair of exports. If a selected column is missing, the comparison should name the unavailable field and keep a visible fallback rather than fabricate continuity.

The setup should not contain filenames, rows, values, totals, deltas, categories, or evidence. That separation lets a team share the method without accidentally sharing last month's customer or finance data. Use a reusable Ask CSV recipe when the job is to rerun the same questions on one new file; use CSV Compare when the decision depends on old-versus-new movement.

Handoff

Export the conclusion and the evidence together

A management-ready report starts with the headline variance, then lists deterministic findings, category drivers, completeness changes, and schema drift in that order. Include the selected labels, metric, dimension, row counts, and formula so the reader does not need your browser tab to interpret the numbers.

Standalone HTML is useful for a printable handoff; Markdown works well in repositories, wikis, and tickets; driver CSV preserves the complete category evidence for further review. A data-in-link share URL is convenient only for focused, non-sensitive datasets and should always disclose that the source content is intentionally embedded in the fragment.

→ Turn one exported evidence table into a chart

Common questions
  • ·

    What is variance analysis in a CSV report?

    It is a reproducible comparison of a baseline and current export: headline absolute and percentage change, category-level drivers, schema changes, and data-quality evidence.

  • ·

    How do I calculate percentage variance when the baseline is zero?

    Do not calculate a finite percentage. Label a non-zero current value as New or No baseline; label two zero values as No change.

  • ·

    Can contribution to change be greater than 100%?

    Yes. One category can contribute more than the net change when another category offsets part of its movement. Negative contributions are possible for the same reason.

  • ·

    What is the difference between percent and percentage-point change?

    Percent change divides a delta by its baseline. Percentage-point change subtracts two rates directly, such as missing values moving from 5% to 12%, which is +7 points.

  • ·

    Should I use CSV Compare or CSV Diff?

    Use CSV Compare for totals, drivers, schema, and completeness across two snapshots. Use CSV Diff when you need added, removed, or changed records and cells.

  • ·

    Does a saved comparison setup contain my data?

    No. It stores only a version, name, two labels, metric column name, and dimension column name. Source rows and calculated results stay in the current tab.

Keep going