Sales & Revenue Performance Analytics Questions
Analyzing and reporting how the commercial engine is performing, from the descriptive-analytics seat. Covers defining and computing sales and revenue KPIs (MRR, ARR, bookings versus billings versus recognized revenue, NRR/GRR, logo and revenue churn, ACV, ARPA, DSO, run rate, magic number), including the SQL behind them; retention and cohort analysis of customers, leads and opportunities; sales funnel and pipeline analysis (stage conversion, win rate, deal velocity and sales cycle length, pipeline coverage, quota attainment, rep productivity, win/loss); executive and manager revenue dashboards and reporting design; and revenue data quality (reconciling CRM against billing, stage and closed-won definitions, overstated pipeline, multi-currency and revenue-recognition effects on reported metrics). Also covers explaining a worsening metric to stakeholders, resolving disputes over metric definitions, and spotting and handling metrics that incentives push people to game. Forecasting method, revenue-operations process and compensation design, CRM administration, marketing attribution, BI platform engineering, customer-success operations and unit-economics modelling are covered elsewhere.
How would you tell non-technical stakeholders that a revenue metric is moving the wrong way, such as rising churn, a drop in MRR or an 8% shortfall two weeks before quarter end? Describe the structure of your message.
Sample Answer
Direct answer
Lead with the news and its size, then evidence, cause, what you are doing and what you need from them, and when they will hear next. Non-technical stakeholders want to know three things quickly: how bad is it, why, and what happens now. I would send it early, with a range rather than false precision, and keep the numbers on one page.
Structure of the message
- Headline (one sentence). What moved, by how much, against what. "Quarter-to-date bookings are tracking 8% below target."
- Size and range. The number, the comparison (target, last quarter or last year) and a plausible range, with the basis stated.
- Cause, with confidence. What you know, what you suspect, what you have not yet checked. Do not present a guess as a finding.
- Impact. What it means in their terms (cash, targets, hiring plans, board commitments).
- Actions and owners. What is already underway, who owns it, by when.
- The ask or decision. Exactly what you need from this audience.
- Next update. A time and the metric that will be reported.
Worked example: an 8% shortfall two weeks before quarter end
Illustrative numbers: the quarterly target is 10.0 million USD of new bookings (signed contract value). Closed-won (deals already signed) to date is 7.1 million USD. The expected value of the remaining open deals is each deal's amount times its probability of winning, summed:
| Open deal | Amount (M USD) | Win probability | Expected value (M USD) |
|---|---|---|---|
| Deal 1 | 1.2 | 70% | 0.84 |
| Deal 2 | 1.0 | 50% | 0.50 |
| Deal 3 | 0.8 | 40% | 0.32 |
| Deal 4 | 0.5 | 30% | 0.15 |
| All other small deals | 2.9 | 10% | 0.29 |
| Total | 6.4 | 2.10 |
So the forecast is 7.1 + 2.1 = 9.2 million USD. The gap is 0.8 million USD, which is 0.8 / 10.0 = 8%. The range comes from shifting every win probability 10% lower or higher in relative terms: 7.1 + 2.1 x 0.9 = 9.0 and 7.1 + 2.1 x 1.1 = 9.4 (rounded).
Subject: Q3 bookings tracking 0.8M USD (8%) below target
Where we are. We have closed 7.1M of the 10.0M target. Open deals add an expected 2.1M, so the forecast is 9.2M, 0.8M short. I would plan for 9.0M to 9.4M, which assumes every win probability is 10% lower or higher than the sales leads' estimates.
Why. Three large deals slipped into next quarter and win rate on mid-size deals (the share of those deals that end in a win) is lower than plan. I have verified the three slips with the deal owners; I have not yet confirmed the win-rate change is more than normal variation.
What it means. The shortfall affects the quarter's number and the target we gave the board.
What we are doing. The sales leads are working the four largest open deals (Deals 1 to 4 in the table above) this week; I will confirm by Friday which could realistically close by quarter end.
What I need. A decision by Wednesday on whether to update the board outlook (the forecast we have shared with the board) now or after Friday's deal review.
Next update. Friday, 10:00, with the revised range.
The same structure for the other examples
| Element | Rising churn | A drop in MRR |
|---|---|---|
| Headline | Monthly churn rose from last month's level to this month's | MRR fell this month, the first decline in the period |
| Cause | Which segment, plan or cohort drives it | Churn, contraction or a billing delay: the MRR bridge shows which |
| Ask | Approve a retention action for the affected segment | Confirm whether to re-forecast the quarter |
The same structure, written out with illustrative numbers:
Subject: Monthly churn rose to 2.4% from 1.5%
Where we are. Monthly churn was 2.4% of 4,000 customers in October (96 customers), up from 1.5% in September (60). That is 36 extra cancellations.
Why. 27 of the 36 (75%) are small-business accounts won in the last year. I have confirmed this from cancellation reasons; I have not yet confirmed whether price or onboarding is the driver.
What I need. Approval for a three-week retention outreach pilot on that segment. Next update. Friday, with cancellation reasons for the 27.
Subject: MRR fell 30k in October, the first decline this year
Where we are. MRR (monthly recurring revenue) moved from 2.40M to 2.37M USD, down 30k or 1.25%.
Why. The MRR bridge, a table that walks opening MRR to closing MRR, shows: new +45k, expansion +20k, contraction (existing customers paying less) -35k, churn -60k. 45 + 20 - 35 - 60 = -30k, so churn and contraction together outweighed new business.
What I need. A decision on whether to re-forecast the quarter now. Next update. Friday, with the November outlook.
Trade-offs and pitfalls
- Burying the news after caveats; the first sentence should be the bad news.
- Jargon and chart-heavy messages. One headline number and one chart; the appendix holds the rest.
- False precision. Give a range and the assumption behind it.
- Blame. Describe causes as mechanisms (a segment, a stage, a process), not people.
- Silence until certain. Early notice with an honest range is worth more than late certainty.
- No next update. Stakeholders will invent their own timeline.
How would you compute dollar-based net retention by cohort when customers also pay metered usage and add-ons, upsell several times, and sometimes churn partially? Say how you handle each of those in the numerator.
Sample Answer
Direct answer
Net revenue retention (NRR) for a cohort is the recurring revenue today from customers who were in the cohort at the start, divided by what those same customers paid at the start. I would measure it per customer at two fixed dates (start and 12 months later), put every revenue stream (subscription, add-ons, metered usage) on the same annualized basis at both dates, and net everything at the customer level. New customers never enter. Each of the cases in the question has a specific treatment in the numerator, below.
Definitions
- ARR: annual recurring revenue, the annualized value of a customer's recurring fees.
- Cohort: customers grouped by when they became customers (for example start quarter).
- Logo churn: losing a customer entirely, counted by customers rather than dollars. Partial churn is not logo churn.
- Add-on attach: the share of customers that have bought an add-on.
- Run-rate: a customer's current level of revenue stated as a full year.
- Reactivated customer: one who left and later came back.
- Bridge: a table that starts at the cohort's starting revenue and walks to its ending revenue by adding expansion and subtracting contraction and churn.
- Expansion / contraction / churn: a customer's dollars go up, go down but stay above zero, or go to zero.
- GRR (gross revenue retention): like NRR but each customer is capped at its starting dollars, so expansion cannot hide losses.
How each case is handled in the numerator
| Case | Treatment |
|---|---|
| Metered usage | Include, but put it on a smoothed basis at both ends (trailing 3-month average annualized), so one spike month at the end does not inflate NRR. Report NRR with and without usage ("committed" vs "total") so volatile revenue is visible. |
| Add-ons | Include in the same customer's total. Add-on purchases are expansion, add-on cancellations are contraction. Also track add-on attach separately as a product view, never as a separate cohort. |
| Several upsells | Use the end-of-window snapshot per customer, not the sum of upsell events. Events double count when a later downgrade follows an earlier upsell. The snapshot gives the net answer, and a bridge (expansion, contraction, churn) is derived per customer by comparing start and end. |
| Partial churn | The customer stays in the cohort with a lower end value. That is contraction, not logo churn. Only a customer whose end value is zero counts as churned. |
Further rules: roll sub-accounts up to the parent customer, convert currency at a constant rate, keep reactivated customers in their original cohort, and tag price increases so they are not mistaken for adoption.
Worked example (illustrative, $k annualized)
Six customers from one cohort. Subscription and add-ons are annualized $k. Metered usage is given as the last three months of usage ($k per month) at each date; the code smooths it into an annualized figure by taking the trailing 3-month average and multiplying by 12. Each tuple is (subscription, add-ons, usage) at month 0 and month 12.
# Last three months of metered usage, in $k per month, at each snapshot date.
def annualize(last3):
return sum(last3) / 3 * 12 # trailing 3-month average, times 12 months
# customer: (subscription, add-ons, usage months) at month 0, then at month 12.
# Subscription and add-ons are already annualized $k. Add-ons are the customer's total add-on ARR.
raw = {
"A": ((100, 0, (1.5, 1.5, 2.0)), (100, 30, (2.0, 2.25, 2.25))), # two add-on upsells (10 + 20) summed in the add-on column
"B": ((60, 10, (0.5, 0.5, 0.5)), (60, 0, (0.25, 0.25, 0.5))), # partial churn: add-on cancelled
"C": ((40, 0, (0, 0, 0)), (0, 0, (0, 0, 0))), # full churn
"D": ((80, 0, (0.75, 0.75, 1.0)), (120, 0, (1.0, 1.25, 1.25))), # seat expansion
"E": ((50, 5, (1.25, 1.25, 1.25)), (50, 5, (0.25, 0.25, 0.25))), # usage fell
"F": ((30, 0, (0, 0, 0)), (30, 0, (0, 0, 0))), # flat
}
cohort = {c: tuple((s, a, annualize(u)) for s, a, u in snaps) for c, snaps in raw.items()}
start = sum(sum(m0) for m0, _ in cohort.values())
end = sum(sum(m12) for _, m12 in cohort.values())
grr_num = sum(min(sum(m0), sum(m12)) for m0, m12 in cohort.values())
rec_start = sum(m0[0] + m0[1] for m0, _ in cohort.values())
rec_end = sum(m12[0] + m12[1] for _, m12 in cohort.values())
print("start", start, "end", end, "NRR", round(end / start * 100, 1))
print("GRR", round(grr_num / start * 100, 1))
print("contracted-only start", rec_start, "end", rec_end, "NRR", round(rec_end / rec_start * 100, 1))
usage_s = sum(m0[2] for m0, _ in cohort.values()); usage_e = sum(m12[2] for _, m12 in cohort.values())
print("usage", usage_s, usage_e)
# One-off migration in the final month: last three months are 1, 1, 7 ($k)
print("last month x 12:", 7 * 12, " trailing 3-month average x 12:", annualize((1, 1, 7)))
Output from running that code:
start 426.0 end 442.0 NRR 103.8
GRR 85.0
contracted-only start 375 end 395 NRR 105.3
usage 51.0 47.0
last month x 12: 84 trailing 3-month average x 12: 36.0
The one-off migration line at the end shows why smoothing matters: a customer whose last three months are 1, 1 and 7 ($k) would read 7 x 12 = 84 from the last month alone, but 36 on the trailing average, a much smaller distortion that the next month's data corrects.
GRR here is (120 + 64 + 0 + 90 + 58 + 30) / 426 = 362 / 426 = 85.0%: each customer counts at the smaller of start and end (A 120, B 64, C 0, D 90, E 58, F 30).
Bridge: start 426, expansion +80 (A +36, D +44), contraction -24 (B -12 from a cancelled add-on and lower usage, E -12 from lower usage), churn -40 (C), end 426 + 80 - 24 - 40 = 442. So NRR is 103.8% and GRR is 85.0%. The 18.8-point gap is the tell: expansion from two customers is carrying a cohort that lost 15% of its starting dollars. Excluding usage, the NRR is 105.3%, and usage itself fell from 51 to 47.
Trade-offs and pitfalls
- NRR with usage can swing on seasonality. Compare same-calendar windows or use trailing averages on both ends.
- Always report GRR beside NRR.
- Do not compute NRR from billing events by summing deltas: renewals, credits and timing shifts create double counts.
- Define the denominator date carefully: customers who churn before the end date must still be in the denominator.
Define NRR and GRR, then compute both for a cohort that starts at $1,000,000 of ARR with $100,000 churned, $50,000 of contraction and $200,000 of expansion. What does each number say, and what does an NRR above 100% not tell you?
Sample Answer
Direct answer
NRR (net revenue retention) is the share of a starting cohort's recurring revenue that remains a year later, counting expansion, contraction and churn but excluding new customers. GRR (gross revenue retention) is the same, but counts only losses (churn and contraction) and ignores expansion, so it can never exceed 100%. For this cohort, NRR = 105% and GRR = 85%. An NRR above 100% says the existing base grew on its own; it does not say the base is healthy, broadly happy or growing evenly.
Definitions and the computation
All figures are annual recurring revenue (ARR) for the same customers over the same 12-month window.
NRR = (starting ARR - churned - contraction + expansion) / starting ARR
GRR = (starting ARR - churned - contraction) / starting ARR
- Churned: ARR from customers who left entirely. Contraction: ARR lost from customers who stayed but reduced (fewer seats, a downgrade). Expansion: ARR gained from the same customers (upsell, cross-sell, more seats, price increases).
Arithmetic:
- GRR = ($1,000,000 - $100,000 - $50,000) / $1,000,000 = $850,000 / $1,000,000 = 85%.
- NRR = ($1,000,000 - $100,000 - $50,000 + $200,000) / $1,000,000 = $1,050,000 / $1,000,000 = 105%.
What each number says
- GRR 85%: 15% of the starting revenue leaked away (10% through lost customers, 5% through shrinking ones). It measures how sticky the product is, with no help from upsell.
- NRR 105%: expansion of $200,000 more than covered the $150,000 of losses, so the same customers pay 5% more in total than a year ago. If NRR holds above 100%, the business grows without signing a single new customer.
- The gap, 20 points, is the expansion. A large gap means retention leans on upsell.
What an NRR above 100% does not tell you
- It can hide concentration. Three-account illustration: starting ARR $500,000 (account A), $300,000 (B), $200,000 (C), total $1,000,000. A expands to $800,000, B stays at $300,000, C churns to $0. NRR = ($800,000 + $300,000 + $0) / $1,000,000 = 110% and GRR = ($500,000 + $300,000 + $0) / $1,000,000 = 80%. A healthy-looking 110% is one account's growth covering a lost customer.
- It hides how many customers left. A lost customer shows up as dollars, not as a count (the logo count could be falling).
- It does not say why expansion happened: real adoption versus a one-time price increase, and whether it can repeat.
- It ignores new customers, so it is no measure of total growth.
- It depends on the cohort and window: young cohorts, large renewals clustered in one quarter, or currency moves can lift it temporarily.
Trade-offs and pitfalls
- Always report GRR next to NRR; the pair, not either alone, shows retention quality.
- Measure on the same customers at both ends (new customers are excluded from the numerator as well as the denominator), and keep the window explicit, for example trailing 12 months.
- Break NRR down by segment and customer size so one large account cannot carry the headline.
Gross revenue is still growing, but NRR has slid from 115% to 95% over three quarters. How do you work out what changed? Say what data and cuts you would look at first.
Sample Answer
Direct answer
Because NRR (net revenue retention: recurring revenue today from customers who were already customers a year ago, divided by what those same customers paid a year ago) ignores new customers, falling NRR alongside growing gross revenue (all revenue, including from newly won customers) means new customers are covering a base that is leaking or no longer expanding. I would work in this order: (1) confirm the metric itself did not change, (2) split NRR into expansion, contraction and churn to see which term moved, (3) localise the move by segment, cohort and renewal timing, (4) check leading indicators in the affected slice, then decide on an action for that slice.
Here, churn is revenue lost from customers who left, contraction is revenue lost from customers who stayed but pay less (downgrades, fewer seats, discounts), and expansion is extra revenue from existing customers (upsell, more seats, price rises). A cohort is a group of customers who started in the same period.
Step 1: rule out measurement artefacts
- Did the cohort definition, window, currency conversion, or billing system change? A migration that records renewals as new contracts will show as churn plus new logos.
- Did a plan restructure, acquisition or customer merge change how accounts are keyed? Duplicate accounts break the same-customer comparison.
- Check whether the earlier 115% was itself inflated, for example by a one-time price increase or a few large expansions.
Step 2: decompose NRR
NRR = 100% - churn% - contraction% + expansion%, all as a share of starting ARR. Illustrative numbers (not real data):
| Three quarters ago | Latest | |
|---|---|---|
| Churn | 6% | 11% |
| Contraction | 4% | 6% |
| Expansion | 25% | 12% |
| NRR | 100 - 6 - 4 + 25 = 115% | 100 - 11 - 6 + 12 = 95% |
Here the 20-point fall has three contributors: expansion halved (13 points), churn rose 5 points and contraction 2 points. What each says:
| If this term moved most | It points toward | First cut |
|---|---|---|
| Expansion fell | Fewer upsell or seat-growth events, a price increase that has lapped (it is now more than 12 months old, so it no longer lifts the year-over-year comparison), product adoption stalling | Expansion events per account by plan and tenure (months since signing); seat utilisation (seats in use divided by seats paid for) |
| Churn rose | Customers leaving at renewal | Churned ARR by renewal month, segment, acquisition cohort, reason code (the cancellation reason recorded when the customer left) |
| Contraction rose | Seat reductions, downgrades, discounting at renewal | Contraction by account size and product; compare to headcount or usage changes |
Step 3: localise
Query the customer-by-month MRR table joined to account attributes, and cut the NRR change by:
- Customer size band and industry (is it SMB only, or the large accounts?).
- Acquisition cohort or vintage (customers grouped by when they were won) and acquisition channel (did a newer cohort acquired through a different channel retain worse?).
- Contract type and renewal month (annual renewals cluster, so a slide over three quarters may be one large renewal wave, meaning a big batch of contracts all renewing in the same month).
- Plan or product, region and currency.
- Concentration: the top ten accounts' contribution to the NRR dollar change, because one or two large contraction events can drive the headline.
Worked cut (illustrative numbers, starting ARR of 10,000k, cut by acquisition cohort):
| Cohort | Share of starting ARR | NRR | Dollar effect vs holding flat at 100% |
|---|---|---|---|
| Won before 2025 | 50% (5,000k) | 105% | +250k |
| Won in 2025 via paid ads | 30% (3,000k) | 75% | -750k |
| Won in 2025 via partners | 20% (2,000k) | 100% | 0 |
| Total | 100% | 95% | -500k |
The 95% is 0.5 x 105 + 0.3 x 75 + 0.2 x 100 = 52.5 + 22.5 + 20.0 = 95.0. One cohort lost more dollars (750k) than the whole net shortfall (500k), so Step 4 starts with the paid-ads cohort, not the base as a whole.
Step 4: leading indicators and decision
For the slice that explains most of the drop, look at usage and seat utilisation, support volume, champion turnover (the customer's main internal advocate leaving), competitive losses and pricing-change timing. Then commit to an action: if the drop is concentrated in recent cohorts from one channel, tighten who the team sells to; if expansion fell because last year's price increase aged past 12 months and stopped adding to expansion, the 115% was the anomaly and the plan baseline (the NRR the revenue plan assumes) needs resetting; if churn is rising in accounts with falling usage, fund an adoption programme for them.
Trade-offs and pitfalls
- Do not start from reasons (competition, macro); start from where the dollars moved.
- Gross revenue still growing is not reassurance: it is new-logo spend masking a weaker base, and that is more expensive to sustain.
- What would flip my call: if Step 1 shows the metric definition changed, the premise goes away and the work becomes a restatement, not an investigation.
Monthly churn on $10M of ARR rises from 1.0% to 1.5% with no new sales. Roughly what ARR is left after twelve months, what assumptions does that rely on, and which levers would you examine first?
Sample Answer
Direct answer
About $8.3M of the $10M of ARR (annual recurring revenue) is left after twelve months at 1.5% monthly churn, assuming the rate applies to the remaining base each month and nothing is added. The calculation is $10M x (1 - 0.015)^12 = $8.34M. At the old 1.0% rate, the same math leaves $8.86M. The extra half-point of monthly churn costs about $0.52M of ARR a year, and the annualized churn rate goes from 11.4% to 16.6%.
The arithmetic
Churn compounds, because each month's loss is taken from what is left:
ARR12=ARR0×(1−c)12| Monthly churn | Retained fraction | ARR after 12 months | Annualized churn |
|---|---|---|---|
| 1.0% | 0.99^12 = 0.8864 | $8.86M | 11.4% |
| 1.5% | 0.985^12 = 0.8341 | $8.34M | 16.6% |
A tempting shortcut, 12 x 1.5% = 18% lost, gives $8.2M. That overstates the loss because the base is shrinking, so each month's 1.5% is taken from a smaller number (month 1 loses $150k, later months lose less). Month 1 at 1.5% is $10M x 0.015 = $0.15M, versus $0.10M at 1.0%. For a sensitivity check, 1.25% monthly gives 0.9875^12 x $10M = $8.60M, so the answer is roughly linear across this range.
Assumptions the answer relies on
- The churn rate is a dollar (ARR-weighted) rate, not a count of customers lost.
- It stays constant over all twelve months and applies evenly to every account.
- No expansion, no contraction tracked separately, and no new sales: this is a pure run-off of today's base.
- Churn is independent of customer age and size.
- Monthly churn is a meaningful rate. If most contracts are annual, customers cannot leave mid-term, churn lands at renewals, and a flat monthly rate is only an average of lumpy events. A renewal-calendar model is better in that case.
Which levers I would examine first
Order of investigation:
- Where the increase came from. Split by segment, plan, product, region and acquisition cohort. A rise concentrated in one cohort is a different problem than a broad rise.
- Few big accounts or many small ones. Compare logo (customer count) churn and dollar churn. If dollar churn rose and logo churn did not, a few large losses drive it.
- Voluntary vs involuntary. Failed payments and expired cards are fixable quickly with payment recovery.
- Timing. Did the rise coincide with a price change, a product change, a renewal wave or a competitor launch?
- Early-life churn. Recent customers leaving in months 1 to 3 points to onboarding and fit.
- Reason codes and usage before leaving. Declining usage predicts churn before the contract shows it.
First lever I would pull is whichever one the cut in step 1 and step 3 points to, with payment recovery first if involuntary churn is a meaningful part, since it is the cheapest fix.
Pitfalls
- Do not present the 12 x 1.5% shortcut as the answer.
- Do not call the $8.3M a forecast: it is a run-off scenario with no expansion or new business.
- A reader should see the number next to the 1.0% baseline, otherwise the damage looks abstract.
Unlock Full Question Bank
Get access to all Sales & Revenue Performance Analytics interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.