Profitability analysis

Product & Customer Profitability Analyzer

Builds net revenue, product cost, contribution and profit for up to 50 sales summary rows by product, customer and channel, spreads up to five shared cost pools over the rows by revenue, units or activity to the cent, and shows one focus customer with a what-if table of price and direct cost multipliers. Allocated profit is not the profit a customer adds; estimates for planning, not advice.

Last updated

Calculator overview

Inputs and outputs

This summary comes from the calculator's published input and output contract.

Inputs

What-if price multiplier (required) Conditional
About this input

A what-if multiplier on gross sales, discounts and refunds of every sales row, from 0 to 5. Units stay the same; 1 means no change. The rows of the what-if table are centred on it.

Unit x Default 1 Range 0 to 5
Shared cost pools
When omitted Blank
About this input

Up to five shared cost pools, each with an ID, an amount and the method that spreads it over the sales rows: by positive net revenue, by net units or by the activity count of its own column. No pool at all is allowed.

Default 1 row
ColumnRange or allowed values
Pool ID Not declared
Pool amount 0 to 1000000000
Allocation method Revenue, Units, Activity
Sales summary (required)
About this input

Up to fifty sales summary rows, each naming a product, a customer and a channel, with units shipped and returned, gross sales, discounts, refunds, the direct costs of that row only, and one activity count for each shared cost pool row.

Default 2 rows
ColumnRange or allowed values
Row ID Not declared
Product ID Not declared
Customer ID Not declared
Channel Not declared
Units shipped 0 to 1000000
Units returned 0 to 1000000
Gross sales 0 to 1000000000
Discounts 0 to 1000000000
Refunds 0 to 1000000000
Direct costs 0 to 1000000000
Activity for pool row 1 0 to 1000000000
Activity for pool row 2 0 to 1000000000
Activity for pool row 3 0 to 1000000000
Activity for pool row 4 0 to 1000000000
Activity for pool row 5 0 to 1000000000
Products (required)
About this input

Up to ten products: an ID, the cost of one unit, and the share of a returned unit cost that comes back as stock that can be resold.

Default 1 row
ColumnRange or allowed values
Product ID Not declared
Unit cost 0 to 100000
Return recovery 0 to 1
Focus customer (required) Conditional
About this input

The customer that the focus results and the what-if table follow, chosen from the Customer IDs in the sales table. Each Customer ID appears in the list once, in table order.

Default CAFE
What-if direct cost multiplier (required) Conditional
About this input

A what-if multiplier on every product unit cost, and so on every return credit, and on every row direct cost, from 0 to 5. Shared cost pools do not change. The columns of the what-if table are centred on it.

Unit x Default 1 Range 0 to 5
Table step, price multiplier (required) Conditional
About this input

The spacing of the 11 price-multiplier rows of the what-if table, above 0 and at most 0.5. The lowest row must not fall below 0, or the table is withheld.

Unit x Default 0.05 Range 0.01 to 0.5
Table step, direct cost multiplier (required) Conditional
About this input

The spacing of the 11 direct-cost-multiplier columns of the what-if table, above 0 and at most 0.5. The lowest column must not fall below 0, or the table is withheld.

Unit x Default 0.05 Range 0.01 to 0.5

Outputs

Refunds
About this output

Refunds of every sales row after the what-if price multiplier, each row posted to the cent.

No unit declared
Product cost, net of return credit
About this output

Units shipped times unit cost, less the credit for returned stock that can be resold, summed over the sales rows.

No unit declared
Shared cost pools
About this output

The total of the shared cost pools, each posted to the cent.

No unit declared
Units returned
About this output

Units returned, summed over the sales rows.

Unit units
Unallocated shared costs
About this output

Shared cost pools whose driver is zero in every row: they are reported, never divided, and count only in fully loaded profit.

No unit declared
Return credit
About this output

Units returned times unit cost times the product return recovery: the returned stock that comes back to be sold again.

No unit declared
Net revenue
About this output

Gross sales minus discounts minus refunds, summed over the sales rows.

No unit declared
Contribution
About this output

Net revenue minus product cost minus direct costs, before any shared cost. The allocation method never changes it.

No unit declared
Allocated shared costs
About this output

The part of the shared cost pools spread over the sales rows. Every pool with a driver is spread in full, to the cent.

No unit declared
PP02 Sales Check
About this output

The check of each sales row: blank for an unused row, OK, or the first problem found, starting with its code.

