Skip to main content
Card class: HeroCategory: Ecommerce Platform
Headline GL-booked revenue from Business Central. The single number the Finance Controller checks at 9am Monday.

At a glance

Revenue formally booked into the Business Central General Ledger across the period. The arithmetic sum of revenue-account G/L Entry lines (typically accounts 4000 to 4999 in the standard BC chart of accounts) posted from Sales Invoices, Sales Cash Receipts, Sales Credit Memos, and recurring revenue journals against the selected Companies.
What it countsSUM(G/L Entry.Amount) filtered to revenue-class G/L accounts (4000 to 4999 in the standard BC chart), where Document Type IN ('Invoice', 'Credit Memo') and posting against a revenue Account No. This is the figure that flows into the Income Statement and survives audit. Cash Receipt Journal lines that hit revenue accounts directly are also counted.
VAT / tax treatmentNet of VAT / GST / sales tax. Business Central posts VAT to the configured VAT Posting Setup accounts (typically 5610 VAT Payable in UK setups, 2200 series in US localisations). This card sums revenue accounts only, so the figure is exclusive of VAT regardless of which localisation the Company uses.
ShippingConfigurable. If your Sales & Receivables Setup posts shipping to a revenue account (Shipment G/L Account = 4900 Shipping Income), it counts. If shipping posts to a contra-cost or recovery account, it does not. Most BC localisations default to revenue.
DiscountsAlready deducted at the line level. Line Discount Amount and Invoice Discount Amount reduce the revenue posting before it hits the GL.
Sales Credit MemosDeducted. A Sales Credit Memo posts a debit against revenue, so a refunded £1,000 invoice nets the line down to £0 in the same period (or in the period the Credit Memo posts, whichever is later). This is the structural difference vs commerce-platform Total Revenue, which is gross.
Cancelled / voided ordersExcluded by definition. A Sales Invoice cancelled before posting never hits the GL. Posted Invoices reversed via Cancel Posted Invoice generate a corrective Credit Memo, which nets the original to zero.
CurrencyMulti-Company setups: consolidated in reporting currency (parent Company’s Local Currency, typically GBP, USD, or EUR). BC’s General Ledger does the FX translation per Currency Exchange Rate cadence (transaction-date by default, period-average optional via Adjust Exchange Rates batch). Single-Company accounts: native Local Currency, no translation needed.
Company scopeCard respects the selected Company filter on the dashboard. By default rolls up every Company the connected Azure AD identity can see via the BC environment. Eliminations on intercompany revenue apply if the user picks the Consolidation Company.
Power BI complementarityPower BI’s standard BC content pack shows “Total Revenue” sliced by month. This card matches it within rounding when scoped to the same Company and date filter. The difference: Power BI is one Company at a time, this card consolidates across every connected Company plus the commerce side.
Time window30D vsP (default 30D vs the prior 30D)
Alert triggerdrop >15% vsP, driven by sentiment_key: revenue_trend
Rolesowner, finance, operations

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 UK omnichannel apparel brand running Business Central in the Microsoft 365 commercial cloud, with three Companies in a single BC tenant: UK Apparel Ltd (parent, GBP), US Apparel Inc (USD), and EU DTC BV (EUR). The 30-day window covers 14 Mar 26 to 12 Apr 26. Reporting currency is GBP. Annual revenue is in the £55M to £65M range, putting the merchant squarely in BC’s mid-market sweet spot.
CompanyLocal revenueFX rate (period avg)GBP equivalent
UK Apparel Ltd£2,640,0001.0000£2,640,000
US Apparel Inc$1,820,0000.7820£1,423,240
EU DTC BV€1,140,0000.8540£973,560
Less: intercompany elimination(£148,000)n/a(£148,000)
Revenue Booked into GL (this card)£4,888,800
Five things to notice:
  1. Intercompany elimination removed £148,000. UK Apparel Ltd shipped wholesale stock to US Apparel Inc and posted an inter-company Sales Invoice. This is real revenue inside the UK Company’s books but it nets to zero at the consolidated level (the US sub records it as inventory cost via the matching Purchase Invoice). The card respects the elimination convention as long as the user is viewing the Consolidation Company; if they pivot to UK Apparel Ltd alone, the £148,000 reappears.
  2. The GBP equivalent uses the period-average FX rate, not the spot rate at posting. BC’s Currency Exchange Rate table holds daily rates by default, but Adjust Exchange Rates can recompute consolidated reporting at period-average. If the merchant flips between the two views, the card moves slightly even though the underlying transactions did not.
  3. Commerce platform Total Revenue for the same window was £5,420,000 across Shopify Plus + a B2B Adobe Commerce instance. The £531,200 gap is the killer finding. A breakdown lives on the Revenue Gap vs Commerce card and the cross-connector card, but at a high level it splits as: £272,000 Sales Orders posted but not yet Invoiced (still in Released state), £128,000 cancellations and Credit Memos that hit GL but not the commerce headline, £92,000 unmapped marketplace orders not yet syncing into BC, £39,200 timing on the period boundary.
  4. Last period was £5,110,000. This period is down 4.3% vsP, well below the drop >15% vsP alert threshold. The Nerve Centre stays quiet, but the trendline still appears on the card.
  5. Power BI parity check. The merchant’s Finance Director runs the standard BC Power BI dashboard (“Finance Performance”) on the UK Apparel Ltd Company alone and sees £2,638,400 vs the £2,640,000 in the table. The £1,600 difference is rounding on the Adjust Exchange Rates batch. When she runs Power BI for US Apparel Inc and tries to add the two, she has to manually FX-translate. This card does the consolidation natively, which is the structural advantage Vortex IQ delivers over Power BI on a multi-Company BC tenant.

