Sample output from the Pricing Experiments: Elasticity by Segment & Quote-by-Quote Rep Guidance prompt in the Sonar AI Prompt Library, run against a NetSuite test account. Every name and number here is test data. Back to the post · The library
TD3016323 · Revenue Analytics
AUGUST 22, 2026 · CONFIDENTIAL

Pricing power is being left
on the table — in both directions.

A line-item analysis of 6,942 priced order lines (Sep 2024 – Aug 2026) estimates price elasticity for each customer segment and converts it into quote-by-quote guidance for sales reps. The headline is not over-discounting. It is the opposite.

SOURCE  NetSuite production data — transaction, transactionline, pricing, customer, item, nexttransactionlink  ·  METHOD  Within-item log-log regression, empirical-Bayes shrinkage, Lerner-rule optimization
Executive Summary

Three segments, three different pricing problems.

Order history contains enough natural price variation to estimate demand response in the B2C and Retail-wholesale segments. It also contains a systematic pricing error: on multi-unit wholesale lines, reps have been quoting above the quantity-break prices customers are entitled to — under-discounting, not over-discounting — with measurable churn risk attached.

−2.95
B2C price elasticity (±0.09, n = 1,029)
$46.9K
Wholesale overcharge vs. entitled qty-break prices, 24 mo
82%
Of multi-unit wholesale lines priced above break tier
+$19.5K
Projected annual profit lift from B2C repricing (+24.6%)

What to do: (1) enforce quantity-break entitlement on every wholesale quote immediately — it is a discipline fix, not a price cut; (2) run controlled markdown tests on 53 over-priced B2C items where estimated elasticity says lower prices earn more profit; (3) inject deliberate price variation into Manufacturing-segment quotes, where two years of flat pricing has made demand response unmeasurable.

Key Findings

What the order history says.

Finding 01 — The under-discounting problem is real

Reps charge above entitled quantity-break prices on 82% of multi-unit wholesale lines.

The item price book defines quantity breaks at 2, 3, 4, and 5+ units. On wholesale sales-order lines of two or more units, 1,261 of 1,544 lines (81.7%) were billed above the applicable break-tier price — $28,118 of excess in Manufacturing (cat. 4) and $18,788 in Retail (cat. 7) over 24 months. Example: 5-unit mattress lines billed at $485 against a qty-5 book price of $470.

Two of the accounts carrying this overcharge have gone quiet: Entenmanns LLC ($1,321 excess; no order since Jun 3) and Karmabit ($547; silent since Apr 21). Correlation is not proof of causation, but these are the two obvious churn candidates in the book.

Finding 02 — Lost quotes were not discounted at all

Five of six lost or expired estimates were priced at 97–100% of full list.

The estimate pipeline is thin (10 quotes), but its pattern is one-directional: every lost/expired quote (EST11–EST15) carried a price ratio of 0.97–1.00 versus list, and the wholesale quotes to Blockster Inc. (EST16–EST20) sit at exactly 1.00 — no use of the quantity-break book despite 6–48-unit lines. The one converted quote (EST17 → SO4310) was also at full list, on the smallest order. Reps are not buying wins with margin; they are losing quotes without ever deploying the discount structure that already exists.

Finding 03 — B2C demand is highly elastic; the price book ignores it

B2C elasticity of −2.95 implies a ~34% optimal margin. The book carries 45–65%.

Pooled within-item estimation across 87 items and 1,029 item-months yields ε = −2.95 (95% CI −3.13 to −2.78, R² = 0.54). At that elasticity the profit-maximizing (Lerner) gross margin is ≈ 34%, yet most B2C items are listed at 45–65% margins. After shrinking noisy item-level estimates toward the pool, 53 items price above their profit-maximizing point; modeled repricing on trailing-12-month volumes projects +$19.5K profit per year (+24.6%) on this basket.

Finding 04 — Manufacturing-segment elasticity is unmeasurable — by construction