No unit declared
Gross sales
About this output

Gross sales of every sales row after the what-if price multiplier, each row posted to the cent.

No unit declared
Discounts
About this output

Discounts of every sales row after the what-if price multiplier, each row posted to the cent.

No unit declared
Direct costs
About this output

Direct costs of the sales rows after the what-if direct cost multiplier, each row posted to the cent.

No unit declared
Table1 PCP Values
About this output

Each cell is the focus customer contribution recalculated with every gross sale, discount and refund multiplied by the row value and every unit cost and direct cost by the column value, minus its shared costs held as allocated in your own case. Units stay the same. The middle cell is your own case.

Unit $0.00
Table1 PCP Row Input
About this output

Machinery, not an input: the cell the table substitutes each row price multiplier into. The rest of the time it repeats the what-if price multiplier. Change the input, never this cell.

No unit declared
Table1 PCP Row Axis
About this output

The price multipliers down the left of the what-if table: your own multiplier in the middle, five equal steps below and five above.

No unit declared
Warning messages
About this output

Every warning that applies, separated by semicolons. Blank when none applies.

No unit declared
Warnings
About this output

Every warning the model can raise, whether it applies to this result (1) or not (0), and its message when it applies.

No unit declared
Warnings
About this output

How many warnings apply to this result. The warnings table lists them.

Unit count
Table1 PCP Corner
About this output

The figure the what-if table recalculates, the focus customer allocated profit, placed in its top-left corner as the spreadsheet requires. It is formatted away.

Unit 0.75
Workbook self-check
About this output

PASS when every internal consistency check of this result holds. FAIL means the result should not be relied on.

No unit declared
Reference data version
About this output

The version of any reference data used. None: every value is your own amount or policy.

No unit declared
Units shipped
About this output

Units shipped, summed over the sales rows. Hours or days are fine.

Unit units
Table1 PCP Column Input
About this output

Machinery, not an input: the cell the table substitutes each column direct cost multiplier into. The rest of the time it repeats the what-if direct cost multiplier.

No unit declared
Table1 PCP Column Axis
About this output

The direct cost multipliers across the top of the what-if table: your own multiplier in the middle, five equal steps below and five above.

No unit declared
Status code
About this output

The short code of the reason shown in the status, or OK.

No unit declared
Focus customer allocated shared costs
About this output

The shared costs allocated to the sales rows of the focus customer.

No unit declared
Results by customer
About this output

One row per customer, in order of first appearance in the sales table, with the same measures as the product results. Margins are blank when net revenue is zero or below.

No unit declared
Contribution margin
About this output

Contribution as a share of net revenue. Blank (not applicable) when net revenue is zero or below.

Unit %
Focus customer contribution
About this output

Contribution of the sales rows of the focus customer, before shared costs.

No unit declared
Focus customer allocated profit
About this output

The focus customer contribution minus its allocated shared costs. It is not the profit the company would lose without the customer: see profit without the focus customer.

No unit declared
Focus customer allocated margin
About this output

The focus customer allocated profit as a share of its net revenue. Blank (not applicable) when its net revenue is zero or below.

Unit %
Results by channel
About this output

One row per channel, in order of first appearance in the sales table, with the same measures as the product results.

No unit declared
Model version
About this output

The version of the model that produced these results.

No unit declared
Status
About this output

OK, or the first reason the result needs attention: NOT VALID for inputs the model cannot use and CHECK for a result to look at.

No unit declared
Custom assumptions
About this output

Whether any reference value was overridden. Always FALSE here: the model uses no reference data.

No unit declared
From gross sales to profit
About this output

The steps from gross sales to fully loaded profit, with each deduction shown as a negative amount.

No unit declared
Allocation audit
About this output

The share of each shared cost pool posted to each sales row, to the cent, and the row total. Blank under an unused pool row; zero under a pool with no driver.

No unit declared
Allocated profit
About this output

Contribution minus the allocated shared costs.

No unit declared
Results by product
About this output

One row per product in the products table: units shipped and returned, net revenue, product cost, direct cost, contribution and its margin, allocated shared costs, allocated profit and its margin. A product with no sales row shows zeros. Margins are blank when net revenue is zero or below.

No unit declared
PP02 Pools Check
About this output

The check of each shared cost pool row: blank for an unused row, OK, or the first problem found, starting with its code.

No unit declared
Shared cost pools
About this output

