预算与实际差异分析 Skill
开展严谨的期末预算与实际分析。此 skill 指导 Sam Ledger 提取实际数据、对照预算、计算差异、识别根因、撰写管理层分析说明并更新重预测。
---
此 Skill 的适用场景
触发短语:
- "Run budget vs. actual for [month/quarter]"
- "Explain our variances this month"
- "Why did we miss/beat revenue?"
- "Prepare the management report for [period]"
- "Update the rolling forecast based on actuals"
- "Board needs BvA commentary"
- "What drove the EBITDA miss?"
- "Reforecast the rest of the year"
不适用场景:
- 编制初始预算——使用
startup-financial-model - 税务申报或税项拨备工作——使用合规工作流
- 实时记账或交易分类——使用
qbo-automation或expense-categorization - 涉及内部交易抵销的多实体合并(需要专用合并工具)
- 战略规划或跨年度长期规划(LRP)
---
核心概念
差异类型
| 类型 | 公式 | 含义 | |---|---|---| | 绝对差异 | 实际 − 预算 | 金额差额 | | 百分比差异 | (实际 − 预算)/ 预算 × 100 | 相对于预算的幅度 | | 有利(F) | 收入:实际 > 预算 / 费用:实际 < 预算 | 优于计划 | | 不利(U) | 收入:实际 < 预算 / 费用:实际 > 预算 | 劣于计划 |
重要性阈值(默认值——按具体项目自定义)
Revenue line items: ≥ $5,000 or ≥ 5% of budgeted line → investigate
Expense line items: ≥ $2,500 or ≥ 10% of budgeted line → investigate
Total EBITDA: ≥ $10,000 or ≥ 5% of budgeted EBITDA → board commentary required
YTD cumulative: Carry forward monthly variances; flag if YTD > full-year materiality
差异根因——分类体系
收入差异:
- 数量差异:销量/客户数多于或少于计划
- 价格/费率差异:ASP 或定价偏离假设
- 组合差异:产品/细分市场组合与模型设定不同
- 时间差异:交易在非计划期间成交(提前或延后)
- 新增与存量:特定客户群表现高于或低于预期
费用差异:
- 人员到岗时间:招聘晚于或早于预算安排
- 承包商/供应商:支出超出或低于计划
- 一次性项目:预算中未包含的非经常性费用
- 随业务量变动:COGS、销售佣金随收入规模变化
- 定价/通胀:模型未考虑供应商价格变化
---
分步工作流
步骤 1:收集输入
Required:
□ Period (Month, Quarter, YTD)
□ Budget/forecast file (CSV, Sheets, or typed data)
□ Actuals file or QBO export (same period, same account mapping)
□ Chart of Accounts mapping (if budget and actuals use different labels)
□ Materiality threshold (use defaults if not specified)
□ Audience (internal management, board, investors)
Optional:
□ Prior period actuals (for trend context)
□ Prior year same period (for YoY context)
□ Existing narrative from last period
步骤 2:规范化数据
将实际数据映射到预算科目。标准损益表映射:
Budget Label → QBO/Actuals Equivalent
-------------------------------------------------
Revenue → Total Income
COGS → Cost of Goods Sold / Direct Costs
Gross Profit → (calculated)
Sales & Marketing → Advertising, Sales Commissions, Marketing Expenses
R&D / Engineering → Contract Labor (tech), Software Tools
G&A → Payroll (admin), Legal, Accounting, Insurance
Total OpEx → (sum of above)
EBITDA → (Gross Profit − Total OpEx)
步骤 3:计算差异
对于每个科目:
# Variance calculation logic
for each line_item:
absolute_var = actual - budget
pct_var = (actual - budget) / abs(budget) * 100 # handle $0 budget edge case
if is_revenue_line:
favorable = actual > budget
else: # expense line
favorable = actual < budget
flag = abs(pct_var) >= threshold_pct or abs(absolute_var) >= threshold_dollar
步骤 4:构建差异表
标准输出格式:
PERIOD: March 2026 | Budget vs. Actual
Line Item | Budget | Actual | $ Var | % Var | F/U | Flag
-------------------|-----------|-----------|-----------|--------|-----|------
REVENUE | | | | | |
Product Revenue | $120,000 | $108,500 | ($11,500) | -9.6% | U | ⚠️
Service Revenue | $30,000 | $34,200 | $4,200 | +14.0% | F | ⚠️
Total Revenue | $150,000 | $142,700 | ($7,300) | -4.9% | U |
| | | | | |
COGS | $45,000 | $43,100 | $1,900 | +4.2% | F |
Gross Profit | $105,000 | $99,600 | ($5,400) | -5.1% | U | ⚠️
Gross Margin % | 70.0% | 69.8% | -0.2pp | | |
| | | | | |
OPERATING EXPENSES | | | | | |
S&M | $25,000 | $27,400 | $2,400 | +9.6% | U | ⚠️
R&D | $20,000 | $18,500 | ($1,500) | -7.5% | F |
G&A | $15,000 | $16,200 | $1,200 | +8.0% | U |
Total OpEx | $60,000 | $62,100 | $2,100 | +3.5% | U |
| | | | | |
EBITDA | $45,000 | $37,500 | ($7,500) | -16.7% | U | 🚨
EBITDA Margin | 30.0% | 26.3% | -3.7pp | | |
步骤 5:根因分析
对每项标记的差异进行深入分析:
收入未达标示例(产品收入 -$11,500 / -9.6%):
Root cause analysis:
- Volume: Closed 8 deals vs. 10 budgeted = -2 deals
- Price: Avg deal size $13,563 vs. $12,000 budget → +$1,563 per deal (favorable mix)
- Net: 2 fewer deals × $12,000 ASP = -$24,000 volume miss
+ 8 deals × $1,563 price premium = +$12,500 price/mix offset
= ($11,500) net as reported ✓
Assessment: Volume issue, not pricing. Sales pipeline slipped — 2 deals moved to April.
S&M 超支示例($2,400 / +9.6% 不利差异):
Root cause analysis:
- Planned: $15k paid ads + $10k salaries
- Actual: $15k paid ads + $10k salaries + $2,400 conference registration (unbudgeted)
- Classification: One-time / non-recurring — will not repeat next month
Assessment: Benign. Budget for next year; no action required.
步骤 6:管理层分析说明
按以下结构为每项重大差异撰写说明:
[LINE ITEM] — [VARIANCE DIRECTION] by $[AMOUNT] ([PERCENT]%)
WHAT: [What the number shows in plain English]
WHY: [Root cause — specific, not generic]
ACTION: [What we're doing about it, or why no action needed]
OUTLOOK: [Impact on full-year forecast]
分析说明示例:
EBITDA——不利差异 $7,500 (-16.7%)
情况:三月 EBITDA 为 $37,500,比 $45,000 的预算低 $7,500,原因是收入不足,部分被较低的研发支出抵销。
原因:由于 2 笔企业交易延至四月,产品收入比预算低 $11,500(销售管线已确认,交易并未流失)。S&M 因一次性会议报名费超出预算 $2,400。研发因一项承包商合作延迟启动而产生 $1,500 的有利差异。
行动:预计这 2 笔延期交易将在四月成交(均处于最终合同阶段)。会议报名费已计入费用,不会重复发生。研发承包商现已到岗;预计从四月开始发生全额支出。
展望:调整 Q2 预测,将这 2 笔延期交易计入季度前段。全年 EBITDA 预测维持 $540,000 不变。
步骤 7:更新滚动预测
分析实际数据后,更新本年度剩余期间的预测:
Reforecast logic:
1. Lock actuals for closed periods (do not re-budget history)
2. Roll forward: identify permanent vs. timing variances
- Timing: shift to next period (deal slippage, late hire)
- Permanent: adjust full-year assumption (market softness, new run rate)
3. Update full-year totals:
- YTD actuals + remaining budget (adjusted)
- Recalculate runway/cash if applicable
4. Flag changes from last forecast:
- Revenue: +/- $X vs. prior forecast
- EBITDA: +/- $X vs. prior forecast
- Cash EOY: +/- $X vs. prior forecast
重预测汇总表:
| Original | Prior | Current | Change
| Budget | Forecast | Forecast | (vs Prior)
-------------------|-----------|-----------|-----------|----------
Full-Year Revenue | $1,800,000| $1,750,000| $1,762,000| +$12,000
Full-Year EBITDA | $540,000 | $510,000 | $512,500 | +$2,500
Year-End Cash | $850,000 | $790,000 | $793,000 | +$3,000
---
输出格式
1. 管理报告(叙述 + 表格)
完整分析说明,包含差异表、根因和重预测。供 CFO/CEO/董事会使用。
2. BvA 快报(1 页)
仅包含三个部分:
- 核心 KPI:收入、毛利率、EBITDA、现金(实际与预算对比,每项一行)
- 前 3 项差异及各自的一句话解释
- 重预测相对上次预测的变化
3. 结构化 JSON(用于下游处理)
{
"period": "2026-03",
"period_type": "month",
"generated_at": "2026-04-02",
"summary": {
"total_revenue_budget": 150000,
"total_revenue_actual": 142700,
"total_revenue_variance_abs": -7300,
"total_revenue_variance_pct": -4.87,
"ebitda_budget": 45000,
"ebitda_actual": 37500,
"ebitda_variance_abs": -7500,
"ebitda_variance_pct": -16.67
},
"line_items": [
{
"name": "Product Revenue",
"budget": 120000,
"actual": 108500,
"variance_abs": -11500,
"variance_pct": -9.58,
"favorable": false,
"material": true,
"root_cause": "2 enterprise deals slipped to April (pipeline confirmed)",
"action": "Deals expected April close; no change to full-year forecast"
}
],
"reforecast": {
"full_year_revenue_original": 1800000,
"full_year_revenue_current": 1762000,
"full_year_ebitda_original": 540000,
"full_year_ebitda_current": 512500
}
}
---
QBO 集成工作流
实际数据来自 QuickBooks Online(通过 qbo-automation)时:
1. Export: QBO → Reports → Profit & Loss (select period, compare to prior)
2. Or via API: GET /v3/company/{id}/reports/ProfitAndLoss?start_date=&end_date=&summarize_column_by=Month
3. Map QBO account names to budget line items using COA mapping table
4. Validate totals: QBO Revenue total must match sum of line items (catch mapping errors)
5. Feed into variance calculation above
常见 QBO 映射陷阱:
- QBO 可能拆分了预算中合并列示的子类别 → 向上汇总
- QBO 中的业主提款不属于费用 → 从损益分析中排除
- 工资税可能位于单独的 QBO 科目中 → 汇总到全口径人员成本
---
常见边界情况处理
某科目有实际发生额,但预算为 $0
Never divide by zero. Instead:
variance_pct = "N/A (no budget)"
Flag as material if actual > materiality dollar threshold
Commentary: "Unbudgeted spend of $X in [account]"
前期重述
If actuals from a prior period changed:
Flag the restatement explicitly
Show: prior reported → restated → delta
Update YTD accordingly
Note audit trail in commentary
多个部门 / 成本中心
Run variance analysis at:
1. Consolidated company level (always)
2. Department level (if cost center tracking exists)
Highlight cross-departmental offsets where applicable
(e.g., R&D under-spend masked by G&A over-spend at total level)
季节性业务
Include YoY comparison alongside BvA:
March 2026 Actual vs. March 2026 Budget (primary)
March 2026 Actual vs. March 2025 Actual (context)
Flag: is variance seasonal (expected) or structural (new issue)?
---
指标术语表
| 术语 | 定义 | |---|---| | BvA | 预算与实际对比 | | F | 有利(优于计划) | | U | 不利(劣于计划) | | pp | 百分点(用于利润率比较) | | YTD | 本年截至目前(从一月 1 日起累计) | | QTD | 本季度截至目前 | | MTD | 本月至今 | | 重预测 | 基于截至目前的实际数据,对本年度剩余期间更新预测 | | 快报 | 完整结账前的初步 BvA 快报(可使用估算值) | | 正式结账 | 最终锁定的实际数据(不再调整) | | 初步结账 | 初步实际数据,仍可能进行应计和其他调整 |
---
集成点
qbo-automation——直接从 QuickBooks Online 提取实际数据startup-financial-model——原始预算/预测的数据来源kpi-alert-system——差异超过阈值时触发告警report-generator——将 BvA 输出整理为可提交董事会的 PDF 或演示文稿financial-analysis-agent——根因不明确时深入分析趋势
---
需求输入 Prompt 示例
“三月已结账。预算收入为 $150k,EBITDA 为 $45k。实际收入为 $142k,EBITDA 为 $37.5k。产品收入少了 $11.5k——两笔企业交易延期。服务收入多了 $4.2k。S&M 因一次会议超支 $2.4k。研发少支出 $1.5k——承包商延迟到岗。请起草 BvA 表、根因摘要和董事会分析说明。标记对重预测的影响。”
Sam 将:
- 构建包含 F/U 标记和重要性指标的差异表
- 为所有标记的科目撰写根因摘要
- 按情况/原因/行动/展望格式撰写管理层分析说明
- 生成重预测差额(时间调整与结构性调整)
- 如需下游处理,输出结构化 JSON