Two years of quoting produced almost zero price variation to learn from.

Across 668 Manufacturing-segment lines, the pooled within-item price variance is ≈ 0.03 in log terms — reps quote the same price every time (monthly average ratio to list stays inside 1.00–1.03 for 24 straight months). No estimator can recover demand response from data with no price movement. This is itself the finding: the segment has never been experimented on, and Finding 01 shows the one consistent deviation is in the customer-unfriendly direction.

"The leakage runs upward. The discipline problem is not reps giving margin away — it is reps failing to give customers the prices they already qualify for."
Elasticity by Segment

Where demand response is measurable.

Elasticity (ε) is the % change in units sold per 1% change in price. Estimates use only within-item price variation (each item is its own control), which removes item-mix bias. Whiskers show 95% confidence intervals.

0 (no response) −1 −2 −3 Price elasticity of demand (more negative = more price-sensitive). Bars anchored at 0. B2C — stores & cash sales ε = −2.95 · 1,029 obs · 87 items · R² .54 Retail wholesale (cat. 7) ε = −0.90 · CI [−1.26, −0.54] · ~unit-elastic Manufacturing wholesale (cat. 4) Unidentifiable — no price variation in 668 lines IT (cat. 3) — 4 customers, insufficient history
Fig. 1 — Pooled within-item price elasticity by customer segment. B2C estimated on item-month aggregates (monthly avg. realized price vs. monthly units, per item); Retail on order lines vs. quantity-break-adjusted list. Manufacturing shown at zero width because the estimator has no variation to use, not because demand is unresponsive.

How to read this

B2C (ε ≈ −3): a 10% price cut adds ~30% units. With margins above the Lerner optimum, cuts on most items increase profit. Retail wholesale (ε ≈ −0.9): demand barely responds inside the observed ±5% band — these 8 accounts buy on relationship and assortment. Price moves here transfer margin without moving volume, which cuts both ways: broad discounts are wasteful, but overcharging is pocketed silently until the account quietly leaves. Manufacturing: see Experiment 3.

Under-Discounting Forensics

The $47K that customers were entitled to.

For every wholesale line of 2+ units, the billed rate was compared against the quantity-break tier price the line qualified for (price level 1, tier = min(qty, 5)). The excess is concentrated in the largest accounts — the ones with the most leverage to defect.

Cumulative overcharge vs. entitled quantity-break price, Sep 2024 – Aug 2026 (top 12 accounts) Jones Manufacturing $8,571 Design Excellence Ltd. $8,570 Panaderia Co. $7,068 Davis Supplies $6,729 Pineapple Republic $4,473 Realpoint inc. $3,620 Marshall Industries $3,177 Entenmanns LLC$1,321 — silent since Jun 3 Recreational Outfitters $1,208 Blockster Inc. $1,051 Hugo Limited $568 Karmabit $547 — silent since Apr 21 Red = account with an overcharge balance that has stopped ordering. Source: SuiteQL Q4 (Method & Queries).
Fig. 2 — Where the under-discounting sits. Jones Manufacturing and Design Excellence Ltd. alone account for $17.1K. Both still order — the exposure is forward-looking. The two red accounts are the realized warning.
AccountSegmentOrders (24 mo)RevenueOvercharge vs. breakLast orderStatus
Jones ManufacturingManufacturing27$322,022$8,571Aug 22Active
Design Excellence Ltd.Retail43$265,318$8,570Aug 29Active
Panaderia Co.Manufacturing23$224,003$7,068Aug 13Active
Davis SuppliesRetail25$207,660$6,729Aug 16Active
Pineapple RepublicManufacturing21$203,434$4,473Aug 4Active
Realpoint inc.Manufacturing24$162,749$3,620Aug 31Active
Marshall IndustriesManufacturing15$122,417$3,177Aug 19Active
Entenmanns LLCRetail14$60,376$1,321Jun 3CHURN RISK
Recreational OutfittersManufacturing23$131,606$1,208Aug 1Active
Blockster Inc.Retail5$64,180$1,051Aug 31New — watch
Hugo LimitedRetail27$83,516$568Aug 31Active
KarmabitRetail20$64,433$547Apr 21CHURN RISK

