Skip to main content
Card class: HeroCategory: Ecommerce Platform
Revenue minus COGS over revenue. The single best margin-health number for the executive view.

At a glance

(Revenue minus COGS) divided by Revenue. The single best margin-health number for the executive view. Computed off posted Sales Invoices and matched COGS posting from Item Charges + Item Application Entries.
What it counts(SUM(Revenue G/L Entry) minus SUM(COGS G/L Entry)) / SUM(Revenue G/L Entry) for the period. Revenue: posting to G/L accounts 4000 to 4999 (standard BC chart). COGS: posting to 5000 to 5099.
VAT / tax treatmentNet of VAT on both sides.
ShippingIncluded on both sides if shipping posts to revenue + shipping cost posts to COGS. Many BC tenants book shipping cost to a separate Operating Expense, in which case shipping is revenue-side only and inflates margin. The field map can normalise this.
DiscountsDeducted from revenue at line level.
Sales Credit MemosDeducted from revenue; matching reverse COGS posted on the Item Application Entry.
CurrencyMulti-Company: each Company’s revenue + COGS translated to Reporting Currency.
FIFO/Average impactThe COGS posted on a Sales Invoice depends on the Item’s Costing Method. FIFO depletes oldest layers; Average uses rolling Unit Cost. Margin can swing 1 to 3 percentage points period-over-period purely from FIFO layer turnover even with stable selling prices.
Adjust Cost batch dependencyBC’s Adjust Cost - Item Entries batch finalises COGS postings. Pre-batch the COGS may be approximated; post-batch it is exact. Card uses post-batch values.
Time window30D vsP (rolling)
Alert triggerdrop >2pp vsP (a 2-percentage-point drop month-over-month is the structural alarm)
Sentiment keymargin
Rolesowner, finance

Calculation

Calculated automatically from your Microsoft Dynamics 365 data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A US wholesale electronics distributor on BC, 30-day window 14 Mar 26 to 12 Apr 26.
MetricThis period (USD)Prior 30DvsP
Revenue (Posted Sales Invoices, GL 4000-4999)$7,420,000$7,180,000+3.3%
COGS (matched, GL 5000-5099)$5,240,000$4,940,000+6.1%
Gross Margin $$2,180,000$2,240,000-2.7%
Gross Margin % (this card)29.4%31.2%-1.8pp
Five things to notice:
  1. Margin compressed 1.8pp despite revenue growth. COGS rose 6.1% on revenue that rose only 3.3%. Classic margin erosion: cost-side moved faster than price-side. Just below the 2pp alert threshold.
  2. Two likely drivers: (a) FIFO layer turnover, the merchant is now selling out of higher-cost inventory layers received in Q4 25 when supplier prices spiked; (b) channel mix shift towards lower-margin marketplace sales. The Margin by SKU breakdown identifies which SKUs concentrate the compression.
  3. The Adjust Cost batch posted on 31 Mar 26. Pre-batch margin showed 30.1%; post-batch (correct) was 29.4%. The card uses post-batch.
  4. Power BI’s Finance Performance pack shows 29.4% on the Gross Margin tile for the same Company, matching this card. Multi-Company Power BI requires custom DAX; this card consolidates natively.
  5. Action: investigate the FIFO layer hypothesis via Margin by SKU drill-down. If a handful of SKUs are responsible, raise prices or substitute lower-cost variants. If margin compression is broad, escalate to procurement for vendor renegotiation.

Sibling cards merchants should reference together

CardWhy pair it with Gross Margin %
Margin Erosion AlertsThe actionable subset: SKUs driving margin down.
Total COGSThe numerator’s other half.
Margin by SKUPer-SKU detail; the actionable view.
Landed Cost VarianceProcurement-side root cause when COGS is rising.
Revenue Booked into GLThe revenue side.
Average Landed Cost per UnitTracks the cost-side trajectory.
Margin Compression AlertFires when this card breaches threshold.

Reconciling against the vendor’s own dashboard

Where to look in Business Central:
Reports > Finance > Income Statement (Revenue minus Cost of Goods Sold = Gross Profit) Power BI > Finance Performance content pack > Gross Margin tile Reports > Sales > Sales Statistics (per-customer-margin variant) Item Card > Statistics > Avg. Sales Profit % (per-Item lifetime margin)
The Income Statement Gross Profit % matches this card to within rounding. Power BI’s Gross Margin tile uses identical DAX. Why our number may legitimately differ from BC’s reports:
ReasonDirectionWhy
Adjust Cost batch timingSmallPre-batch the COGS is approximated; post-batch exact. Card uses post-batch values.
Shipping classificationEitherIf shipping is booked to Operating Expenses rather than COGS, BC’s Income Statement shows higher margin than this card (which can be normalised via field map).
Sales Credit MemosNoneBoth sides handle them identically.
Multi-Company aggregationCard materially smootherCard consolidates; per-Company BC views can swing wildly on small Companies.
Cross-connector reconciliation:
CardDirectionNotes
shopify.gross_margin_pctShopify subsetShopify-only margin, useful when DTC is a discrete channel.
bigcommerce.gross_margin_pctBC subsetSame.

Known limitations / merchant FAQs

What is a healthy Gross Margin %? Apparel: 50 to 65%. Electronics distribution: 18 to 28%. Specialty consumer goods: 35 to 50%. Industrial wholesale: 12 to 22%. Margin much above category benchmark suggests pricing power; much below suggests cost pressure or competition. Why does my margin swing 2 to 4 percentage points month-over-month even with stable prices? FIFO Costing Method causes layer-turnover swings. When you sell out of an old cheap layer and start consuming a new expensive layer, COGS jumps even though selling prices did not. Average Costing smooths this. Does the card account for inventory write-downs? Inventory write-downs post to a P&L account but typically not the standard COGS range (5000-5099). They go to a write-down account (often 5500). The card excludes these from COGS so the margin reflects ongoing trade, not balance-sheet adjustments. Multi-Company tenants: how is the consolidated margin computed? Each Company’s Revenue and COGS are translated to Reporting Currency, then summed before the ratio is taken. This avoids the “Simpson’s paradox” where individual Companies show one trend and the consolidated another. What about freight-in and customs duties? Captured via Item Charges in BC. If the Item Charge is allocated to the Item (typical for landed cost), it sits in COGS and the card captures it. If booked separately to Freight or Duty G/L accounts, it is excluded; the field map can normalise. Does the card include Manufacturing variances? Standard cost variances (Material, Capacity, Subcontractor) post to dedicated G/L accounts; some merchants treat these as COGS, some as Operating Expense. The card uses the strict 5000-5099 range by default; configure if your accounting policy differs. How does this compare to NetSuite’s gross margin? Same formula. NetSuite uses Item Costing (Average / Standard / FIFO / LIFO) like BC. The result for a multi-ERP merchant should be identical when scoped consistently. Power BI Finance Performance pack: same number? Yes for one Company. Multi-Company Power BI requires custom DAX or Premium-tier roll-up; this card consolidates natively.

Tracked live in Vortex IQ Nerve Centre

Gross Margin Percentage is one of hundreds of KPI pulses Vortex IQ tracks across Microsoft Dynamics 365 and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.