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 counts | SUM(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 treatment | Net 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. |
| Shipping | Configurable. 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. |
| Discounts | Already deducted at the line level. Line Discount Amount and Invoice Discount Amount reduce the revenue posting before it hits the GL. |
| Sales Credit Memos | Deducted. 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 orders | Excluded 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. |
| Currency | Multi-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 scope | Card 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 complementarity | Power 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 window | 30D vsP (default 30D vs the prior 30D) |
| Alert trigger | drop >15% vsP, driven by sentiment_key: revenue_trend |
| Roles | owner, 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.| Company | Local revenue | FX rate (period avg) | GBP equivalent |
|---|---|---|---|
| UK Apparel Ltd | £2,640,000 | 1.0000 | £2,640,000 |
| US Apparel Inc | $1,820,000 | 0.7820 | £1,423,240 |
| EU DTC BV | €1,140,000 | 0.8540 | £973,560 |
| Less: intercompany elimination | (£148,000) | n/a | (£148,000) |
| Revenue Booked into GL (this card) | £4,888,800 |
- 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.
- 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.
- 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
Releasedstate), £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. - Last period was £5,110,000. This period is down 4.3% vsP, well below the
drop >15% vsPalert threshold. The Nerve Centre stays quiet, but the trendline still appears on the card. - 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.| Card | Why pair it with Revenue Booked into GL |
|---|---|
| Revenue Gap vs Commerce | The 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 Revenue | The 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 Collected | Tells you what you actually banked, vs what you booked. The spread between this card and Cash Collected is your DSO problem. |
| Revenue by Company | The same number sliced by Company. Essential on multi-Company BC tenants when one Company is masking trends in another. |
| Revenue by Segment | BC’s Dimension dimension typically splits revenue by business unit, brand, or channel. The most actionable cut on consolidated revenue. |
| Revenue by Currency | Multi-Currency stores: shows currency mix and FX exposure on the booked total. |
| Open Sales Order Value | Forward-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_revenue | The 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
OpenorReleasedstate 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.
| Reason | Direction | Why |
|---|---|---|
| Local Currency vs Reporting Currency | Either | If 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 FX | Small | BC’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 timing | Either | A 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 elimination | Card lower | When the user filters to “Consolidation”, eliminations apply. BC’s per-Company Income Statements do not eliminate inter-company lines. |
| OData sync lag | Card up to 15 min behind | Vortex 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 mapped | Either | If 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. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
| shopify.total_revenue | Commerce gross > BC GL booked | Sales 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_revenue | Commerce gross > BC GL booked | As Shopify above. B2B BigCommerce orders are particularly prone to long Released-but-not-Invoiced lag. |
| adobe_commerce.total_revenue | Commerce gross > BC GL booked | As above. Adobe Commerce B2B installations often have multi-step approval before SOs invoice. |
| stripe.stripe_total_revenue | Stripe ≤ BC GL | Stripe 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_volume | PayPal ≤ BC GL | PayPal-only subset. |
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:- 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 inOpenorReleasedstate is commerce revenue but not yet GL revenue. - 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.
- 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.
- 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 150M revenue.
- NetSuite: SuiteCloud platform with quarterly releases, deeper consolidation tooling, broader vertical templates, larger pre-built marketplace. Common at 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+.
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.