The quote pipeline tells the same story

QuoteCustomerValuePrice vs. listOutcome
EST11–EST14B2C walk-ins / Blockster$52–$1870.97Expired — no follow-up discount offered
EST15Design Excellence Ltd.$5311.00Expired at full list
EST16, 18–20Blockster Inc.$748–$3,3371.00Open — quoted at list despite 24–48-unit lines
EST17Blockster Inc.$9711.00Won → SO4310 — the smallest wholesale quote

Ten quotes is too few for statistical treatment — this is presented as forensic corroboration, not inference. The open Blockster quotes (EST16, 18–20, $6.5K combined) are immediate candidates for re-issue at entitled break prices.

B2C Price Ladder

57 items, item-by-item: list, optimal, action.

For each item with sufficient history (≥ 8 months of sales, ≥ 3 distinct price points), the raw item elasticity is shrunk toward the segment pool (ε̄ = −2.95) in proportion to its data weight, then the profit-maximizing price is computed from unit cost via the Lerner rule: p* = c · ε / (1 + ε). Items marked * are LOT-tracked cosmetics.

Distribution of recommended price change (list → p*), 57 items 2 13 18 14 6 3 2 ≤ −40%−40 … −30−30 … −20−20 … −10−10 … −3HOLD ±3RAISE > +3
Fig. 3 — Most of the B2C catalog prices 10–40% above its profit-maximizing point. Red = the two raise-test candidates. Recommended moves are test targets, not immediate repricing (see Experiments).
ItemMonthsε rawε shrunkListCostp*ΔAction
MaxCover Foundation*9−3.79−3.35$40.00$15.00$21.39−46.5%CUT
Plush High Volume Mascara*8−2.20−2.62$14.00$5.00$8.09−42.2%CUT
Crew Neck T-Shirt TE16−2.18−2.48$29.99$10.99$18.43−38.6%CUT
Crew Neck T-Shirt CM18−2.21−2.47$29.99$10.99$18.45−38.5%CUT
Pink Plaid9−2.11−2.56$52.00$20.00$32.86−36.8%CUT
Black Leather Valise10−1.56−2.26$359.99$129.00$231.75−35.6%CUT
In-Shower Lotion10−2.60−2.78$12.00$5.00$7.82−34.9%CUT
Patriarch Luxury Firm T M16−3.15−3.07$900.00$400.00$592.98−34.1%CUT
Cable Knit Hat15−2.17−2.49$30.00$12.00$20.07−33.1%CUT
Cleansing Shower Gel11−3.23−3.10$22.00$10.00$14.77−32.9%CUT
Patriarch Luxury Firm T B16−2.94−2.94$900.00$400.00$605.94−32.7%CUT
Attraction Velour Lashes*9−1.35−2.19$32.00$12.00$22.06−31.1%CUT
Patriarch Luxury Firm F B16−2.70−2.80$900.00$400.00$622.74−30.8%CUT
Dark Straight Leg16−3.85−3.50$40.00$20.00$27.99−30.0%CUT
Luminizing Shield*14−2.86−2.90$24.00$11.00$16.80−30.0%CUT
Canvas Backpack13−3.51−3.27$249.99$122.00$175.79−29.7%CUT
Patriarch Luxury Firm F M14−2.50−2.69$900.00$400.00$636.88−29.2%CUT
Indigo Relaxed Fit16−3.53−3.31$140.00$70.00$100.30−28.4%CUT
Olive Utility Pack14−3.35−3.18$200.00$100.00$145.78−27.1%CUT
Scalp Therapy Shampoo16−4.63−3.99$45.00$25.00$33.37−25.9%CUT
Striped Scarf8−4.79−3.77$22.00$12.00$16.33−25.8%CUT
Leather Square Pillow9−2.69−2.83$39.99$19.50$30.17−24.5%CUT
Summer Hat10−2.68−2.82$39.00$19.00$29.45−24.5%CUT
Ghost Whisperer Jacket BU M14−3.31−3.16$125.00$65.00$95.10−23.9%CUT
Skinny Tinted20−3.51−3.33$150.00$80.00$114.39−23.7%CUT
Ghost Whisperer Jacket GR S13−3.12−3.05$125.00$65.00$96.74−22.6%CUT
Graceful Body Emulsion*10−1.02−1.99$52.00$20.00$40.28−22.5%CUT
Salida Backpack II-RD10−4.65−3.80$110.00$62.95$85.43−22.3%CUT
TLC Night Serum*15−5.23−4.32$50.00$30.00$39.03−21.9%CUT
Salida Backpack II-GR10−4.51−3.73$110.00$62.95$85.97−21.8%CUT
Ghost Whisperer Jacket GN S13−2.98−2.97$125.00$65.00$98.00−21.6%CUT
Knapsack GN9−3.24−3.09$65.00$35.00$51.76−20.4%CUT
Daily Nourishing Skin Supplement12−3.90−3.47$35.00$20.00$28.11−19.7%CUT
Signature Eyeliner*8−1.33−2.23$22.00$10.00$18.13−17.6%CUT
Aqua True Cream*16−4.78−4.08$40.00$25.00$33.12−17.2%CUT
Leather Glove18−4.58−4.00$79.99$49.99$66.68−16.6%CUT
Silver Watch w/ Leather Strap11−4.36−3.69$325.99$200.00$274.28−15.9%CUT
Glamorous Attraction Eye Shadow*12−3.50−3.25$48.00$28.00$40.42−15.8%CUT
White Blouse8−2.69−2.84$44.00$24.00$37.05−15.8%CUT
3-Tone Eye Shadow w/ Mirror*14−4.40−3.80$24.00$15.00$20.36−15.2%CUT
Brown Leather Valise10−4.33−3.64$259.99$160.00$220.59−15.2%CUT
Grey Fedora14−5.69−4.55$29.99$19.99$25.62−14.6%CUT
Knapsack AQ10−2.39−2.67$65.00$35.00$55.93−13.9%CUT
Sparkle and Glow*8−6.55−4.55$22.00$15.00$19.22−12.6%CUT
The Gentleman12−5.82−4.52$80.00$55.00$70.64−11.7%CUT
Black Leather Jacket20−5.26−4.49$289.00$200.00$257.32−11.0%CUT
Rhinestone Blouse13−5.94−4.64$70.00$50.00$63.73−9.0%CUT
Straight Leg Dark Grey16−1.72−2.20$66.00$33.00$60.60−8.2%CUT
Pro Essentials Brush Set14−5.47−4.42$42.00$30.00$38.77−7.7%CUT
Black Leather Belt13−8.17−5.90$46.99$37.00$44.54−5.2%CUT
Salida Backpack BU12−8.05−5.73$100.00$80.00$96.90−3.1%CUT
Glossy Balm*9−0.69−1.88$11.00$5.00$10.66−3.1%CUT
Brown Leather Satchel11−5.53−4.30$399.99$299.99$390.82−2.3%HOLD
Estes Park Upholstered Couch8−0.85−2.02$376.00$188.00$372.27−1.0%HOLD
The Bindel Jacket17−11.41−8.28$319.00$280.00$318.46−0.2%HOLD
Grey Cotton Hoodie15−2.11−2.45$49.99$30.55$51.68+3.4%RAISE
Ghost Whisperer Jacket GR M17−1.13−1.80$125.00$65.00$145.94+16.8%RAISE
Highlighted rows: the Patriarch mattress family — $10.8K of the projected $19.5K annual lift sits in these four SKUs. ε shrunk = weighted blend of item estimate and segment pool (weight = months / (months + 10)). One item (Ghost Whisperer BU L) was excluded for a positive raw elasticity — a promotion-timing artifact.

