Plain-language questions
Ask for work in progress (WIP) value 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 · Projects and time
Work in progress (WIP) value is the value of work that has been carried out but not yet invoiced. You calculate it as the value of billable hours and costs, minus what has already been invoiced and written off. WIP is money you still have to collect, so it ties up working capital.
Value of billable hours and costs − invoiced − written off
On 30 September 2026 Acme Groothandel had €182,000 of billable hours at rate on its running projects. €138,000 had been invoiced and €6,000 written off. Work in progress is €182,000 − €138,000 − €6,000 = €38,000.
Fictitious figures for Acme Groothandel, a sample wholesaler.
High or rising WIP means a lot of work has been done that has not been invoiced, with a risk of late payment or write-off. Look at how old the WIP is per project: items that sit for months become harder and harder to bill. Read it with the realisation rate and DSO to see the full cash picture.
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.
SELECT project_id,
SUM(hours * hourly_rate) FILTER (WHERE billable) AS value_worked,
SUM(invoiced_amount) AS invoiced,
SUM(written_off_amount) AS written_off,
COALESCE(SUM(hours * hourly_rate) FILTER (WHERE billable), 0)
- SUM(invoiced_amount) - SUM(written_off_amount) AS wip_value
FROM time_entries
WHERE entry_date <= DATE '2026-09-30'
GROUP BY project_id
ORDER BY wip_value DESC;Value Worked = SUMX ( FILTER ( TimeEntries, TimeEntries[Billable] = TRUE () ), TimeEntries[Hours] * TimeEntries[HourlyRate] )
WIP Value = [Value Worked] - SUM ( TimeEntries[InvoicedAmount] ) - SUM ( TimeEntries[WrittenOffAmount] )
WIP Share = DIVIDE ( [WIP Value], [Value Worked] )In ENABLE
Ask for work in progress (WIP) value 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
Take the value of all billable hours and costs on a project at the agreed rate. Subtract what has already been invoiced and what has been written off. The difference is work in progress.
WIP is revenue you have earned but not yet invoiced, so cash you have not received. The longer it sits, the greater the risk the client will dispute it. It also counts towards working capital and appears on the balance sheet.
Invoice more often, for example monthly or per delivered milestone, and agree staged payments on large projects. Have project managers review old WIP every week. That way fewer hours sit unbilled.
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.