← Back to Metrics

Average Time to Course Completion

Also known as: Course Completion Time Average

EngagementmetricEdTech & E-Learning

Measures the average duration taken by learners to complete a course from enrollment to completion. This metric helps in understanding learner engagement and course effectiveness.

Business Use Case

Executives can use this metric to identify courses that may need redesign or additional support resources to improve completion rates.

Business Criticality

High

Journey / Navigation Area

Engagement

Owning Function

Data Architecture Team

Scope

User

Formula

SUM(completion_time) / COUNT(completed_courses)

Calculation Notes

1️⃣ Exclude courses with incomplete status. 2️⃣ Calculate the mean completion time. 3️⃣ Determine the standard deviation of completion times. 4️⃣ Identify outliers exceeding 2 standard deviations from the mean. 5️⃣ Filter out these outliers from the dataset.

Technical Details

Measure Typeaverage
Aggregation WindowTime based - Monthly

Events

Data Mappings

W3 Data Layer
{}
GA4 Data Layer
{}
Adobe Client Data Layer
{}
XDM Mapping
{}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
SELECT user_id, AVG(TIMESTAMP_DIFF(completion_time, enrollment_time, SECOND)) AS avg_time_to_completion
FROM (
  SELECT user_id,
         MIN(IF(event_name = 'enroll', event_timestamp, NULL)) AS enrollment_time,
         MIN(IF(event_name = 'complete_course', event_timestamp, NULL)) AS completion_time
  FROM `your-project.analytics_123456789.events_*`,
       UNNEST(event_params) AS params
  WHERE event_name IN ('enroll', 'complete_course')
  GROUP BY user_id
  HAVING completion_time IS NOT NULL
)
GROUP BY user_id
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
SELECT user_id, AVG(DATEDIFF(completion_time, enrollment_time)) AS avg_time_to_completion
FROM (
  SELECT user_id,
         MIN(CASE WHEN event_name = 'enroll' THEN event_timestamp END) AS enrollment_time,
         MIN(CASE WHEN event_name = 'complete_course' THEN event_timestamp END) AS completion_time
  FROM aep_backend_dataset,
       UNNEST(event_params) AS params
  WHERE event_name IN ('enroll', 'complete_course')
  GROUP BY user_id
  HAVING completion_time IS NOT NULL
)
GROUP BY user_id

Source Data

Learning Management System

Dependencies

[ "Course Enrollment Event", "Course Completion Event" ]

Report Attributes

Course Type Learner Demographics

Recommended Reporting Views

Views
Learner Engagement DashboardCourse Performance Dashboard

Segment Eligibility

true

Governance

Data Sensitivityinternal

Governance

Created bydevyendarm
Created on8/25/2026
Last modified bydevyendarm
StatusPUBLISHED

GitHub

View File on GitHubcatalog/metrics/average-time-to-course-completion.yml

Community Discussion