EnableYourData.com

KPI · Finance

Cash conversion cycle (CCC): formula and example.

The cash conversion cycle (CCC) is the number of days cash is tied up in stock and receivables before it comes back as customer payments, minus the days you take to pay suppliers. It combines days inventory outstanding, days sales outstanding and days payable outstanding in one figure. The shorter the cycle, the less working capital you need to grow.

Cash conversion cycle (CCC) formula

Days inventory outstanding (DIO) + days sales outstanding (DSO) − days payable outstanding (DPO)

Worked example

At the end of 2025 Acme Groothandel held €1,400,000 of stock against cost of goods sold of €8,400,000: 1,400,000 ÷ 8,400,000 × 365 = 60.8 days of inventory. DSO was 45.6 days and DPO 36.5 days. The cash conversion cycle is 60.8 + 45.6 − 36.5 = 69.9 days.

Fictitious figures for Acme Groothandel, a sample wholesaler.

How to read this KPI

A shorter cash conversion cycle means cash comes back faster and growth needs less funding. A longer cycle points to slower-moving stock, customers paying later or paying suppliers sooner; check which of the three components is changing. Compare the cycle with previous periods and, within the same sector, with similar businesses.

Pitfalls with cash conversion cycle (CCC)

  • Basing DSO on cost of goods sold, when it belongs on revenue; only DIO and DPO use cost of goods sold.
  • Measuring stock, receivables and payables on different dates.
  • Managing only the total, so that an improvement in payables hides a deterioration in stock.

SQL & DAX

Calculating cash conversion cycle (CCC) 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 pl AS (
  SELECT SUM(amount) FILTER (WHERE account_group = 'revenue') AS revenue,
         SUM(amount) FILTER (WHERE account_group = 'cogs') AS cogs
  FROM gl_entries
  WHERE entry_date > current_date - interval '365 days'
), bal AS (
  SELECT (SELECT SUM(value) FROM stock_levels
          WHERE snapshot_date = (SELECT MAX(snapshot_date) FROM stock_levels)) AS inventory,
         (SELECT SUM(open_amount) FROM invoices WHERE open_amount > 0) AS receivables,
         (SELECT SUM(amount) FROM purchase_invoices WHERE paid_date IS NULL) AS payables
)
SELECT ROUND(bal.inventory / NULLIF(pl.cogs, 0) * 365, 1) AS dio,
       ROUND(bal.receivables / NULLIF(pl.revenue, 0) * 365, 1) AS dso,
       ROUND(bal.payables / NULLIF(pl.cogs, 0) * 365, 1) AS dpo,
       ROUND((bal.inventory / NULLIF(pl.cogs, 0) + bal.receivables / NULLIF(pl.revenue, 0)
              - bal.payables / NULLIF(pl.cogs, 0)) * 365, 1) AS ccc_days
FROM pl, bal;
DAX · Power BI
CCC (days) =
VAR Cogs365 = CALCULATE(SUM(GL[Amount]), GL[AccountGroup] = "cogs", DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -365, DAY))
VAR Revenue365 = CALCULATE(SUM(GL[Amount]), GL[AccountGroup] = "revenue", DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -365, DAY))
VAR Inventory = CALCULATE(SUM(Stock[Value]), LASTDATE(Stock[SnapshotDate]))
VAR Receivables = CALCULATE(SUM(Invoices[OpenAmount]), Invoices[OpenAmount] > 0)
VAR Payables = CALCULATE(SUM(PurchaseInvoices[Amount]), ISBLANK(PurchaseInvoices[PaidDate]))
RETURN (DIVIDE(Inventory, Cogs365) + DIVIDE(Receivables, Revenue365) - DIVIDE(Payables, Cogs365)) * 365

In ENABLE

Tracking this KPI in ENABLE

Plain-language questions

Ask for cash conversion cycle (CCC) 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 the cash conversion cycle?

Add days inventory outstanding and days sales outstanding, then subtract days payable outstanding. With 60.8 inventory days, 45.6 receivable days and 36.5 payable days, the cash conversion cycle is 69.9 days. Calculate all three over the same period.

Can the cash conversion cycle be negative?

Yes, if customers pay before you pay your suppliers, the cycle is negative. This happens mostly in businesses that are paid upfront and hold little stock. In effect, suppliers are financing the business.

What is the difference between the cash conversion cycle and working capital?

Working capital is an amount in euros at a point in time, the cash conversion cycle is a number of days. The cycle shows how quickly cash moves through the business; working capital shows how much cash is tied up in it right now.

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.