Sibling cards merchants should reference together

Revenue Booked into GL is the canonical revenue figure but it lags real economic activity. Pair it with these to triangulate.
CardWhy pair it with Revenue Booked into GL
Revenue Gap vs CommerceThe killer finding for any commerce business running BC. Commerce Total Revenue minus this card, broken down by reason. Tells you whether the gap is timing, mapping, or accounting policy.
Invoiced RevenueThe Sales Invoice slice of this card. Excludes Cash Receipts and direct revenue journals. Useful when AR Aging-driven analysis matters more than P&L roll-up.
Cash CollectedTells you what you actually banked, vs what you booked. The spread between this card and Cash Collected is your DSO problem.
Revenue by CompanyThe same number sliced by Company. Essential on multi-Company BC tenants when one Company is masking trends in another.
Revenue by SegmentBC’s Dimension dimension typically splits revenue by business unit, brand, or channel. The most actionable cut on consolidated revenue.
Revenue by CurrencyMulti-Currency stores: shows currency mix and FX exposure on the booked total.
Open Sales Order ValueForward-looking complement. Today’s GL revenue is yesterday’s open Sales Orders that converted; today’s open SOs are tomorrow’s GL revenue.
shopify.total_revenue / bigcommerce.total_revenue / adobe_commerce.total_revenueThe commerce-platform headline for the same window. The gap between commerce gross and BC GL is the working-capital telemetry every Controller wants.

Reconciling against the vendor’s own dashboard

Where to look in Business Central: The closest native equivalents in the Business Central UI are:
Reports > Finance > Income Statement (period view, run via the Role Centre tile) Chart of Accounts > drill into Revenue accounts (transaction view via the Account Card) Sales > Sales Order List (forward-looking, NOT this card) Power BI > Finance Performance content pack > Revenue tile (one Company at a time)
The Income Statement summary line “Total Revenue” should match this card to within a couple of pounds when you select the same period and the same Company. For an audit-grade match, run the G/L Register (Posted Documents > G/L Register), filter to revenue accounts (4000 to 4999) and posted entries, then sum the Credit Amount column. Or pull the same data via OData: https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environment}/api/v2.0/companies({companyId})/generalLedgerEntries?$filter=accountNumber ge '4000' and accountNumber le '4999'. Common mistakes when comparing against BC’s own reports:
  • Sales Order List sums Sales Orders, not booked revenue. SOs in Open or Released state contribute to that report but are not yet GL revenue. Expect Sales Order List total > this card.
  • Sales Statistics (Sales > Sales Statistics) is order-level and includes Quotes (Document Type = Quote) if the filter isn’t tightened. This card excludes Quotes by definition.
  • Customer Ledger Entries is AR-based, not revenue-based. It excludes Cash Sales and shows outstanding balances, not booked revenue.
