EnableYourData.com

KPI · Finance

Days payable outstanding (DPO): formula and example.

Days payable outstanding (DPO), also called creditor days, is the average number of days between receiving a purchase invoice and paying the supplier. You calculate it by dividing outstanding trade payables by cost of goods sold and multiplying by the number of days. A higher DPO means you hold on to suppliers' money for longer.

Days payable outstanding (DPO) formula

Outstanding trade payables ÷ cost of goods sold for the period × number of days in the period

Worked example

At the end of 2025 Acme Groothandel had €840,000 of unpaid purchase invoices. Cost of goods sold for 2025 was €8,400,000. DPO is €840,000 ÷ €8,400,000 × 365 = 36.5 days.

Fictitious figures for Acme Groothandel, a sample wholesaler.

How to read this KPI

A higher DPO keeps more cash in the business, but paying late costs goodwill, early-payment discounts and sometimes security of supply. Compare DPO with the payment terms you have agreed with suppliers. Read it together with DSO: if customers pay you later than you pay your suppliers, you are financing the difference.

Pitfalls with days payable outstanding (DPO)

  • Including payables for overheads and capital expenditure while dividing only by cost of goods sold.
  • Dividing purchase invoices including VAT by cost of goods sold excluding VAT.
  • Pushing DPO up by paying late and losing early-payment discounts or supplier goodwill as a result.

SQL & DAX

Calculating days payable outstanding (DPO) in SQL and DAX

Two examples on a fictitious data warehouse for Acme Groothandel: a PostgreSQL query and a measure for a Power BI model. Adjust table and column names to your own model.

SQL · PostgreSQL
WITH cogs AS (
  SELECT SUM(amount) AS cogs_365d
  FROM gl_entries
  WHERE account_group = 'cogs'
    AND entry_date > current_date - interval '365 days'
), payables AS (
  SELECT SUM(amount) AS open_payables
  FROM purchase_invoices
  WHERE invoice_date <= current_date
    AND (paid_date IS NULL OR paid_date > current_date)
)
SELECT payables.open_payables,
       cogs.cogs_365d,
       ROUND(payables.open_payables / NULLIF(cogs.cogs_365d, 0) * 365, 1) AS dpo_days
FROM payables, cogs;
DAX · Power BI
Open Payables = CALCULATE(SUM(PurchaseInvoices[Amount]), ISBLANK(PurchaseInvoices[PaidDate]))

DPO (days) =
VAR Cogs365 = CALCULATE(SUM(GL[Amount]), GL[AccountGroup] = "cogs", DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -365, DAY))
RETURN DIVIDE([Open Payables], Cogs365) * 365

In ENABLE

Tracking this KPI in ENABLE

Plain-language questions

Ask for days payable outstanding (DPO) per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.

Read more →

In your Power BI dashboard

Define the KPI as a measure in your Power BI model and show it in the portal, with "Last refreshed" next to it. Access profiles and optional row-level security decide who sees which figures.

Read more →

Custom dashboards (pilot)

Add the KPI as a tile to a custom dashboard, compared with last year. The Dashboard Builder is a pilot and can be switched on per client.

Read more →

Monthly targets

With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.

Read more →

FAQ

Frequently asked questions

How do you calculate days payable outstanding?

Divide outstanding trade payables by cost of goods sold (or total purchases) for a period and multiply by the number of days. With €840,000 of payables and €8,400,000 of annual cost of goods sold, DPO is 36.5 days.

What is the difference between DPO and DSO?

DSO measures how quickly customers pay you, DPO how quickly you pay your suppliers. Together with days inventory outstanding they make up the cash conversion cycle: the longer customers take and the faster you pay, the more working capital you need.

Is a high DPO good?

A high DPO helps your cash position, but only as long as you stay within the agreed terms. Consistently paying late can lead to stricter terms or lost early-payment discounts. Always compare DPO with the terms you have agreed.

Use AI on your own data. Securely, and without the headache.

In an online demo we show how ENABLE makes your data securely available and how you build on it: describing an app in the AI Builder, plain-language questions, dashboards and APIs. And how we set it up and manage it for you.