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 counts | Standard 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 treatment | Includes VAT in both numerator (AR) and denominator (Credit Sales). Net result equals tax-exclusive calculation. |
| AR balance | Customer Ledger Entry filtered to Document Type = 'Invoice', Open = TRUE, Remaining Amount. |
| Credit sales | Posted Sales Invoices only (Document Type = 'Invoice'). Cash Receipts via Cash Receipt Journal excluded. |
| DTC prepaid | Excluded from numerator and denominator. |
| Currency | Multi-Company: AR and Credit Sales translated to Reporting Currency at Currency Exchange Rate. |
| Company scope | Respects dashboard filter. |
| Time window | 30D vsP (rolling DSO computed on 90-day denominator) |
| Alert trigger | >45 days OR up >5 vsP, sentiment dso |
| Roles | owner, 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.| Component | Value |
|---|---|
| Open AR (excludes Cash Receipts) | $11,420,000 |
| 90-day Credit Sales (Invoiced Revenue from posted Sales Invoices) | $19,200,000 |
| Days in window | 90 |
| DSO (this card) | (11.42M / 19.20M) × 90 = 53.5 days |
| This period | Prior 30D | vsP | |
|---|---|---|---|
| DSO | 53.5 | 49.2 | +4.3 days |
- 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.
- 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.
- 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.
- 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.
- 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
| Card | Why pair it with DSO |
|---|---|
| Invoice Aging Summary | The bucket detail behind DSO. |
| AR Aging Buckets | Per-customer detail. |
| Cash Collected | Receipts side. Strong cash-collected days reduce DSO. |
| Overdue Invoice Value | Pressure target. Overdue % of AR drives DSO. |
| Cash Application Rate | Operations efficiency. |
| Customer Credit Utilisation | Predictive risk view. |
| Top B2B Accounts | Concentration. |
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:
| Reason | Direction | Why |
|---|---|---|
| Window selection | Either | Some Controllers use 90-day rolling; some use trailing 12-month. Card defaults to 90-day. |
| Cash Sales inclusion | Card excludes | Including Cash Receipts artificially deflates DSO because they clear instantly. |
| Tax inclusion | Either | Some calculations use net-of-tax in both; others use gross. Card uses gross consistently. |
| Multi-Company scope | Either | Card defaults to all connected Companies. |
| OData freshness | Card up to 15 min behind | Customer Ledger Entries appear via OData within 15 minutes of posting. |
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 byCustomer.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.