One row per shared cost pool: its method and amount, the driver total over the sales rows (dollars of positive net revenue, net units or activity), the cost per driver unit (blank when the total is zero), the allocated and unallocated amounts and the part allocated to the focus customer.

No unit declared
Results by sales row
About this output

One row per sales row: its net revenue, product cost net of return credit, direct cost, contribution, allocated shared costs and allocated profit, each posted to the cent.

No unit declared
Fully loaded profit without the focus customer
About this output

The company fully loaded profit if the sales rows of the focus customer were removed and every shared cost pool stayed the same size: fully loaded profit minus the focus customer contribution.

No unit declared
PP02 Products Check
About this output

The check of each product row: blank for an unused row, OK, or the first problem found, starting with its code.

No unit declared
Sales rows with an allocated loss
About this output

How many sales rows have an allocated profit below zero.

Unit rows
Fully loaded margin
About this output

Fully loaded profit as a share of net revenue. Blank (not applicable) when net revenue is zero or below.

Unit %
Focus customer net revenue
About this output

Net revenue of the sales rows of the focus customer.

No unit declared
Focus customer contribution margin
About this output

The focus customer contribution as a share of its net revenue. Blank (not applicable) when its net revenue is zero or below.

Unit %
Customers with an allocated loss
About this output

How many customers have an allocated profit below zero.

Unit customers
What-if table withheld because
About this output

Blank when the what-if table is shown. Otherwise the reason it is withheld: a table step would take the lowest row or column below zero. Every other result is still calculated.

No unit declared
Fully loaded profit
About this output

Contribution minus every shared cost pool, allocated or not: the company profit of these sales rows.

No unit declared
This page is provided by LogicCommons for informational purposes only. Results are model outputs computed from the inputs you supply and are not financial, investment, tax, accounting, or legal advice, and no advisory relationship is created. Verify all inputs and results independently before relying on them in any decision. These calculators model the prices, costs and demand assumptions you enter. They do not estimate how customers respond to price, they are not certified financial reporting, and they do not guarantee a profit improvement.

LogicCommons is in beta. If a result, label, or reference looks wrong, tell us here; we read every message.

Methodology

Purpose and model boundary

This calculator shows where profit comes from in one summary of your sales. You enter your products, up to 50 sales summary rows that each name a product, a customer and a channel, and up to five shared cost pools. The spreadsheet works out each row's net revenue, product cost and contribution, spreads each shared pool over the rows to the cent, and sums the results by product, customer and channel, with one customer you choose as the focus.

One Calculate fills every result section. The calculator has no optimizer, no target search and no simulation, because this question needs none: every figure follows directly from what you enter. An 11 by 11 what-if table of price against direct cost for the focus customer is calculated with them.

Every figure on this page is computed by the spreadsheet; the page adds nothing to it. All sales, costs and pool amounts are your own inputs, and an allocated figure depends on the method you choose. Allocated profit is not the profit a customer adds. The shared costs do not leave when a customer does, so the page also shows what the company would earn without the focus customer. The calculator is not certified financial reporting and does not guarantee a profit.

Inputs and units

  • Products, up to 10 rows:
    • a product ID: a capital letter, then up to 15 capital letters or digits, each ID used once;
    • the unit cost, from 0 to 100,000;
    • the return recovery, from 0% to 100%: the share of a returned unit's cost that comes back as stock you can sell again. Blank means 0%.
  • Sales summary, up to 50 rows, filled from the top without a blank row between used rows. Rows can be typed or pasted from a spreadsheet. Each row has:
    • a row ID, in the same form as a product ID, each ID used once;
    • a product ID, which must be in the products table;
    • a customer ID and a channel, in the same form. There can be at most 10 different customers and 3 different channels;
    • units shipped, from 0 to 1,000,000; hours or days are fine;
    • units returned, in the same range, blank means 0. It may be more than units shipped, for returns of earlier sales;
    • gross sales, required, and discounts, refunds and direct costs, each from 0 to 1,000,000,000; a blank discount, refund or direct cost means 0. Direct costs are the shipping, service and channel costs that belong to this row only;
    • up to five activity counts, from 0 to 1,000,000,000, blank means 0. Activity column 1 is read only by pool row 1, column 2 by pool row 2, and so on, and only when that pool uses the Activity method.
  • Shared cost pools, up to 5 rows, which may be empty: a pool ID in the same form, used once; the amount, from 0 to 1,000,000,000; and the method, Revenue, Units or Activity.
  • Focus customer: one of the customer IDs in the sales table. The list follows the table as you type.
  • Optional, under "Optional: what-if table":
    • the price multiplier, from 0 to 5 (1 unless you change it), which multiplies gross sales, discounts and refunds on every row, with units unchanged;
    • the direct cost multiplier, from 0 to 5 (1 unless you change it), which multiplies every unit cost, and so every return credit, and every row's direct costs. Shared pools do not change;
    • the spacing of the table's rows and columns, from 0.01 to 0.5 (0.05 unless you change it).

