Skip to main content
Card class: HeroCategory: Ecommerce Platform
Average days from invoice issue to cash applied. Earliest warning of cash-flow trouble.

At a glance

Average days from Sales Invoice posting to cash applied (Customer Ledger Entry closed). The single most-watched cash-flow KPI in mid-market commerce. Rising DSO is the earliest warning of cash-flow trouble.
What it countsStandard formula: DSO = (AR Balance ÷ Total Credit Sales) × Number of Days. Card uses 90-day rolling window. AR Balance = sum of open Customer Ledger Entry Remaining Amount for posted Sales Invoices. Credit Sales = posted Sales Invoices in window (excludes Cash Receipts).
Tax treatmentIncludes VAT in both numerator (AR) and denominator (Credit Sales). Net result equals tax-exclusive calculation.
AR balanceCustomer Ledger Entry filtered to Document Type = 'Invoice', Open = TRUE, Remaining Amount.
Credit salesPosted Sales Invoices only (Document Type = 'Invoice'). Cash Receipts via Cash Receipt Journal excluded.
DTC prepaidExcluded from numerator and denominator.
CurrencyMulti-Company: AR and Credit Sales translated to Reporting Currency at Currency Exchange Rate.
Company scopeRespects dashboard filter.
Time window30D vsP (rolling DSO computed on 90-day denominator)
Alert trigger>45 days OR up >5 vsP, sentiment dso
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 Business Central, $90M annual revenue, B2B Net-30 / Net-45 mix. Snapshot 14 Apr 26.
ComponentValue
Open AR (excludes Cash Receipts)$11,420,000
90-day Credit Sales (Invoiced Revenue from posted Sales Invoices)$19,200,000
Days in window90
DSO (this card)(11.42M / 19.20M) × 90 = 53.5 days
This periodPrior 30DvsP
DSO53.549.2+4.3 days
Five things to notice:
  1. DSO at 53.5 days exceeds the alert threshold (45 days). Net-30 customers are paying ~23 days late on average. The card fires the sentiment alert. The Power BI Cash Flow content pack would not catch this directly because it tracks bank balance, not invoice-to-cash velocity.
  2. vsP is +4.3 days, just below the 5-day jump threshold. Trend is bad but not yet panic. The Controller has 1 to 2 weeks to act before it spikes through.
  3. AR concentration matters. Three Customers in the 60+ aging bucket carry $2.4M of the open AR. Resolving 2 of them would drop DSO back under 50. Pair this with AR Aging Buckets and Top B2B Accounts to identify them.
  4. Cash Sales correctly excluded. If this merchant included DTC prepaid web orders (which post to Cash Receipt Journal and clear instantly), DSO would compute artificially low because cash hits same-day. The card excludes Cash Receipts so the number reflects credit-customer behaviour only.
  5. Power BI parity: the standard “Receivables Aging Detail” Power BI report shows the same AR balance ($11.42M) and a static aging bucket. Computing DSO from Power BI requires manually pulling Credit Sales from a separate report. The card consolidates both in one tile, refreshed every 15 minutes via OData.

Sibling cards merchants should reference together

CardWhy pair it with DSO
Invoice Aging SummaryThe bucket detail behind DSO.
AR Aging BucketsPer-customer detail.
Cash CollectedReceipts side. Strong cash-collected days reduce DSO.
Overdue Invoice ValuePressure target. Overdue % of AR drives DSO.
Cash Application RateOperations efficiency.
Customer Credit UtilisationPredictive risk view.
Top B2B AccountsConcentration.

Reconciling against the vendor’s own dashboard

Where to look in Business Central: BC does not have a single “DSO” tile in the standard interface. Most Controllers compute it from two reports:
Reports > Finance > Customer > Aged Accounts Receivable (numerator) Sales by Customer report in Power BI (denominator: Credit Sales) Power BI > Cash Flow content pack > DSO calculation (third-party customisation)
A BC Functional Consultant can build a custom KPI in the Role Centre that displays DSO; most do not, which is why the metric is buried. Why our number may legitimately differ from a manual calculation:
ReasonDirectionWhy
Window selectionEitherSome Controllers use 90-day rolling; some use trailing 12-month. Card defaults to 90-day.
Cash Sales inclusionCard excludesIncluding Cash Receipts artificially deflates DSO because they clear instantly.
Tax inclusionEitherSome calculations use net-of-tax in both; others use gross. Card uses gross consistently.
Multi-Company scopeEitherCard defaults to all connected Companies.
OData freshnessCard up to 15 min behindCustomer Ledger Entries appear via OData within 15 minutes of posting.
Cross-connector reconciliation: This card has no commerce-platform counterpart. Commerce platforms collect at order placement; DSO is meaningless on Shopify or BigCommerce DTC. For Stripe-routed B2B invoices (rare on BC tenants), the closest sibling is Stripe’s Average Days to Pay, but that compares invoice creation to charge capture, not posting to Customer Ledger Entry close.

Known limitations / merchant FAQs

What is a “good” DSO? Net-30 B2B target: 35 to 40 days. Net-60 target: 65 to 75. Net-90 target: 95 to 110. The healthy range is your terms + 5 to 15 days of slack. Anything beyond that signals collection or credit issues. Why is DSO rising even though Cash Collected is rising? Because revenue (denominator) is rising faster than cash (effectively), or AR balance (numerator) is rising disproportionately due to a few late-paying customers. Drill into AR Aging Buckets to see who. Should I include Cash Receipts? No. Cash Receipts via the Cash Receipt Journal clear instantly so they push DSO toward zero artificially. DSO is meant to measure credit-customer payment behaviour. Multi-currency, FX impact? Each component (AR, Credit Sales) is translated to Reporting Currency. The ratio is currency-neutral. FX shifts do not move DSO directly. What about subscription / recurring billing? Each billing cycle is treated as a credit sale. DSO captures whether subscribers pay on time. Healthy SaaS-adjacent businesses see DSO at terms + 0 to 5 days because subscriptions auto-charge. BC Cash Flow Forecast vs DSO: what is the difference? The Cash Flow Forecast (Search > “Cash Flow Forecast”) projects future cash position based on outstanding AR + AP + budget. It uses DSO implicitly to predict when AR will be collected. This card is the input; the Cash Flow Forecast is the output. Does this card include intercompany invoices? By default yes, but they typically clear quickly (intercompany payments process internally). To exclude, filter by Customer.Privacy Blocked = FALSE and exclude inter-company customer numbers. ASC 606 deferred revenue, does it bias DSO? Yes if you include it in Credit Sales. Deferred revenue not yet billed should not be in the denominator. The card uses Posted Sales Invoices (billed) only, so the bias is avoided. How does BC’s Aged AR report compare to NetSuite’s? Mathematically identical numerator. NetSuite’s Customer Aging report and BC’s Aged Accounts Receivable both sum open Customer Ledger Entry remaining amounts. The DSO formula and threshold conventions are identical. Vortex IQ’s card normalises both to the same definition so a multi-ERP merchant sees apples-to-apples DSO.

Tracked live in Vortex IQ Nerve Centre

Days Sales Outstanding (DSO) 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.