A regression of monthly operating costs against revenue over 23 closed periods (Sep 2024 – Jul 2026), decomposing the cost base into its fixed and variable parts — and translating that split into the profit-amplification factor the current margin never shows you.
The cost base is roughly half variable, half fixed at current volume: each incremental revenue dollar carries ~48.8¢ of cost, while ~$368K/month is spent before the first sale. That structure amplifies revenue changes into profit changes by a factor of 2.86 at the July 2026 run-rate ($1.11M/mo): a −10% revenue month cuts operating profit ~29%; a +10% month adds ~29%.
The more interesting story is the trend: a year ago, at ~$870K/mo revenue, the same cost structure produced a DOL of roughly 4.2× and a margin of safety of only ~19%. Revenue growth since then hasn't just added profit — it has structurally de-risked the P&L, because every dollar above the fixed-cost hurdle dilutes the leverage. The inverse is equally true: the first ~$390K of any revenue decline is absorbed at a punishing 51¢ of profit per dollar lost, and the business breaks even at ~$719K/mo — a level it last saw two years ago.
Nearly all of the variability lives in COGS (slope 0.44, R² 0.62). Operating expenses are almost pure fixed cost (slope 0.05, R² 0.06) — opex simply does not flex with sales. That is where the leverage comes from, and where any deliberate re-shaping of the risk profile would have to happen.
Fixed costs act as the pivot point of a lever. The further the fulcrum sits from the profit end (i.e., the bigger the fixed block relative to contribution), the more each revenue wiggle is amplified.
Ordinary least squares on 23 monthly observations. y = total operating cost
(COGS + operating expense, GL account types COGS + Expense);
x = revenue (Income + OthIncome). Financing items (OthExpense, ~$2K/mo interest) excluded.
Splitting the regression by cost layer shows the two P&Ls hiding inside the P&L: COGS flexes, opex does not.
DOL is not a constant — it is a hyperbola that explodes as revenue approaches breakeven. This chart is the risk map: where you sit on the curve matters more than the current margin.
Applying the fitted cost function to the July 2026 run-rate ($1,106K revenue, $198.5K model operating profit). Revenue moves on the left, amplified profit response on the right.
| Revenue scenario | Monthly revenue | Operating profit | Δ Profit | Amplification |
|---|
Each active cost account regressed individually against revenue, then classified: Variable tracks revenue tightly, Mixed partially, Fixed not at all. Six accounts carry essentially all of the variability.
| Acct # | Account | Class | Avg $/mo | Slope (¢/rev $) | Corr. r | % Variable |
|---|
The model's misses are small (SE = 3.1% of mean cost) and patternless (DW = 2.35) — but the misses themselves carry information.
Everything below is reproducible against the live GL. Queries follow this account's house SuiteQL
conventions (elimination subsidiary excluded via transactionline.subsidiary, posting transactions only).
OthExpense (interest, ~$1.9K/mo — a financing
cost, invariant to sales) and income tax are excluded; including them changes the slope by <0.002.SUM(−tal.amount)).
OthIncome is negligible (<$150 total in the window).transactionline.subsidiary because transaction.subsidiary is not exposed to SuiteQL in this account.SELECT
ap.id AS period_id,
ap.periodname AS period_name,
TO_CHAR(ap.startdate, 'YYYY-MM-DD') AS start_date,
a.accttype AS acct_type,
ROUND(SUM(-tal.amount), 2) AS signed_amount
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN transactionline tl ON tl.transaction = t.id AND tl.id = tal.transactionline
JOIN account a ON tal.account = a.id
JOIN accountingperiod ap ON t.postingperiod = ap.id
WHERE t.posting = 'T'
AND ap.isquarter = 'F' AND ap.isyear = 'F'
AND tl.subsidiary <> 4 -- exclude xElim (house rule)
AND a.accttype IN ('Income','OthIncome','COGS','Expense','OthExpense')
GROUP BY ap.id, ap.periodname, TO_CHAR(ap.startdate,'YYYY-MM-DD'), a.accttype
ORDER BY TO_CHAR(ap.startdate,'YYYY-MM-DD'), a.accttype
SELECT
TO_CHAR(ap.startdate, 'YYYY-MM') AS month,
a.id AS account_id, a.acctnumber, a.fullname, a.accttype,
ROUND(SUM(tal.amount), 2) AS cost_amount
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN transactionline tl ON tl.transaction = t.id AND tl.id = tal.transactionline
JOIN account a ON tal.account = a.id
JOIN accountingperiod ap ON t.postingperiod = ap.id
WHERE t.posting = 'T'
AND ap.isquarter = 'F' AND ap.isyear = 'F'
AND ap.startdate >= TO_DATE('2024-09-01','YYYY-MM-DD')
AND ap.startdate < TO_DATE('2026-08-01','YYYY-MM-DD')
AND tl.subsidiary <> 4
AND a.accttype IN ('COGS','Expense','OthExpense')
GROUP BY TO_CHAR(ap.startdate,'YYYY-MM'), a.id, a.acctnumber, a.fullname, a.accttype
ORDER BY a.accttype, a.acctnumber, TO_CHAR(ap.startdate,'YYYY-MM')
WITH rev AS (
SELECT t.postingperiod AS pid, SUM(-tal.amount) AS x
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN transactionline tl ON tl.transaction = t.id AND tl.id = tal.transactionline
JOIN account a ON tal.account = a.id
JOIN accountingperiod ap ON t.postingperiod = ap.id
WHERE t.posting = 'T' AND ap.isquarter = 'F' AND ap.isyear = 'F'
AND ap.startdate >= TO_DATE('2024-09-01','YYYY-MM-DD')
AND ap.startdate < TO_DATE('2026-08-01','YYYY-MM-DD')
AND tl.subsidiary <> 4
AND a.accttype IN ('Income','OthIncome')
GROUP BY t.postingperiod
),
cost AS (
SELECT t.postingperiod AS pid, tal.account AS aid, SUM(tal.amount) AS y
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN transactionline tl ON tl.transaction = t.id AND tl.id = tal.transactionline
JOIN account a ON tal.account = a.id
JOIN accountingperiod ap ON t.postingperiod = ap.id
WHERE t.posting = 'T' AND ap.isquarter = 'F' AND ap.isyear = 'F'
AND ap.startdate >= TO_DATE('2024-09-01','YYYY-MM-DD')
AND ap.startdate < TO_DATE('2026-08-01','YYYY-MM-DD')
AND tl.subsidiary <> 4
AND a.accttype IN ('COGS','Expense','OthExpense')
GROUP BY t.postingperiod, tal.account
)
SELECT c.aid, COUNT(*) AS n,
ROUND(SUM(r.x),2) AS sx, ROUND(SUM(c.y),2) AS sy,
ROUND(SUM(r.x*c.y),2) AS sxy,
ROUND(SUM(r.x*r.x),2) AS sxx, ROUND(SUM(c.y*c.y),2) AS syy
FROM cost c JOIN rev r ON r.pid = c.pid
GROUP BY c.aid
ORDER BY SUM(c.y) DESC
-- Note: Oracle's REGR_SLOPE / CORR are rejected by this account's SuiteQL
-- ("Invalid or unsupported search"), so sum terms are computed server-side
-- and the OLS algebra finished client-side. acctname is NOT_EXPOSED here; use fullname.
b = Σ(x−x̄)(y−ȳ) / Σ(x−x̄)² # slope = variable cost ratio = 0.48748 a = ȳ − b·x̄ # intercept = fixed cost/month = 368,417 R² = 1 − SSE/SST # 0.7752 SE(b) = s/√Σ(x−x̄)² where s²=SSE/(n−2) # 0.0573 → t = 8.51, p < 0.0001 95% CIs use t(0.975, df=21) = 2.080 Durbin–Watson = Σ(eᵗ−eᵗ⁻¹)²/Σe² # 2.35 → no serial correlation Validation: independent OLS per cost account, summed across 51 accounts: Σ slopes = 0.4903 (vs 0.4875 top-down, Δ 0.6%) Σ intercepts = $365,938 (vs $368,417 top-down, Δ 0.7%) ✓