The model is only as good as the table you hand it. A variance comment is a claim about two numbers and a cause, so the export has to make the numbers unambiguous and the cause traceable to a note a human wrote. The standard layout puts budget in one column, actual in the next, variance dollars and variance percent in two more, with commentary cells underneath, and most FP&A teams already reuse the same template every month, as described in a Xero-to-Excel variance guide. That layout is exactly what an LLM reads well, so copy it rather than inventing a new one.
Start from a closed month. A missing journal entry creates a phantom variance, and actuals and budget must sit on the same general ledger accounts or reporting groups before any comparison means anything, as the five-step variance method notes. Then aggregate: one row per reporting line, not one row per transaction. If your ledger export has 4,200 lines for the month and 38 accounts, the model should see 38 rows. Anything finer gives it room to invent a cause from a single invoice.
Include a free-text notes column. This is the single highest-leverage decision in the whole workflow. Commentary that names and quantifies drivers is what earns credibility with a board, while a line-by-line restatement of numbers gets skipped, as the commentary framework guide explains. Your notes are the only place the model can learn that the cloud bill rose because of a migration, or that two enterprise deals slipped two weeks. If the notes are empty, the draft will either say nothing useful or guess.
A workable column set:
| Column | Example | Why the model needs it |
|---|---|---|
| account_code | 6100 | Stable key, keeps rows distinguishable |
| line_item | Cloud and software | Readable label for the narrative |
| actual | 486000 | The fact |
| plan | 402000 | The benchmark |
| variance_dollars | 84000 | Pre-computed, so the model cannot mis-subtract |
| variance_pct | 20.9 | Pre-computed, same reason |
| favorable_unfavorable | U | A positive cost variance is bad news, per step 3 of the method |
| period_basis | Mar, monthly | Tells the model whether to talk in months or YTD |
| ledger_note | Migration of analytics cluster completed two months early | The only source of the why |
Compute variance dollars and variance percent in the spreadsheet, not in the prompt. Xero's own guidance computes variance as actual minus budget and variance percent as (actual minus budget) divided by budget, showing a dash when the budget is zero, as documented by the same Xero guide. Do the same, and handle the zero-budget case in the sheet so the model never sees a division error.



