EnableYourData.com

KPI · HR

Personnel cost per FTE: formula and example.

Personnel cost per FTE is total personnel cost in a period divided by the average number of FTE. Personnel cost covers gross pay, holiday pay, employer contributions and pension. It shows what an average full-time position costs and helps with budgeting and comparing departments.

Personnel cost per FTE formula

Total personnel cost in the period ÷ average FTE in the period

Worked example

In 2025 Acme Groothandel had €8,960,000 in personnel costs with an average of 128 FTE. Personnel cost per FTE is €8,960,000 ÷ 128 = €70,000.

Fictitious figures for Acme Groothandel, a sample wholesaler.

How to read this KPI

A rising figure can come from pay rises, a different mix of roles, more overtime or higher contributions. Compare by department and with last year, and read it next to revenue per employee and the personnel cost ratio. A lower figure is not automatically better if it means fewer experienced people.

Pitfalls with personnel cost per FTE

  • Dividing six months of cost by FTE without annualising and then comparing it with a full-year figure.
  • Including contractors and agency staff in the cost but not in the FTE, or the other way round.
  • Showing cost per FTE for a department of two, which makes individual salaries easy to work out.

SQL & DAX

Calculating personnel cost per FTE 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 monthly AS (
  SELECT period_month, SUM(gross_cost) AS cost
  FROM payroll
  GROUP BY period_month
),
fte AS (
  SELECT m.period_month, SUM(e.fte) AS fte
  FROM monthly m
  JOIN employees e ON e.hire_date <= m.period_month
   AND (e.termination_date IS NULL OR e.termination_date > m.period_month)
  GROUP BY m.period_month
)
SELECT date_trunc('year', m.period_month)::date AS year,
       SUM(m.cost) AS personnel_cost,
       ROUND(AVG(f.fte), 1) AS avg_fte,
       ROUND(SUM(m.cost) / NULLIF(AVG(f.fte), 0), 0) AS cost_per_fte
FROM monthly m
JOIN fte f USING (period_month)
GROUP BY 1
ORDER BY 1;
DAX · Power BI
Avg FTE =
AVERAGEX (
    VALUES ( 'Date'[YearMonth] ),
    VAR d = CALCULATE ( MAX ( 'Date'[Date] ) )
    RETURN SUMX ( FILTER ( ALL ( Employees ), Employees[HireDate] <= d && ( ISBLANK ( Employees[TerminationDate] ) || Employees[TerminationDate] > d ) ), Employees[FTE] )
)
Personnel Cost per FTE = DIVIDE ( SUM ( Payroll[GrossCost] ), [Avg FTE] )

In ENABLE

Tracking this KPI in ENABLE

Plain-language questions

Ask for personnel cost per FTE 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 personnel cost per FTE?

Add up all personnel costs in the period, including employer contributions, holiday pay and pension. Divide by the average FTE over the same period. For an annual figure, use the average of the monthly FTE totals.

Which costs belong in personnel cost per FTE?

Gross pay, holiday pay, any bonuses, employer contributions and pension are always included. Overtime, allowances and travel expenses usually are too. Contractors are counted separately unless you also include their FTE.

How does it differ from the personnel cost ratio?

Personnel cost per FTE expresses cost per position; the personnel cost ratio expresses it as a percentage of revenue. The first says something about the price of labour, the second about how heavily it weighs on your results. Together they give a fuller picture.

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.