Projected impact

Applying each p* under constant-elasticity demand to trailing-12-month volumes: revenue on this basket rises from $160K to a projected $303K (volume more than offsets lower prices) and gross profit rises from $79.3K to $98.9K (+$19.5K, +24.6%). Projections carry the model's assumptions (below); the experiment plan exists to validate them before committing the book.

Read before acting — model risks

  • Cannibalization is not modeled. Item-level demand curves treat items independently; a storewide reprice will shift share between items. Stage the rollout.
  • Constant elasticity is an approximation. A −46% move (MaxCover Foundation) extrapolates far outside observed variation. Cap first-round tests at −15% regardless of p*.
  • Observed price variation is mostly promotional. If promo demand differs from everyday-price demand, estimates skew high. The experiment design controls for this.
  • Costs are NetSuite averagecost — stale standards for some items would move p* materially (p* scales linearly with cost).
Rep Playbook

Quote-by-quote guidance.

Three prices per line: floor (never below — escalate), target (open here), stretch (acceptable ceiling). All three are computable from data already on the quote: item, quantity, customer segment, unit cost.

Segment · Manufacturing & Retail wholesale (cat. 4, 7)

Quote the break tier. Every time. Automatically.

Floor
Break − 5%
Below this, escalate to sales manager. With ε ≈ −0.9, deeper discounts buy no volume.
Target
Entitled break tier
pricing table, price level 1, tier = min(qty, 5). This is the fix for the $47K problem.
Stretch
Qty-1 list
Acceptable only on single-unit lines or expedited/custom work.