Money is in dollars; percentages are shares of a unit cost or of net revenue.

Governing relationships

Net revenue. Each row's net revenue is gross sales minus discounts minus refunds. Each amount is posted to the cent, rounding half away from zero, after the price multiplier. Net revenue can be below zero when refunds and discounts exceed the sales.

Product cost and the return credit. A row's product cost is the units shipped times the unit cost, less a credit for returned stock that can be sold again: the units returned times the unit cost times the product's return recovery. Because the recovery is at most 100%, the credit never exceeds what those units cost.

Contribution. Contribution is net revenue minus product cost minus direct costs. It comes before any shared cost, so the choice of allocation method never changes it.

Allocation. Each pool is spread over the sales rows by one method. Revenue spreads it by each row's net revenue, and a row with zero or negative net revenue takes no share. Units spreads it by units shipped minus units returned, never below zero. Activity spreads it by that pool's activity column. A row's exact share is the pool amount times its driver divided by the total driver.

To the cent. Each share is rounded down to the cent, and the cents left over go one at a time to the rows with the largest remainders, the lowest row ID first in a tie. Row IDs order as text, so R1 comes before R10 and R10 before R2. Every pool therefore adds up exactly, and every posted share is within one cent of its exact share.

A pool nobody drives. When a pool's driver total is zero it is reported as unallocated and never divided.

Profit. Allocated profit is contribution minus the allocated shares. Fully loaded profit also subtracts the unallocated pools, so at the company level it is contribution minus every pool. Changing an allocation method moves profit between rows and customers; the company total changes only when a pool becomes unallocated.

Margins. Contribution margin, allocated margin and fully loaded margin each divide by net revenue. A margin on zero or negative net revenue means nothing, so it is left blank.

Profit without the focus customer. This is the company's fully loaded profit minus the focus customer's contribution: what is left if its rows are removed and every shared cost pool stays the same size. A customer can show an allocated loss and still add to the company's profit. When its contribution is above zero, dropping it lowers company profit by that contribution, if the shared costs do stay.

What-if table. Rows are 11 price multipliers centred on yours and columns are 11 direct cost multipliers centred on yours, each one step apart, with quantities fixed. Each cell recalculates the focus customer's own sales rows at that price and direct cost, less its shared costs held as allocated in your own case, through the spreadsheet's own two-variable data table. The shares are not spread again at each cell, because that would make every calculation many times slower. Every price moves together, so revenue shares usually stay close, and on the worked examples the held shares give the same table as a full re-spread, to the cent. They are not always close: revenue is rounded to the cent on each row, so very small rows can change share sharply, and the difference is not limited to a cent. With two rows of gross sales $0.01 and $0.02 at no cost, a $1,000 revenue pool is allocated $333.33 and $666.67. At a price multiplier of 0.5 the two rows both round to $0.01, so a full re-spread would allocate $500 and $500. The first row's cell shows -$333.32 where a full re-spread would show -$499.99, a difference of $166.67. The middle cell equals the focus customer's allocated profit. When a step would take the lowest row or column below 0, the table is withheld with that reason and every other result still stands. A multiplier of 0 always withholds it.

Calculation sequence

The spreadsheet first checks every product, sales and pool row and every setting, and stops with NOT VALID at the first problem it finds, with every figure at 0. It then posts each sales row's revenue and costs to the cent, spreads each pool with its leftover cents, and sums the rows by product, customer and channel in integer cents. The what-if table recalculates the focus customer's rows at its 121 combinations. A block of consistency checks, including that each pool adds up exactly, that the summaries add up to the company totals, that the steps from gross sales reach the profit figures, and that the table's middle cell equals the focus customer's allocated profit, runs before the status is returned.

Outputs and interpretation