Why our number may legitimately differ from BC’s reports:
ReasonDirectionWhy
Local Currency vs Reporting CurrencyEitherIf you compare the card (Reporting Currency, set on the consolidation Company) against an Income Statement run at a single Company level (Local Currency), the FX translation differs. Always run BC reports at the same scope as the dashboard filter.
Period-end vs period-average FXSmallBC’s Currency Exchange Rate table uses transaction-date rates by default. The Adjust Exchange Rates batch can recompute at period-average. The card uses transaction-date rates per posted line. Differences average to fractions of a percent unless the period had a major FX shock.
Sales Credit Memo timingEitherA return invoice issued in Period 1 with a Sales Credit Memo posting in Period 2 splits across two periods. BC’s Income Statement applies the same convention, but a manual saved filter on a single Document Type misses one side of the pair.
Intercompany eliminationCard lowerWhen the user filters to “Consolidation”, eliminations apply. BC’s per-Company Income Statements do not eliminate inter-company lines.
OData sync lagCard up to 15 min behindVortex IQ pulls from BC’s OData v2.0 endpoint with a 15-minute cache. A late-day Invoice may appear in BC’s Income Statement and not yet in the card. Power BI’s standard scheduled refresh is once or twice a day, so over the same window the card is materially fresher.
Non-revenue accounts wrongly mappedEitherIf your chart has revenue items mapped to non-revenue accounts (e.g. shipping booked to Cost of Goods rather than Other Income), they are missed. The card uses the standard 4000 to 4999 range; merchants with non-standard charts should confirm their mapping in the field map.
Cross-connector reconciliation, the killer finding:
CardExpected relationshipWhat causes legitimate divergence
shopify.total_revenueCommerce gross > BC GL bookedSales Orders in Released state (commerce booked, not yet invoiced), cancellations and Credit Memos (subtract from GL but not commerce headline), unmapped marketplace orders, period-boundary timing.
bigcommerce.total_revenueCommerce gross > BC GL bookedAs Shopify above. B2B BigCommerce orders are particularly prone to long Released-but-not-Invoiced lag.
adobe_commerce.total_revenueCommerce gross > BC GL bookedAs above. Adobe Commerce B2B installations often have multi-step approval before SOs invoice.
stripe.stripe_total_revenueStripe ≤ BC GLStripe sees only card / wallet payments. Cash Sales paid via PayPal, ACH, wire, or terms (Net-30 invoices) are missing from Stripe but in BC.
paypal.pp_total_volumePayPal ≤ BC GLPayPal-only subset.
The detailed gap-breakdown lives on the revenue-gap cross-connector card. The single most-asked finding from any mid-market commerce Controller using Vortex IQ is “where did the £531K go?”, and that card answers it line by line.

Known limitations / merchant FAQs

Why is the GL booked figure lower than my Shopify or BigCommerce headline? Three structural reasons, in order of typical contribution:
  1. Released-but-not-Invoiced. Commerce orders post to Sales Orders in BC, then move through Open > Released > Posted (Invoice) before becoming a Posted Sales Invoice that hits the GL. The lag is usually 1 to 7 days for DTC and 10 to 30 days for B2B Net-30 terms. Anything in Open or Released state is commerce revenue but not yet GL revenue.
  2. Sales Credit Memos. A return on a £1,000 order subtracts from this card but the commerce platform usually shows it on the original gross headline. Over a year a 10% return rate becomes a 10% structural gap.
  3. Cancellations. A cancelled order may still show in the commerce platform’s lifetime totals (especially BigCommerce) but is voided in BC, so the GL net is zero.