Hard rule: never quote above the entitled quantity-break tier. The current +2% average markup nets ≈ $23K/yr but is invisible to the customer only until it isn't — two accounts with the pattern have already gone quiet. In a ~unit-elastic segment, honoring the break costs little margin and removes the churn trigger. Re-issue open Blockster quotes EST16/18/19/20 at break prices this week.

Segment · B2C (cat. 9 — stores, POS)

Price the book, not the person. Use the ladder.

Floor
Lerner margin
price ≥ cost × ε/(1+ε) per item — below this, more volume loses money.
Target
Test price (p*, capped −15%)
From the Price Ladder table, via the experiment calendar — not ad-hoc POS discounting.
Stretch
Current list
Hold on the 3 HOLD items and both RAISE candidates pending test results.

B2C pricing is a merchandising decision, not a negotiation. Rep discretion at POS should be zero; the elasticity work belongs in the price book itself.

Segment · IT (cat. 3) — 4 accounts, new relationships

Too early to model. Protect the reference prices.

Quote at list, discount only against commitment (volume agreements, multi-order contracts). Every early price becomes the anchor for the next negotiation; keep anchors high while the segment builds history.

Pricing Experiments

Validate before committing the book.

The estimates above come from natural (mostly promotional) variation. These three controlled experiments convert them into causal, defensible numbers within one to two quarters.

  1. Experiment 1 — B2C markdown test (start now, 8 weeks)Pick 20 CUT items, pair each with a comparable control item (same class, similar price point). Reprice test items to max(p*, list × 0.85). Success metric: gross-profit-per-week vs. control, difference-in-differences. Rotate test/control after 8 weeks to confirm symmetry. The Patriarch mattress family runs as its own cell — four SKUs, $10.8K of the projected lift, one merchandising decision.
  2. Experiment 2 — Wholesale break enforcement (start immediately, permanent)Not a test — a correction. Quote entitled break tiers on all wholesale quotes. Track win rate, order frequency, and line depth for 90 days against the prior-12-month baseline. Expected cost ≈ $23K/yr of markup; expected return: recovered order frequency at the seven active accounts carrying $1K+ overcharge balances, and re-engagement outreach to Entenmanns and Karmabit armed with a make-good.
  3. Experiment 3 — Manufacturing price-variation injection (next quarter)Elasticity is unmeasurable because reps never vary price. Introduce randomized ±3–4% quote-level variation around the break tier (rep-blind if feasible, e.g., rotating "promo codes" by week). Roughly 300 lines per quarter yields a first credible ε estimate for the segment's $1.2M of revenue within two quarters. Cap downside exposure at 4% × affected lines ≈ $6K per quarter.

