Project Budget vs Actual Report

Demo Data

Comparison of project budgets against actual costs and commitments with variance analysis

ProjectsProject Financial ManagementProject Budget vs Actual Report
Report ID: 5001
Updated: 1/29/2024
Module: Project Financial Management
SQL Query
SELECT 
  p.PROJECT_NUMBER,
  p.PROJECT_NAME,
  p.PROJECT_STATUS_CODE,
  p.START_DATE,
  p.COMPLETION_DATE,
  p.PROJECT_MANAGER_PERSON_ID,
  pm.FULL_NAME AS PROJECT_MANAGER_NAME,
  o.NAME AS ORG_NAME,
  b.BUDGET_TYPE_CODE,
  b.BUDGET_VERSION_ID,
  b.BASELINED_DATE,
  SUM(bl.BUDGET_AMOUNT) AS TOTAL_BUDGET_AMOUNT,
  SUM(NVL(a.ACTUAL_COST, 0)) AS TOTAL_ACTUAL_COST,
  SUM(NVL(c.COMMITMENT_AMOUNT, 0)) AS TOTAL_COMMITMENT_AMOUNT,
  SUM(bl.BUDGET_AMOUNT) - SUM(NVL(a.ACTUAL_COST, 0)) - SUM(NVL(c.COMMITMENT_AMOUNT, 0)) AS REMAINING_BUDGET,
  ROUND(((SUM(NVL(a.ACTUAL_COST, 0)) + SUM(NVL(c.COMMITMENT_AMOUNT, 0))) / 
         NULLIF(SUM(bl.BUDGET_AMOUNT), 0)) * 100, 2) AS BUDGET_UTILIZATION_PCT,
  p.CREATED_BY,
  p.CREATION_DATE,
  p.LAST_UPDATE_DATE
FROM PA_PROJECTS_ALL p
JOIN PA_BUDGETS b ON p.PROJECT_ID = b.PROJECT_ID
JOIN PA_BUDGET_LINES bl ON b.BUDGET_VERSION_ID = bl.BUDGET_VERSION_ID
JOIN HR_ORGANIZATION_UNITS o ON p.CARRYING_OUT_ORGANIZATION_ID = o.ORGANIZATION_ID
LEFT JOIN PER_PEOPLE_F pm ON p.PROJECT_MANAGER_PERSON_ID = pm.PERSON_ID
  AND TRUNC(SYSDATE) BETWEEN pm.EFFECTIVE_START_DATE AND pm.EFFECTIVE_END_DATE
LEFT JOIN (
  SELECT 
    PROJECT_ID,
    SUM(ACCRUAL_FLAG * NVL(DENOM_BURDENED_COST, 0)) AS ACTUAL_COST
  FROM PA_EXPENDITURE_ITEMS_ALL
  WHERE COST_DISTRIBUTED_FLAG = 'Y'
  GROUP BY PROJECT_ID
) a ON p.PROJECT_ID = a.PROJECT_ID
LEFT JOIN (
  SELECT 
    PROJECT_ID,
    SUM(NVL(COMMITTED_COST, 0)) AS COMMITMENT_AMOUNT
  FROM PA_COMMITMENT_TXNS
  WHERE COMMITMENT_STATUS = 'A'
  GROUP BY PROJECT_ID
) c ON p.PROJECT_ID = c.PROJECT_ID
WHERE b.CURRENT_FLAG = 'Y'
  AND b.BUDGET_STATUS_CODE = 'B'
  AND (:project_status IS NULL OR p.PROJECT_STATUS_CODE = :project_status)
  AND (:org_id IS NULL OR p.CARRYING_OUT_ORGANIZATION_ID = :org_id)
  AND (:project_manager_id IS NULL OR p.PROJECT_MANAGER_PERSON_ID = :project_manager_id)
  AND (:start_date_from IS NULL OR p.START_DATE >= :start_date_from)
  AND (:start_date_to IS NULL OR p.START_DATE <= :start_date_to)
GROUP BY p.PROJECT_NUMBER, p.PROJECT_NAME, p.PROJECT_STATUS_CODE, p.START_DATE,
         p.COMPLETION_DATE, p.PROJECT_MANAGER_PERSON_ID, pm.FULL_NAME, o.NAME,
         b.BUDGET_TYPE_CODE, b.BUDGET_VERSION_ID, b.BASELINED_DATE,
         p.CREATED_BY, p.CREATION_DATE, p.LAST_UPDATE_DATE
ORDER BY p.PROJECT_NUMBER
Report Fields (12)
Output columns returned by this report
PROJECT_NUMBER
VARCHAR2

Project number

PROJECT_NAME
VARCHAR2

Project name

PROJECT_STATUS_CODE
VARCHAR2

Project status

START_DATE
DATE

Project start date

COMPLETION_DATE
DATE

Project completion date

PROJECT_MANAGER_NAME
VARCHAR2

Project manager name

ORG_NAME
VARCHAR2

Organization name

TOTAL_BUDGET_AMOUNT
NUMBER

Total budget amount

TOTAL_ACTUAL_COST
NUMBER

Total actual cost

TOTAL_COMMITMENT_AMOUNT
NUMBER

Total commitments

REMAINING_BUDGET
NUMBER

Remaining budget

BUDGET_UTILIZATION_PCT
NUMBER

Budget utilization percentage

Parameters (5)
Input parameters for this report
project_status
VARCHAR2

Project status filter

org_id
NUMBER

Organization ID

project_manager_id
NUMBER

Project manager person ID

start_date_from
DATE

Project start date from

start_date_to
DATE

Project start date to

Report Information

Projects

Project Financial Management

5001

1/29/2024, 12:30:00 PM

Similar Reports
Reports with similar structure or purpose

Project Resource Utilization

Project resource usage analysis

Project Execution
82%

Trial Balance Report

Financial trial balance

General Ledger
55%

Employee Directory Report

Employee information

Core HR
28%
    Built with v0