The full reconciliation lives on the Revenue Gap vs Commerce card. Why is BC “the source of truth” for revenue if my commerce platform shows higher numbers? BC is where the audit happens, where tax authorities pull, and where the bank lender looks. The commerce platform is where the customer paid, but customer-paid is not the same as recognised revenue under accounting standards (ASC 606 in the US, IFRS 15 in the UK and EU). For boardroom and bank conversations, this card is what counts. For acquisition and conversion analysis, commerce headlines are what counts. Both are right, they just answer different questions. Does this card include Cash Receipts (POS or DTC paid at checkout)? Yes if the Cash Receipt posts to a revenue account (the typical setup for retail POS via the Cash Receipt Journal). If the merchant uses BC’s standard Sales Cash Receipt template, revenue posts to the same 4000 series accounts as Sales Invoices and the card captures it. If POS uses a third-party app that batch-posts to a clearing account, the merchant needs to confirm the field map. BC vs NetSuite vs SAP: how does this card compare? The arithmetic is identical: sum of revenue-account postings. The differences live in the surrounding ecosystem:
  • BC: Microsoft 365-native UX, Power BI dashboards out of the box, AL Extensions for customisation, twice-yearly major release cadence, native Common Data Service sharing with Dynamics 365 Sales (CRM). Mid-market sweet spot at 30Mto30M to 150M revenue.
  • NetSuite: SuiteCloud platform with quarterly releases, deeper consolidation tooling, broader vertical templates, larger pre-built marketplace. Common at 50Mto50M to 500M revenue.
  • SAP S/4HANA: enterprise-tier with deepest manufacturing-cost, treasury, and tax-jurisdiction tooling. Implementation cost typically 5 to 10x BC. Common at $250M+.
For mid-market commerce + light manufacturing, BC’s Microsoft-stack integration (Office 365 UX, Teams, Power BI) is its biggest differentiator. Vortex IQ runs identically across all three. What’s the OData v2.0 freshness on this card? Vortex IQ pulls generalLedgerEntries from the BC OData v2.0 API with a 15-minute cache. Posted entries are visible to the API immediately on posting (no batch lag). The card is therefore at most 15 minutes stale, which is materially fresher than Power BI’s default refresh schedule (once or twice a day). Multi-Company aggregation, how does it work? BC’s multi-Company model puts each Company in its own database table set within a single tenant. The OData API exposes /companies({companyId})/... per Company; Vortex IQ enumerates the connected Companies and aggregates server-side, applying FX translation to the configured Reporting Currency. Power BI’s standard content pack handles one Company at a time, which is why most multi-Company BC merchants either build their own consolidation in Power BI Premium or live with single-Company views. This card removes that limitation. AL Extensions: do customisations affect the number? Only if the extension changes the GL posting logic. A typical AL Extension adds fields, validations, or workflow steps without modifying the chart of accounts. If your extension routes revenue to non-standard accounts (outside the 4000 to 4999 range), the field map needs the custom account list. The Vortex IQ onboarding captures this. Common Data Service / Dataverse, does the card use it? No. CDS / Dataverse is the integration layer between Dynamics 365 Sales (CRM) and BC. The revenue numbers live in BC’s GL, which Vortex IQ reads directly. CDS is relevant for the Customer master if the merchant uses Dynamics 365 Sales as the master and BC as the sub-ledger; the card pulls revenue regardless. Single-Company BC accounts: does the card behave differently? Same logic, simpler scope. Single-Company tenants skip the FX translation and consolidation steps. The Reporting Currency is the Local Currency. Most fields are identical. B2B credit-hold mechanics: does this card show held revenue? A Sales Order on credit hold (Credit Limit Exceeded warning, blocked from posting) is not yet a posted Invoice, so it is not in this card. Once Finance releases the hold and the SO posts as an Invoice, it lands here. The lag is the killer working-capital signal; pair this card with Sales Orders Blocked to see what is stuck.

Tracked live in Vortex IQ Nerve Centre

Revenue Booked into GL 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.