Measurement infrastructure

  • All queries below are re-runnable as-is; schedule Q1/Q4/Q6 monthly as saved searches or a Sonar process to produce a recurring pricing scorecard.
  • Log every deliberate price deviation with a line-level reason code (a lightweight custcol discount-reason field) so future elasticity work can separate experiment variation from noise.
  • Re-estimate elasticities after each 8-week cycle; shrinkage weights update automatically as months of history accrue.
Method, Queries & Assumptions

Everything needed to reproduce this.

Data

NetSuite production account TD3016323. Window: Sep 2024 – Aug 2026 (24 months). Universe: SalesOrd + CashSale lines (mainline='F', taxline='F', item lines, qty ≠ 0, rate > 0), joined to the pricing table (price level 1 — Base Price) at the quantity-break tier min(max(|qty|,1),5). 6,942 of 7,555 lines matched a book price; the unmatched remainder is mostly configurator/decoration items (WS-CFG-*) with no list price. Segments = customer.category: 4 Manufacturing, 7 Retail, 9 B2C, 3 IT. Estimate outcomes from nexttransactionlink (10 estimates, 1 conversion). Costs = item.averagecost.

Estimator

Log-log demand: ln(q) = α_item + ε·ln(p/p_list). B2C: item-month aggregates (monthly unit-weighted avg. realized price vs. monthly units) per item, pooled across 87 items with ≥ 6 months and ≥ 2 price points; ε̂ = −2.954, SE 0.089 (pooled within-item OLS, 941 df). Retail/Mfg: line-level within-item pooling. Item-level estimates shrunk toward the segment pool: ε_item = w·ε̂_item + (1−w)·ε̄, w = months/(months+10). Optimal price by Lerner rule: p* = c·ε/(1+ε), defined only for ε < −1. Profit projections apply constant-elasticity volume response q₁ = q₀·(p*/p₀)^ε to trailing-12-month units.

Queries (SuiteQL, re-runnable)

Q1 — Line-level realized price vs. quantity-break list (the core dataset)
SELECT
    t.id                 AS tran_id,
    t.tranid             AS doc_number,
    t.type               AS tran_type,
    t.trandate,
    COALESCE(c.category, 0)          AS segment,
    tl.item              AS item_id,
    ABS(tl.quantity)     AS qty,
    tl.rate              AS realized_rate,
    p.unitprice          AS list_price_at_break,
    ROUND(tl.rate / p.unitprice, 4)  AS price_ratio
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id
                       AND tl.mainline = 'F' AND tl.taxline = 'F'
                       AND tl.item IS NOT NULL
LEFT JOIN customer c    ON c.id = t.entity
JOIN pricing p          ON p.item = tl.item
                       AND p.pricelevel = 1
                       AND p.quantity = LEAST(GREATEST(ABS(tl.quantity), 1), 5)
WHERE t.type IN ('SalesOrd', 'CashSale')
  AND tl.quantity <> 0 AND tl.rate > 0 AND p.unitprice > 0
ORDER BY t.trandate, t.id, tl.item
Q2 — Pooled B2C elasticity (item-month within-item sums)
SELECT COUNT(*) AS cells, SUM(n) AS obs,
       SUM(sxy - sx*sy/n) AS wsxy,   -- pooled Σ(x-x̄)(y-ȳ)
       SUM(sxx - sx*sx/n) AS wsxx,   -- pooled Σ(x-x̄)²   → ε = wsxy / wsxx
       SUM(syy - sy*sy/n) AS wsyy
