NetSuite Comparative Income Statement in Excel
Set two periods of your NetSuite P&L side by side in Excel and see how revenue, margin and every expense line moved.
Screen recording in Excel with on-screen captions. Caption 1: Insert the comparative P&L. On the Finsyte ribbon, Standard Reports › Income Statement › Comparative Income Statement adds a Comparative Income Statement sheet with a parameter block above two columns, D and E, both set to Headquarters (Consolidated). Caption 2: Set this year in column D. Column D’s Fiscal Year is set to FY 2025, Period Number to 12 and Period Range to YTD; column E follows the period settings, and the title line updates to As of December 31, 2025. Caption 3: Pick the year to compare. Column E’s Fiscal Year starts blank, and FY 2024 is picked from a list of fiscal years. Caption 4: Load Accounts. Load Accounts on the ribbon fills the sheet with the income statement accounts under FY 2025, FY 2024, Variance and % Variance headers. Caption 5: Variance and % Variance. Accounts with no FY 2024 balance show n/m in % Variance instead of an error. Scrolling down shows Net Income of $3,312,601 for FY 2025 against $2,053,749 for FY 2024, a variance of $1,258,851, or 61%.

Two periods of your P&L, with the change on every line
Revenue, cost of sales and expenses come from your NetSuite general ledger for both periods, and the Variance columns show which lines moved your margin.
- Income, Cost of Sales, Gross Profit and Expense for both periods, side by side
- Net Ordinary Income, Net Other Income and Net Income calculated in each column
- Variance and % Variance on every account, subtotal and calculated row
- Revenue shown as positive, with Income and Other Income sign-reversed
- A Net Income (Check) row under each period, pulled straight from NetSuite to confirm no account is missing
A static snapshot of a finished comparative income statement, so you can see the layout before you connect NetSuite.
From a blank sheet to a two-period P&L in four steps
Insert the template
On the Finsyte ribbon, choose Standard Reports › Income Statement › Comparative Income Statement. The sheet opens with its parameters above two period columns.
Choose the periods
In column D, choose the subsidiary, year and period, with PTD for one month or YTD for the year to date. Then pick column E’s Fiscal Year.
Load Accounts
Load Accounts returns your income and expense accounts in NetSuite’s hierarchy and fills both periods, with Gross Profit and Net Income calculated.
Roll forward each month
Expand the parameter rows and change Period Number in column D. Column E follows it, so both periods move to the new month and the formulas recalculate automatically.
Setup steps in the docs: Comparative Income Statement Template
How the NetSuite comparative income statement is built
Behind the comparative P&L are two columns of the same Finsyte function and a layer of plain Excel arithmetic on top. It’s built on the five rules for financial models that scale: parameters are kept apart from calculations, every Finsyte function sits in its own cell, and every total is an AGGREGATE.
The parameter block
Four required cells head each period column (Subsidiary, Fiscal Year, Period Number and Period Range) with Book beneath them. Optional rows narrow a column by department, class, location, item, entity, transaction type, currency, posted status or a custom segment. Template Parameters sets which of those rows the sheet includes. Every amount reads from the parameters above it, so change one and the formulas in its column recalculate automatically.
The account tree
Load Accounts pulls your income and expense accounts from NetSuite and lays them out the way a P&L reads: Ordinary Income/Expense, with Income, Cost of Sales, Gross Profit and Expense, then Net Ordinary Income, Other Income and Expenses, Net Other Income and Net Income. A Net Income (Check) row closes the statement: net income pulled straight from NetSuite, which should match the Net Income line above it. Each level of your hierarchy is an Excel outline group, so you can fold the sheet to gross profit and operating expense or open every expense account.
Loading from the top-level (Consolidated) subsidiary brings in every income and expense account, including ones only some entities use. In an entity’s own column, those lines show 0.
Two period columns, one function
Every amount is one call to GLAccountBalance. With all the optional filter rows turned on, one account’s cell in column D reads:
=FSN.GLAccountBalance(D$5,D$6,D$7,D$8,$B22,D$9,D$10,D$11,D$12,D$13,D$14,D$15,D$16,D$17)The dollar signs do the work. D$5 keeps the row fixed and $B22 keeps the column fixed, so in column E the same formula reads E$5 onward for the same account. Your sheet’s row numbers will differ, since they depend on your accounts and which filter rows you turned on.
You pick both fiscal years, since column E’s starts blank. The rest of column E follows column D through formulas like =$D7, so one Period Number drives both columns. For one month against the same month a year before, set Period Range to PTD. For two years to date, use YTD.
Variance and % Variance
Variance is column D minus column E:
=D20-E20% Variance expresses it as a share of the size of column E, so a loss turning into a profit reads as an improvement. It shows n/m if column E is zero:
=IF(E20=0,IF(D20=0,0,"n/m"),(D20-E20)/ABS(E20))Read them down the statement to see where margin went: whether revenue grew faster than cost of sales, and which expense lines outpaced revenue. To explain a line, right-click the amount and choose Drill Down. A new sheet breaks it down by department, class, location, entity, item or transaction line, using that cell’s parameters.
Subtotals, calculated rows and signs
Group totals are AGGREGATE formulas over the rows above them:
=AGGREGATE(9,0,D$20:D$29)Calculated rows repeat the subtotals they’re built from inside their own formula. Gross Profit, Income less Cost of Sales, looks like this:
=(AGGREGATE(9,0,D$13:D$18)-AGGREGATE(9,0,D$21:D$25))AGGREGATE ignores nested subtotals, so no total counts another twice. Income and Other Income are sign-reversed so revenue reads as a positive number. Behind a reversed line is the familiar call with a minus in front, =-FSN.GLAccountBalance(…), and right-click › Switch Sign makes the same change on any account you choose.
Change what’s compared
After Load Accounts the parameter rows fold away. Expand them with the outline button and overwrite a cell in column E:
- Department, to set two departments’ costs side by side for the same period
- Subsidiary, to compare margins across entities
- Period Number, to compare this month with last month in the same year
- Class, Location or a custom segment, for product lines or regions
Any segment works, including custom segments such as Activity Code, and you can combine several in one column. Each column’s formulas recalculate automatically. For a single-period P&L by month, department or class, see the NetSuite income statement template.
It’s Excel, so take the analysis further
The template gets you started. In Excel, you make it your own: every amount is a cell formula, so margin percentages, EBITDA or a budget column can sit right beside the two periods. A refresh brings both periods up to date, and your rows follow.
- Gross margin % for each period
- Operating expense as a % of revenue
- EBITDA and other management rows
- A third period, such as two years back
- Variance commentary for the review
NetSuite comparative income statement: FAQ
- QHow do I compare two years of income statements from NetSuite in Excel?
- Open the Comparative Income Statement template, complete column D, and choose the two fiscal years. Pick PTD for a single month or YTD for the year to date. Load Accounts then fills both periods and the variance columns.
- QCan I compare subsidiaries or departments instead of years?
- Yes. Load the template with column D on the top-level (Consolidated) subsidiary so every account comes in. Then set the same year in both columns and pick a different Subsidiary or Department for column E. Each column shows its subsidiary’s own currency by default; when the two differ, set both columns’ Currency to the top-level parent’s currency. An entity’s column shows 0 for accounts it can’t use.
- QHow are Variance and % Variance calculated?
- Variance takes each column E amount from the column D amount on the same line. % Variance states that difference as a share of the size of column E, so it carries the same sign as Variance, or n/m where column E is zero. Copy either formula to rows you add yourself and it works the same way.
- QCan I add a third period?
- Yes. Copy a period column, paste it next to the others, and set its Fiscal Year, Period Number or Period Range. Every amount is a separate formula, so the first two periods don’t change.
- QWill my own formulas survive a refresh?
- Yes. Refresh Data recalculates the Finsyte functions, and your margin rows and other formulas recalculate with them. Avoid Load Accounts on a customized model: it would rebuild the template’s columns from scratch and lose your layout.
Try the comparative income statement template with your own NetSuite data
30-day free trial with every Finsyte template included. No credit card required.
Related templates
- NetSuite Income Statement Template for Excel
- NetSuite Balance Sheet in Excel
- NetSuite Cash Flow Statement in Excel
- NetSuite Trial Balance in Excel
- NetSuite Budget vs Actual in Excel
- Five rules for financial models that scale
- All NetSuite Excel report templates
- Comparative Income Statement Template: setup steps in the docs