Flux & Variance
Flux analysis example: a revenue account and a receivables account worked through
Two accounts, start to finish — what to pull, what the pivot shows, which drivers to name, and the commentary that comes out the other end.
Most explanations of flux analysis stop at the method. This one runs two accounts all the way through, because the part that's actually hard isn't knowing you should explain a variance — it's knowing where to look and when to stop.
All figures below are illustrative and the entity is synthetic. No company data appears anywhere on this page. The shapes are realistic; the numbers are made up to tie cleanly.
The setup
Northwind Trading is a products business selling through retailers and online marketplaces. Close for August 2026, comparing against July. Thresholds are set at $50,000 and 10 percent — an account flags only if it exceeds both, which keeps the queue to things worth a sentence.
Example 1: a revenue account (income statement)
Product revenue came in at $2,413,500 against $1,985,000 in July. That's a $428,500 increase, about 21.6 percent — past both thresholds, so it needs commentary.
The pull
Because income statement accounts reset each period, one month of data only tells you that month's total. You need both. Pull the GL detail for July and August together, pivot it with the date as the column field and customer as the row field, then add a column for the difference and sort by it.
Sorting by the difference rather than by size is the step that saves the most time. The largest customers aren't necessarily the ones that moved.
What the pivot showed
| Customer | July | August | Change |
|---|---|---|---|
| Big-box retailer A | 412,000 | 724,000 | +312,000 |
| Online marketplace B | 338,500 | 525,000 | +186,500 |
| Regional distributor C | 94,000 | — | (94,000) |
| All other customers | 1,140,500 | 1,164,500 | +24,000 |
| Total | 1,985,000 | 2,413,500 | +428,500 |
Three lines account for nearly all of it, which is typical for revenue — movement tends to concentrate in a handful of customers rather than spreading evenly.
Notice the third row. Distributor C billed nothing in August after $94,000 in July. A pivot sorted by change surfaces that immediately; scanning a transaction list would not, because the absence of activity leaves no line to scan.
Checking the drivers before writing
| Driver | Amount |
|---|---|
| Retailer A seasonal reset order ahead of Q4 | +312,000 |
| Marketplace B promotional period volume | +186,500 |
| Distributor C placed no order in August | (94,000) |
| All other customers, net | +24,000 |
| Drivers named | +428,500 |
| Unexplained residual | 0 |
Had the write-up stopped after the two increases, the residual would be $70,000 unexplained — and the commentary would have read as complete while missing a customer who stopped ordering entirely. That's the case the residual check exists to catch.
Four sentences, every number sourced, the offset named rather than buried, and nothing left over. The last sentence matters: it tells the reviewer the remainder was looked at and found unremarkable, rather than leaving them to wonder.
Example 2: accounts receivable (balance sheet)
Trade receivables closed August at $2,925,450 against $2,140,000 at July month end — a $785,450 increase, about 36.7 percent.
The pull is different here
This is the part people get wrong coming from the income statement. A balance sheet account carries forward, so July's activity is already sitting in the opening balance. You don't need July's detail. August's activity is the movement.
So: pull August GL detail for the account, and pivot by transaction type rather than by customer. The first question isn't who — it's what kind of activity moved the balance.
| Transaction type | Amount |
|---|---|
| New invoices billed | +3,847,200 |
| Cash receipts applied | (3,015,300) |
| Credit memos and returns | (41,600) |
| FX revaluation, foreign-currency invoices | (4,850) |
| Net movement | +785,450 |
| Unexplained residual | 0 |
The second-level question
That table explains the mechanics but not the business. Billings exceeded collections by roughly $830,000 — the useful question is why.
Here it connects back to the first example: the same two customers that drove the revenue increase were invoiced late in the month, so those receivables hadn't yet come due by 8/31. That's a timing effect, not a collections problem, and saying which one it is matters more than the numbers.
A reviewer's next question is nearly always whether the balance is aging. If the increase is recent billings, that's normal growth. If it's old invoices that haven't been collected, that's a different conversation and probably an allowance question.
What the two examples have in common
The mechanical steps differ — two periods versus one, customer pivot versus transaction-type pivot — but the shape is identical:
- Pull the right data for the comparison you're running.
- Pivot on the dimension where a change means something about the business.
- Sort by change, not by size.
- Name drivers until the residual closes.
- Say what the movement means, not just what it was.
Step four is where most commentary falls short, and it's the only step you can check arithmetically.
You can run a review like this one yourself, step by step: the same company and product revenue accounts (the receivables detail differs between the two pages), with every movement, driver and residual computed as it runs, and an export you can break to see what happens when the file is incomplete.
How this looks in other businesses
The examples above are a products business. The method transfers; the pivot dimension changes.
Software and subscriptions — pivot revenue by plan, contract, or billing type rather than by customer. New bookings, expansions, and churn are the usual driver categories, and they behave differently enough that separating them is worth the extra step.
Services — pivot by engagement or project. Utilization and rate tend to explain more than customer count does.
Project and milestone-billed businesses carry a genuine structural difference worth knowing about. When revenue is recognized before you have an unconditional right to bill, the amount sits in a contract asset rather than in receivables — under ASC 606, a receivable requires an unconditional right to payment, where only the passage of time stands in the way. The contract asset converts to a receivable once that right becomes unconditional.
Practically, that means two things for flux. Receivables gains a driver line for transfers in from contract assets as milestones are reached. And the contract asset account is its own flux, explained by work performed against work billed — a different question from the billed-versus-collected one above.
Seasonal businesses of any kind get more from a same-month-prior-year comparison than from month over month, because it holds the season constant. A month-over-month comparison across a holiday selling period produces large movements that are entirely expected, and explaining them one at a time tells nobody anything.
If you work this in Excel: the free flux template flags what needs explaining and shows the residual your drivers don't cover. The CloseOps Flux & Variance System ($79) starts from your trial balance instead: confirm each account's classification and it builds the income statement and balance sheet flux statements, then ranks what to investigate.
Related: flux analysis vs variance analysis, what flux analysis is, income statement flux analysis, balance sheet flux analysis, and the free Excel template these examples are set up for.
Found something wrong or missing? Tell me here — anonymous, thirty seconds.