FROM (
  SELECT itm, COUNT(*) AS n, SUM(lx) AS sx, SUM(ly) AS sy,
         SUM(lx*ly) AS sxy, SUM(lx*lx) AS sxx, SUM(ly*ly) AS syy
  FROM (
    SELECT tl.item AS itm, TO_CHAR(t.trandate,'YYYY-MM') AS mth,
           LN(SUM(ABS(tl.quantity)*tl.rate)/SUM(ABS(tl.quantity))
              / MAX(p.unitprice))            AS lx,   -- ln monthly avg price ratio
           LN(SUM(ABS(tl.quantity)))          AS ly    -- ln monthly units
    FROM transaction t
    JOIN transactionline tl ON tl.transaction = t.id
        AND tl.mainline='F' AND tl.taxline='F' AND tl.item IS NOT NULL
    JOIN customer c ON c.id = t.entity
    JOIN pricing p  ON p.item = tl.item AND p.pricelevel = 1 AND p.quantity = 1
    WHERE t.type IN ('CashSale','SalesOrd') AND c.category = 9
      AND tl.quantity <> 0 AND tl.rate > 0 AND p.unitprice > 0
    GROUP BY tl.item, TO_CHAR(t.trandate,'YYYY-MM')
  )
  GROUP BY itm
  HAVING COUNT(*) >= 6 AND COUNT(DISTINCT ROUND(lx,4)) >= 2
)
Q3 — Wholesale segment pooled elasticity (line-level, per item×segment cell)
SELECT seg, COUNT(*) AS cells, SUM(n) AS lines,
       SUM(sxy - sx*sy/n) AS pooled_sxy,
       SUM(sxx - sx*sx/n) AS pooled_sxx,
       SUM(syy - sy*sy/n) AS pooled_syy
FROM (
  SELECT COALESCE(c.category,0) AS seg, tl.item AS itm, COUNT(*) AS n,
         SUM(LN(tl.rate/p.unitprice))                          AS sx,
         SUM(LN(ABS(tl.quantity)))                             AS sy,
         SUM(LN(tl.rate/p.unitprice)*LN(ABS(tl.quantity)))     AS sxy,
         SUM(LN(tl.rate/p.unitprice)*LN(tl.rate/p.unitprice))  AS sxx,
         SUM(LN(ABS(tl.quantity))*LN(ABS(tl.quantity)))        AS syy
  FROM transaction t
  JOIN transactionline tl ON tl.transaction = t.id
      AND tl.mainline='F' AND tl.taxline='F' AND tl.item IS NOT NULL
  LEFT JOIN customer c ON c.id = t.entity
  JOIN pricing p ON p.item = tl.item AND p.pricelevel = 1
                AND p.quantity = LEAST(GREATEST(ABS(tl.quantity),1),5)
  WHERE t.type IN ('SalesOrd','CashSale')
    AND tl.quantity <> 0 AND tl.rate > 0 AND p.unitprice > 0
  GROUP BY COALESCE(c.category,0), tl.item
  HAVING COUNT(DISTINCT ROUND(tl.rate/p.unitprice,4)) >= 2 AND COUNT(*) >= 3
)
GROUP BY seg ORDER BY SUM(n) DESC
Q4 — Under-discounting: overcharge vs. entitled quantity-break, per customer
SELECT c.entityid AS customer, c.category,
       MAX(t.trandate)          AS last_order,
       COUNT(DISTINCT t.id)     AS orders_24m,
       ROUND(SUM(CASE WHEN tl.rate > p.unitprice + 0.005 AND ABS(tl.quantity) >= 2
                      THEN (tl.rate - p.unitprice) * ABS(tl.quantity) ELSE 0 END), 2)
                                AS overcharge_vs_break,
       ROUND(SUM(ABS(tl.netamount)), 2) AS revenue
