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.
KPI · Finance
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.
Outstanding trade payables ÷ cost of goods sold for the period × number of days in the period
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.
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.
SQL & 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.
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;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) * 365In ENABLE
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.
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.
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.
With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.
FAQ
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.
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.
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.
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.