The headline gives the company's contribution, its fully loaded profit and the focus customer's allocated profit. The result sections follow.

  • Company: gross sales, discounts, refunds, net revenue, product cost, return credit, direct costs and contribution margin; the pools in total, allocated and unallocated; allocated profit and fully loaded margin; units shipped and returned; the number of sales rows and customers below zero after shared costs; and the steps from gross sales to fully loaded profit.
  • Focus customer: its net revenue, contribution and margin, its allocated shared costs and allocated margin, and the company's profit without it, assuming every shared cost pool stays the same size.
  • By customer, By product, By channel: units, net revenue, product cost, direct costs, contribution and margin, allocated shared costs, allocated profit and margin for each. Customers and channels appear in the order they first appear in the sales table; products in table order, including one with no sales.
  • Shared cost pools: each pool's method, amount, driver total, cost per driver unit, allocated and unallocated amounts and the part that falls on the focus customer; and each sales row's share of each pool.
  • Sales rows: each row's net revenue, costs, contribution, allocated shared costs and allocated profit.

The steps from gross sales to profit are drawn as signed bars that start at zero. They do not float like a waterfall chart, so read each bar on its own.

For nearby questions, the Price Volume Profit Scenario Simulator projects profit when demand responds to price, and the Quote Pricing & Deal Margin Optimizer prices one deal from its lines.

Validation and status logic

The workbook returns one status, chosen in this order: NOT VALID, then CHECK, then OK.

  • NOT VALID names the first problem, in this order: a product row (a blank row above a used row, a missing or malformed ID, a repeated ID, a unit cost or recovery outside its limits); no product; a sales row (a gap, a missing or malformed ID, an amount outside its limits, a repeated row ID, a product not in the products table); no sales row; more than 10 customers; more than 3 channels; a pool row (a gap, a missing or malformed ID, an amount outside its limits, a method not in the list, a repeated ID); a focus customer not in the sales table; a multiplier outside 0 to 5; and a table step outside its limits. NOT VALID is a refusal, not a numeric answer: every figure is withheld.
  • CHECK accompanies a valid result that needs a look because a workbook consistency check failed.
  • OK otherwise.

Warnings say when sales rows lose money after shared costs, when a pool has no driver so it is not allocated, when a row has discounts and refunds above its gross sales, when a row returns more units than it ships, when activity is entered for a pool that does not use it, when the focus customer shows an allocated loss but a positive contribution, and when the what-if table is withheld. A warning never changes the status.

Assumptions and limitations

  • Capacities are 10 products, 50 sales rows, 10 customers, 3 channels and 5 shared cost pools.
  • One summary period: rows from different periods are simply different rows, and there is no dating, payment timing, tax or currency conversion. This is an accounting view, not a cash view.
  • Customers and channels are the IDs typed on the sales rows; upper and lower case are different characters, and IDs use capital letters only.
  • A price or direct cost multiplier applies to every row together, with quantities fixed. The calculator does not estimate how customers respond to price.
  • An allocation is a way of sharing a cost, not a measure of what a customer causes. Different methods give different customer results for the same company total.
  • Profit without the focus customer assumes no shared pool shrinks when the customer leaves. If a pool would shrink, the real effect is better than that line shows.
  • Results exactly on, or within rounding noise of, a half-cent edge may differ by one cent, including which row takes a leftover cent.

Restrictions and non-computing states

The calculator enforces its numeric and choice limits before it accepts a result. A blank row between used rows, a repeated row ID, a product not in the products table, a focus customer not in the sales table and too many customers or channels are refused. When a table step would take the lowest row or column below 0, only the what-if table is withheld, with that reason.

Errors and warnings

A request rejected by the page's input limits is not a computed result. A transport or service failure, a timeout or a cancelled run cannot establish a fresh workbook answer, and the last result stays on the page marked as out of date. Review the workbook's References and Disclaimer, and check a result against your own records, before using it to change a price or drop a customer.

References

Sources and further reading

Your sales, costs, returns, activity counts and cost pools come from the inputs; the calculator holds no market, industry or customer data, and every value is your own assumption. The sources below explain the ideas the model uses. They do not endorse this calculator.

This is an educational model of the sales summary you enter, not financial, accounting, pricing or legal advice. An allocated loss is not, by itself, a reason to drop a customer. The calculator is not certified financial reporting and does not guarantee a profit; check a result against your own records before acting on it.

Results are informational and not professional advice. See our Terms of Use. Powered by SpreadsheetWeb · About · Privacy · Terms