FROM transaction t
JOIN customer c ON c.id = t.entity
JOIN transactionline tl ON tl.transaction = t.id
    AND tl.mainline='F' AND tl.taxline='F' AND tl.item IS NOT NULL
JOIN pricing p ON p.item = tl.item AND p.pricelevel = 1
              AND p.quantity = LEAST(GREATEST(ABS(tl.quantity),1),5)
WHERE t.type = 'SalesOrd' AND c.category IN (4,7) AND tl.rate > 0
GROUP BY c.entityid, c.category
ORDER BY overcharge_vs_break DESC
Q5 — Estimate win/loss lineage
SELECT e.tranid AS estimate, e.status AS est_status,
       so.tranid AS next_doc, so.type AS next_type, so.status AS next_status
FROM transaction e
LEFT JOIN nexttransactionlink ntl ON ntl.previousdoc = e.id
LEFT JOIN transaction so          ON so.id = ntl.nextdoc
WHERE e.type = 'Estimate'
ORDER BY e.tranid
-- Estimate status codes: A = Open, B = Processed, X = Expired
Q6 — Per-item elasticity with list price, cost, and margin (B2C)
SELECT s.itm AS item_id, i.itemid AS item_name, s.n AS months,
       ROUND((s.n*s.sxy - s.sx*s.sy) / NULLIF(s.n*s.sxx - s.sx*s.sx, 0), 3) AS elasticity,
       ROUND(POWER(s.n*s.sxy - s.sx*s.sy, 2)
             / NULLIF((s.n*s.sxx - s.sx*s.sx)*(s.n*s.syy - s.sy*s.sy), 0), 3) AS r2,
       p.unitprice AS list_price, i.averagecost AS unit_cost
FROM ( /* item-month sums — inner query of Q2, HAVING n >= 8 and >= 3 price points */ ) s
JOIN item i    ON i.id = s.itm
JOIN pricing p ON p.item = s.itm AND p.pricelevel = 1 AND p.quantity = 1
ORDER BY elasticity

Assumptions & limitations

Stated in full

  • Entitlement definition. "Entitled price" = price level 1 (Base Price) at the matching quantity-break tier. Wholesale price levels 2 (Dealer/Wholesale, −30%) exist in the book but are assigned to no customer (all wholesale accounts carry price level 1); the break tier is therefore the conservative entitlement benchmark.
  • Segments = customer.category (9 B2C, 7 Retail, 4 Manufacturing, 3 IT). 18 uncategorized customers (~0.4% of lines) excluded from segment estimates.
  • Identification. Elasticities use within-item variation only; between-item price differences never enter. Remaining threats: promotion-demand correlation (promo periods may attract different shoppers) and seasonal confounding (no month fixed effects — the two-year window covers each calendar month twice, partially mitigating).
  • Demand form. Constant elasticity, items independent (no cross-elasticities), no inventory constraints on projected volumes.
  • Shrinkage constant K = 10 item-months chosen a priori; results are not sensitive to K in the 5–20 range for items with 12+ months.
  • One item excluded (Ghost Whisperer BU L, raw ε = +4.5, R² 0.14): positive slope driven by a stock-up promotion coinciding with a price rise.
  • Sales-order amounts are negative in NetSuite (GL credit convention); all quantities and amounts are wrapped in ABS(). transaction.subsidiary is not exposed to SuiteQL in this account; no subsidiary filter was needed because entity-level segmentation excludes the elimination subsidiary by construction.
  • Estimate sample is n = 10. Quote win/loss findings are forensic corroboration only. The under-discounting finding rests on the 1,544-line order analysis (Q4), not on the quotes.
  • Rep attribution: discount behavior is uniform across the three reps carrying wholesale books (avg. ratios 1.018–1.026) — this is a process problem, not an individual-rep problem.