# Introduction

### Welcome to your DataCamp Enterprise reporting guide.

### Motivation

We understand that as an enterprise customer, having detailed insights and flexible reporting options is crucial for tracking progress, making informed decisions, and maximizing the value of our platform for your organization. This manual is designed to help you navigate the various reporting tools and available integrations.

### How to use this guide

This guide is structured to provide a comprehensive understanding of our platform's reporting tools and features. Each section is designed to be standalone, allowing you to jump directly to the topics most relevant to your needs. We recommend starting with the [Definitions](/understanding-reports-with-clarity-definitions) section to familiarize yourself with key terms and metrics. From there, you can explore the [Key Performance Indicators](#optimizing-key-performance-indicators-via-the-groups-tab) guide and, if relevant, the [Data Connector](#integrating-our-data-into-your-tools-via-data-connector) section. Use the index on the left-hand panel to navigate between sections easily.

### [Understanding reports with clarity (Definitions)](/understanding-reports-with-clarity-definitions)

Before diving into the reporting tools, it's essential to familiarize yourself with the key terms and metrics used throughout our platform. This section provides clear definitions to ensure you have a solid understanding of the data presented in your reports.

### Reporting guides

#### [Optimizing key performance indicators (via the Groups tab)](/optimizing-key-performance-indicators-via-the-groups-tab)

We offer a range of built-in reporting features that are accessible directly through the platform. This section will guide you through the different types of reports available, how to customize them to meet your needs, and tips for interpreting the data to gain valuable insights into your users' learning journeys.

#### [Integrating our data into your tools (via Data Connector)](https://github.com/datacamp-engineering/enterprise-docs/blob/main/integrating-our-data-into-your-tools-via-data-connector-2.0)

Data Connector allows seamless integration with your data infrastructure for those requiring more advanced reporting capabilities. This section covers how to [set up the integrations](https://github.com/datacamp-engineering/enterprise-docs/blob/main/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0), the types of data you can access, the [data model](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model) used, and [how to create ad-hoc reporting](/integrating-our-data-into-your-tools-via-data-connector-2.0/sample-queries) to tailor insights specifically for your organization.

\
We hope this guide helps you make the most of our reporting features and empowers you to drive success within your organization. Let's get started!


# Understanding reports with clarity (Definitions)

This section provides definitions of the metrics and terms used in our reporting. For your convenience, they are listed in alphabetical order.

| Metric / Term                                | Definition                                                                                                                                                                                                                                                                                                                                                                                                                     | Reports & Sample queries                                                                                                                                                |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Adoption Score                               | <p>For seat-based accounts, it is the number of members who have earned XP divided by the total number of licenses purchased, as a percentage.<br><br>For unlimited accounts, it is the number of members who have earned XP divided by the total invites sent, as a percentage.<br><br>XP is defined below.</p>                                                                                                               | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#adoption-score)                                            |
| AI Tutor course                              | A course variant that uses an interactive, AI-powered learning format. AI Tutor courses share the same course identity and metadata as their Datacamp counterpart but have their own chapters and learning events.                                                                                                                                                                                                             |                                                                                                                                                                         |
| Assessments completed                        | <p>An assessment is marked as completed when a user finishes all the questions in the assessment.<br><br>The metric identifies the number of assessments completed in a given time period.</p>                                                                                                                                                                                                                                 | <p><a href="/pages/flcAZ6RvsTeskF0crSLN#activity-ribbon">Link to Report</a></p><p><a href="/pages/9NTvNpwZVoYiIFh6JBiL">Sample Query</a></p>                            |
| Assessment median scores                     | <p>The median score for each type of assessment for the organization.<br><br>The data may be misleading when the number of assessments taken is too small.</p>                                                                                                                                                                                                                                                                 | <p><a href="/pages/flcAZ6RvsTeskF0crSLN#assessment-activity">Link to Report</a><br><a href="/pages/9NTvNpwZVoYiIFh6JBiL">Sample Query</a></p>                           |
| Assessment median scores (All Organizations) | The median score for each type of assessment for all organizations that use DataCamp.                                                                                                                                                                                                                                                                                                                                          | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/assessments#activity-ribbon)                                               |
| Assessment scores                            | <p>Assessment scores go from 0 to 200. Scores correlate to the following skill levels:</p><ul><li>Novice (0–69)</li><li>Lower Intermediate (70–100)</li><li>Upper Intermediate (101–130)</li><li>Lower Advanced (131–160)</li><li>Upper Advanced (161–200)</li></ul>                                                                                                                                                           | <p><a href="/pages/flcAZ6RvsTeskF0crSLN#assessment-activity">Link to Report</a><br><a href="/pages/9NTvNpwZVoYiIFh6JBiL">Sample Query</a></p>                           |
| Assessments started                          | <p>An assessment is marked as started when a user clicks on the "Start" button for the assessment.<br><br>The metric identifies the number of of assessments started in a given time period.</p>                                                                                                                                                                                                                               | [Sample Query](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/assessments)            |
| Completion rate (Courses)                    | <p>The number of courses completed divided by the number of courses started.<br><br>When counting courses completed over a given period, regardless of when the content was started, the metric can exceed 100%.<br><br>In technical terms, it is a velocity metric, not a cohort metric.</p>                                                                                                                                  | <p><a href="/pages/1lyYvNelj9vYarDZ3ZPI#completion-rate">Link to Report</a><br><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#courses-activity">Sample Query</a></p>              |
| Completion rate (Course chapters)            | <p>The number of course chapters completed divided by the number of course chapters started.<br><br>When counting course chapters completed over a given period, regardless of when the content was started, the metric can exceed 100%.<br><br>In technical terms, it is a velocity metric, not a cohort metric.</p>                                                                                                          |                                                                                                                                                                         |
| Completion rate (Projects)                   | <p>The number of projects completed divided by the number of projects started.</p><p>When counting projects completed over a given period, regardless of when the content was started, the metric can exceed 100%.<br><br>In technical terms, it is a velocity metric, not a cohort metric.</p>                                                                                                                                | <p><a href="/pages/vVdO9YKPFaTxbszoFVeb#completion-rate">Link to Report</a><br><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#projects-activity">Sample Query</a></p>             |
| Completion rate (Tracks)                     | <p>The number of tracks completed divided by the number of tracks started.<br></p><p>When counting tracks completed over a given period, regardless of when the content was started, the metric can exceed 100%.<br><br>In technical terms, it is a velocity metric, not a cohort metric.</p>                                                                                                                                  | <p><a href="/pages/Wb4V5zjVQ6p7lnxJkbxQ#completion-rate">Link to Report</a><br><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#tracks-activity">Sample Query</a></p>               |
| Content type                                 | Refers to the different content categories on our platform (assessments, courses, practices, projects, etc.)                                                                                                                                                                                                                                                                                                                   |                                                                                                                                                                         |
| Course variant                               | A course can exist in multiple variants representing different learning experiences. Currently, the available variants are **Datacamp** (the traditional format) and **AI Tutor** (an interactive AI-powered format). Both variants share the same `course_id` and course metadata.                                                                                                                                            |                                                                                                                                                                         |
| Course chapters completed                    | <p>A course chapter is marked as completed when a user finishes all exercises within a chapter for the first time.<br><br>The metric identifies the number of course chapters completed in a given time period.</p>                                                                                                                                                                                                            |                                                                                                                                                                         |
| Course chapters started                      | <p>A course chapter is marked as started when a user starts one exercise within a chapter (including videos) for the first time.<br><br>The metric identifies the number of course chapters started in a given time period.</p>                                                                                                                                                                                                |                                                                                                                                                                         |
| Courses completed                            | <p>A course is marked as completed when a user finishes 100% of the course exercises or all chapters within a course for the first time.<br><br>The metric identifies the number of courses completed in a given time period.</p>                                                                                                                                                                                              | <p><a href="/pages/1lyYvNelj9vYarDZ3ZPI#courses-completed">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#courses-activity">Sample Query</a></p>         |
| Courses started                              | <p>A course is marked as started when a user does any of the following:</p><ul><li>Clicks on a start course button</li><li>Navigates to a chapter exercise</li><li>Enrolls in a track (thus starting the first course of the track)</li><li>Clicks into a course from onboarding</li><li>Is directed into a course on the platform</li></ul><p>The metric identifies the number of courses started in a given time period.</p> | <p><a href="/pages/1lyYvNelj9vYarDZ3ZPI#courses-started">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#courses-activity">Sample Query</a></p>           |
| Datacamp course                              | The traditional DataCamp course format.                                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                                                                                         |
| DataLab workbooks created                    | <p>A DataLab workbook is marked as created when a user clicks on "New Workbook" or starts a project, course notes, competion, code-along or other experiences powered by DataLab.<br><br>The metric identifies the number of DataLab workbooks created in a given time period.</p>                                                                                                                                             | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/datalab#activity-ribbon)                                                   |
| Engagement Score                             | Percentage of users who have earned XP in the last 30 days.                                                                                                                                                                                                                                                                                                                                                                    | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/engagement-report#engagement-score)                                        |
| First XP date                                | The earliest date when a member earned XP. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template).                                                                                                                                                     |                                                                                                                                                                         |
| Invites accepted                             | The number of users with a license assigned, whether or not they have earned XP.                                                                                                                                                                                                                                                                                                                                               | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Invites pending                              | The number of users with a license assigned but still need to finish the registration process.                                                                                                                                                                                                                                                                                                                                 | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Invites sent                                 | Total number of invites sent = users with a Learn license + pending invites.                                                                                                                                                                                                                                                                                                                                                   | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Last XP date                                 | The most recent date when a member earned XP. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template).                                                                                                                                                  |                                                                                                                                                                         |
| Licenses                                     | For seat-based accounts, the total number of licenses purchased.                                                                                                                                                                                                                                                                                                                                                               | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Median time on platform                      | <p>Median time spent by users on the platform. Half the users have spent more time, and half have spent less.</p><p>The metric excludes members with no time spent on the platform.</p>                                                                                                                                                                                                                                        | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/engagement-report#median-time-on-platform)                                 |
| Members new                                  | Members who gained XP for the first time within the selected period. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template)                                                                                                                            |                                                                                                                                                                         |
| Members returning                            | Members who had already earned XP prior to the selected period. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template)                                                                                                                                 |                                                                                                                                                                         |
| Members not started                          | The number of users with a license assigned but have yet to earn XP.                                                                                                                                                                                                                                                                                                                                                           | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Members started                              | The number of users with a license who earned XP.                                                                                                                                                                                                                                                                                                                                                                              | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Members who earned XP - Active Members       | The number of users that have earned XP in a given time period. XP is defined below.                                                                                                                                                                                                                                                                                                                                           | <p><a href="/pages/z0sZ4delYX0QqD6k6UdA#current-members-adoption">Link to Report</a><br><a href="/pages/vrdN1Rs0cc2uhioJDLYK">Sample Query</a></p>                      |
| Members who obtained a certification         | <p>A certification is obtained by a user who successfully completes all the certification requirements.<br><br>The metric identifies the number of certifications successfully obtained in a given time period.</p>                                                                                                                                                                                                            | <p><a href="/pages/bvgvGYZ30EZyD9hAhKuZ#members-started-greater-than-members-obtained">Link to Report</a><br><a href="/pages/SPF0lEaXlzJe7cfznzcq">Sample Query</a></p> |
| Members who started a certification          | <p>A certification is marked as started when a user clicks the "Start" button after clicking "Register for Certification."<br><br>The metric identifies the number of users who started a certification.</p>                                                                                                                                                                                                                   | <p><a href="/pages/bvgvGYZ30EZyD9hAhKuZ#members-started-greater-than-members-obtained">Link to Report</a><br><a href="/pages/SPF0lEaXlzJe7cfznzcq">Sample Query</a></p> |
| Monthly Active Members (MAM)                 | Unique members who earned XP in the last 30 days (rolling) as of each date on the chart. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template)                                                                                                        |                                                                                                                                                                         |
| Most completed courses                       | The courses with the most completions for the organization.                                                                                                                                                                                                                                                                                                                                                                    | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/courses#most-completed-courses)                           |
| Most completed projects                      | The projects with the most completions for the organization.                                                                                                                                                                                                                                                                                                                                                                   | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/projects#most-completed-projects)                         |
| Most completed tracks                        | The tracks with the most completions for the organization.                                                                                                                                                                                                                                                                                                                                                                     | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/tracks#most-completed-tracks)                             |
| Most enrolled tracks                         | The tracks with the most starts for the organization.                                                                                                                                                                                                                                                                                                                                                                          | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/tracks#most-enrolled-tracks)                              |
| Most popular course technologies             | The course technologies (Python, R, OpenAI, theory, etc.) with the most starts.                                                                                                                                                                                                                                                                                                                                                | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/courses#most-popular-course-technologies)                 |
| Most popular course topics                   | The course topics (programming, data manipulation, cloud, etc.) with the most starts.                                                                                                                                                                                                                                                                                                                                          | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/courses#most-popular-course-topics)                       |
| Most popular project technologies            | The project technologies (Python, R, OpenAI, SQL, etc.) with the most starts.                                                                                                                                                                                                                                                                                                                                                  | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/projects#most-popular-project-technologies)               |
| Most started courses                         | The courses with the most starts for the organization.                                                                                                                                                                                                                                                                                                                                                                         | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/courses#most-started-courses)                             |
| Most started projects                        | The projects with the most starts for the organization.                                                                                                                                                                                                                                                                                                                                                                        | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/projects#most-started-projects)                           |
| Open seats                                   | For seat-based accounts - The number of licenses available that are still to be assigned.                                                                                                                                                                                                                                                                                                                                      | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report#user-adoption-funnel)                                      |
| Practices completed                          | <p>Only practice completions are tracked currently. A practice completion is recorded when a user completes five practice session exercises successfully.<br><br>The metric identifies the number of practices completed in a given time period.</p>                                                                                                                                                                           |                                                                                                                                                                         |
| Projects completed                           | <p>A project is marked as completed when a user successfully finishes all tasks in a project.<br><br>The metric identifies the number of projects completed in a given time period.</p>                                                                                                                                                                                                                                        | <p><a href="/pages/vVdO9YKPFaTxbszoFVeb#projects-completed">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#projects-activity">Sample Query</a></p>       |
| Projects started                             | <p>A project is marked as started when a user clicks on the "Start" button or the "Replay" button for the project.<br><br>The metric identifies the number of projects started in a given time period.</p>                                                                                                                                                                                                                     | <p><a href="/pages/vVdO9YKPFaTxbszoFVeb#projects-started">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#projects-activity">Sample Query</a></p>         |
| Seat-based account                           | An account where the organization purchases a set number of licenses.                                                                                                                                                                                                                                                                                                                                                          | <p><br></p>                                                                                                                                                             |
| Technology                                   | Refers to the software type of the particular content unit (e.g., R, Python, SQL, Spark, etc.)                                                                                                                                                                                                                                                                                                                                 |                                                                                                                                                                         |
| Time in DataLab                              | <p>Total time spent by users on DataLab workbooks (either editing or viewing).<br><br>It does not include time on the portal or time spent before engaging with a DataLab workbook.</p>                                                                                                                                                                                                                                        | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/datalab#total-time-spent-in-datalab)                                       |
| Time in Learn                                | <p>Total time spent by users in Learn content (assessments, courses, practices, or projects).<br><br>It does not include time on the portal or time spent before engaging with the content.</p>                                                                                                                                                                                                                                | <p><a href="/pages/nHUlLAD83VpHkOlQyxgH#activity-ribbon">Link to Report</a></p><p><a href="/pages/qGYDGvPplsqO3ktdhs36">Sample Query</a></p>                            |
| Time on platform                             | <p>Total time spent by users on the platform.</p><p>Time spent on assessments, courses, practices, projects, and DataLab workbooks (if applicable). It does not include time on the portal or time spent before engaging with content.</p>                                                                                                                                                                                     | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/engagement-report#total-time-on-platform)                                  |
| Topic                                        | Refers to the general subject of the particular content unit (e.g., Programming, Data Manipulation, Artificial Intelligence, etc.)                                                                                                                                                                                                                                                                                             |                                                                                                                                                                         |
| Total XP earned                              | <p>The total XP points earned.<br><br>XP is defined below.</p>                                                                                                                                                                                                                                                                                                                                                                 | [Sample Query](/integrating-our-data-into-your-tools-via-data-connector-2.0/sample-queries#xp-earned-by-user)                                                           |
| Tracks completed                             | <p>A track is marked as completed when a user finishes all the mandatory items for the track. Typically, courses and chapters are mandatory; projects and assessments can be mandatory or optional, and resource items are optional.<br><br>The metric identifies the number of tracks completed in a given time period</p>                                                                                                    | <p><a href="/pages/Wb4V5zjVQ6p7lnxJkbxQ#tracks-completed">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#tracks-activity">Sample Query</a></p>           |
| Tracks enrolled                              | <p>A track is marked as started or enrolled in when a user clicks on the "Enroll" button for the track.<br><br>The metric identifies the number of tracks enrolled in (started) a given time period.</p>                                                                                                                                                                                                                       | <p><a href="/pages/Wb4V5zjVQ6p7lnxJkbxQ#tracks-enrolled">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv#tracks-activity">Sample Query</a></p>            |
| Unit completions                             | Content unit completions by active learning approach phase (Assess, Learn, Practice, Apply - ALPA).                                                                                                                                                                                                                                                                                                                            | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/dashboard#unit-completions)                                                                  |
| Unlimited account                            | An account where the organization can grant content access to unlimited users.                                                                                                                                                                                                                                                                                                                                                 |                                                                                                                                                                         |
| Weekly Active Members (WAM)                  | Unique members who earned XP in the last 7 days (rolling) as of each date on the chart. Shown in the DataCamp Data Connector [dashboard template](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi#power-bi-dashboard-template).                                                                                                        |                                                                                                                                                                         |
| XP                                           | <p>XP (eXperience Points) are earned when a user completes content like courses, projects, practice sessions, assessments, and certifications.<br><br>Currently XP is only earned on the following content types:</p><ul><li>Courses (including course chapters, and exercises)</li><li>Practices</li><li>Projects</li><li>Onboarding events</li></ul>                                                                         | <p><br></p>                                                                                                                                                             |
| XP earned by content type                    | <p>The XP points earned by content type (courses, projects, practice sessions, onboarding sessions).</p><p>XP is defined above.</p>                                                                                                                                                                                                                                                                                            |                                                                                                                                                                         |
| XP earned by technology                      | <p>The XP points earned by technology (Python, R, OpenAI, theory, etc.).</p><p>XP is defined above.</p>                                                                                                                                                                                                                                                                                                                        | <p><a href="/pages/ZcGrjKxp4E9kqQeia8zq#xp-earned-by-technology">Link to Report</a></p><p><a href="/pages/ZrBa1JLVBC03Uvv5DiGv">Sample Query</a></p>                    |
| XP earned by topic                           | <p>The XP points earned by topic (programming, data manipulation, cloud, etc.) for the group.</p><p>XP is defined above.</p>                                                                                                                                                                                                                                                                                                   | [Link to Report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/xp#xp-earned-by-topic)                                    |


# Optimizing key performance indicators (via the Groups tab)

The **Groups** tab provides admins with a wealth of information on their organization’s activity and engagement. This guide reviews each of the available reports.

* On the left panel, you can find the three main reporting sections:
  * [Dashboard](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/dashboard)
  * [Reporting section](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section)
  * [Skill Matrix](/optimizing-key-performance-indicators-via-the-groups-tab/skill-matrix)

<figure><img src="/files/ziCSBiwlQouSNrKbK3EU" alt=""><figcaption></figcaption></figure>

On the next pages we explore every report in them.

{% hint style="info" %}
Some courses on DataCamp are available in multiple variants: **Datacamp** and **AI Tutor**. In all Groups tab reports, course metrics (starts, completions, XP, time spent, etc.) are counted across all variants combined. This means that if a user completes both the Datacamp and AI Tutor variant of the same course, this counts as **two course completions**.
{% endhint %}


# Dashboard

The Dashboard provides admins with a quick overview of key learning activity metrics.

* Below is a brief description of each metric shown:
  * [Current Members' Adoption](#current-memebers-adoption)
  * [Cumulative Time on Platform](#cumulative-time-on-platform)
  * [Members who have earned XP](#members-who-have-earned-xp)
  * [Unit Completions](#unit-completions)
  * [View and analyze skill gaps](#view-and-analyze-skill-gaps)

### Current Members' Adoption

* The widget shows how many current members have accepted their DataCamp invitation and started learning.
* For seat-based accounts, the number in the middle of the circle is the number of Licenses purchased. That number is broken down by color into Members started, Members not started, Invites pending, and Open seats.
* For unlimited accounts, the number in the middle of the circle is Invites sent. That number is broken down by color into Members started, Members not started, and Invites pending.

<figure><img src="/files/KzPsWxEjry4708HsTCdC" alt=""><figcaption></figcaption></figure>

* By hovering over **Members started**, a model shows how many members have earned XP while part of the group and how many have not earned XP since joining the group (they earned XP **before**).

<figure><img src="/files/1C6Ls9v628Wxkdf0Jcc9" alt="" width="297"><figcaption></figcaption></figure>

### Cumulative Time on Platform

* The large number shown is the cumulative hours spent on the DataCamp platform (all-time).
* A smaller number below shows the hours spent on the platform in the last 30 days.
* The line shows the trend over the last few months.

<figure><img src="/files/cd2MY2ibDr403sUDD6tj" alt=""><figcaption></figcaption></figure>

### Members who have earned XP

* The large number shown is the number of unique users who have earned XP (all time).
* A smaller number below shows how many more unique members earned XP in the last 30 days.
* The bars show the trend over the last few months.

<figure><img src="/files/bjwgFmAARXVWiUZwOxKk" alt=""><figcaption></figcaption></figure>

### Unit Completions

* The widget shows the content units completed in the organization by ALPA phase. ALPA stands for Assess, Learn, Practice, and Apply.
* A unit can be an Assessment (Assess), a course chapter (Learn), a practice session (Practice), or a project (Apply).
* The large number shown is the total number of units completed (all time).
* A smaller number below shows the units completed in the last 30 days.
* The bars represent the breakdown by ALPA phase.

<figure><img src="/files/fWKLuCTVVdUFrbOCratJ" alt=""><figcaption></figcaption></figure>

### View and analyze skill gaps

* The large number shows the cumulative number of unique assessment completions.
* In this context, unique means that if a user completes a particular assessment multiple times, they are only counted as one completion.
* A smaller number below shows the assessments completed in the last 30 days.

<figure><img src="/files/Kkgx9GdAtEsj8Hw4VUd5" alt=""><figcaption></figcaption></figure>


# Reporting section

The Reporting section contains detailed reporting on each facet of your organization's learning activity.

* In the following sections, we explore each tab:
  * [Progress report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/progress-report)
  * [Adoption report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/adoption-report)
  * [Engagement report](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/engagement-report)
  * [Content insights](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights)
  * [Assessments](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/assessments)
  * [Certifications](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/certifications)
  * [Time in Learn](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/time-in-learn)
  * [DataLab](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/datalab)
  * [Export](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/export)


# Progress report

The Progress report shows a table with all active members in the organization. For each member who has earned XP, it will show the total number of completions on courses, course chapters, projects, practices, tracks, and XP earned.

* Progress table
  * Each row represents a user.
  * Courses
    * The number of courses the user has completed in the period selected in the filters.
  * Chapters
    * The number of course chapters the user has completed in the period selected in the filters.
  * Assessments
    * The number of assessments the user has completed in the period selected in the filters.
  * Projects
    * The number of projects the user has completed in the period selected in the filters.
  * Practices
    * The number of practice sessions the user has completed in the period selected in the filters.
  * Tracks
    * The number of tracks the user has completed in the period selected in the filters.
  * Last XP
    * The date of the last time the user earned XP.
  * Total XP
    * The total XP earned by the user in the period selected in the filters.
  * You can sort each column by pressing the up and down arrows.
  * The search box can be used to find a particular user by name.

<figure><img src="/files/c3GiP2lpIBgO533MQVYt" alt=""><figcaption></figcaption></figure>

* The Filters section modifies the progress table. There are four primary filters:
  * Time Window
    * This section modifies the time window for the report:
      * All time
      * Last 30 days
      * Last 90 days
      * Last 365 days
      * Custom date range
        * A custom date range can be selected for the report (within the last 2 years).
  * Member History
    * This section modifies the initial point in time considered for the progress report to either:
      * Since the user started using DataCamp Enterprise
      * Since the user created an account in DataCamp
  * License Type
    * This section selects the type of users to be included in the progress report:
      * Basic (no content access, typically used for reporting)
      * Enterprise (full content access)
  * Content Type
    * You can toggle which column shows in the progress report by checking or unchecking the different column names.

<div align="center"><figure><img src="/files/0ZhuYzCk0eZaRHogDx7j" alt="" width="375"><figcaption></figcaption></figure></div>


# Adoption report

This page gives admins insight into how users start learning on DataCamp and is most relevant during the initial onboarding process.

* Below is a brief description of each metric shown:
  * [Adoption Score](#adoption-score)
  * [Adoption Benchmark](#adoption-benchmark)
  * [User Adoption Funnel](#user-adoption-funnel)

### Adoption Score

* The number shown is the percentage of users who have earned XP.
  * For seat-based accounts, the score is calculated by dividing the number of users who have earned XP by the number of licenses.
  * For unlimited accounts, the score is calculated by dividing the number of users who have earned XP by the number of invites sent.

<figure><img src="/files/fWe3pxALARaFvYdr1RQG" alt=""><figcaption></figcaption></figure>

### Adoption Benchmark

* The bar shows how the current adoption score compares to the distribution of scores across all organizations using DataCamp.

<figure><img src="/files/ho4OHtBdlkVwwYh3MUNj" alt=""><figcaption></figcaption></figure>

### User Adoption Funnel

* The graph highlights users' stages, from invitation to starting learning, and shows the percentage of invited users that have reached each stage.
* For seat-based accounts, the funnel shows Licenses, Invites Sent, Invites accepted, Members started, Open seats, Invites pending, and Members not started.
* For unlimited accounts, the funnel shows Invites Sent, Invites accepted, Members started, Invites pending, and Members not started.

<figure><img src="/files/ycNe2FeVwvnfFizSrdVw" alt=""><figcaption></figcaption></figure>


# Engagement report

This page gives admins insight into their organization's general engagement and activity.

* Below is a brief description of each metric shown:
  * [Engagement Score](#engagement-score)
  * [Engagement Benchmark](#engagement-benchmark)
  * [Last 30 Days at a Glance](#last-30-days-at-a-glance)
  * [Total Number of Members who have earned XP](#total-number-of-members-who-have-earned-xp)
  * [Total XP Earned](#total-xp-earned)
  * [Total Time on Platform](#total-time-on-platform)
  * [Median Time on Platform](#median-time-on-platform)

### Engagement Score

* The number shown is the percentage of users who have earned XP in the last 30 days.

<figure><img src="/files/mU7lrPwMgIXagZg5cjZX" alt=""><figcaption></figcaption></figure>

### Engagement Benchmark

* The bar shows how the current engagement score compares to the distribution of scores across all organizations using DataCamp.

<figure><img src="/files/Z4bXFIwXiwmYXB13YiPK" alt=""><figcaption></figcaption></figure>

### Last 30 Days at a Glance

* Provides a quick summary of your organization's engagement in the last 30 days.
  * Courses completed
  * Total XP Earned
  * Hours on Platform
  * Members who have earned XP

<figure><img src="/files/ol5eBHDRigtEAEIbaq4n" alt=""><figcaption></figcaption></figure>

### Total Number of Members who have earned XP

* The graph shows the number of users who have earned XP in the past 12 months.

<figure><img src="/files/Tqao6H8Cq7qa4jcwwVfR" alt=""><figcaption></figcaption></figure>

### Total XP Earned

* The graph shows the total XP earned by the organization’s users each month. XP earned in courses, projects, practice, and onboarding is shown in a different color.

<figure><img src="/files/kudbv4uywzTf8xg3AsNI" alt=""><figcaption></figcaption></figure>

### Total Time on Platform

* The graph shows the total number of hours the organization’s users spent per month on the platform for the last year.

<figure><img src="/files/jyRyKPEzmk6FMvOvPAJ5" alt=""><figcaption></figcaption></figure>

### Median Time on Platform

* The graph shows the median number of hours the organization’s users have spent on the platform in the past 12 months.
* It excludes members with zero hours.

<figure><img src="/files/nfZQlAukZvt2OBdUaJQh" alt=""><figcaption></figcaption></figure>


# Content insights

This page includes detailed information on XP earned, courses, projects, and tracks on DataCamp. Selecting from the drop-down menu toggles between the different reports.

* In the following sections, we explore each selection:
  * [XP](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/xp)
  * [Courses](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/courses)
  * [Projects](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/projects)
  * [Tracks](/optimizing-key-performance-indicators-via-the-groups-tab/reporting-section/content-insights/tracks)

<figure><img src="/files/AUlulJTYgmTxQJUAJn0i" alt=""><figcaption></figcaption></figure>


# XP

This section shows different metrics related to the XP earned by your organization's users on the platform. Users gain XP by completing various types of content, and it can be used as a proxy of platform activity.

* Below is a brief description of each metric shown:
  * [XP earned by topic](#xp-earned-by-topic)
  * [XP earned by technology](#xp-earned-by-technology)

### XP earned by topic

* The chart breaks down XP earned by topic (programming, data manipulation, cloud, etc.) to see which topics the users have engaged with the most (all-time).

<figure><img src="/files/vP39652PaEk9O3teIPFo" alt=""><figcaption></figcaption></figure>

### XP earned by technology

* The chart breaks down XP by technology (Python, R, OpenAI, theory, etc.) to get the top technologies for the organization (all-time).

<figure><img src="/files/dk9M8k8IAjRSXO4rqRcg" alt=""><figcaption></figcaption></figure>


# Courses

This section shows different metrics related to courses, one of our platform's principal tools for learning.

* Below is a brief description of each metric shown:
  * [Courses started](#courses-started)
  * [Courses completed](#courses-completed)
  * [Completion rate](#completion-rate)
  * [Most started courses](#most-started-courses)
  * [Most completed courses](#most-completed-courses)
  * [Most popular course technologies](#most-popular-course-technologies)
  * [Most popular course topics](#most-popular-course-topics)
  * [Course Activity](#course-activity)

### Courses started

* The card shows the courses started and the number of users who started them (all-time).

<figure><img src="/files/8y5CS9kI5DsWC6SPRXTU" alt=""><figcaption></figcaption></figure>

### Courses completed

* The card shows the courses completed and the number of users who completed them (all-time).

<figure><img src="/files/kQtrcyyaWoZgKbmhsV8M" alt=""><figcaption></figcaption></figure>

### Completion rate

* The card shows the completion rate (completions divided by starts) for courses (all-time).

<figure><img src="/files/G1HktOkNImHimfWjkd4B" alt=""><figcaption></figcaption></figure>

### Most started courses

* The chart shows the top 5 courses by starts (all-time).

<figure><img src="/files/0YowWsyU3O5hiGneYACP" alt=""><figcaption></figcaption></figure>

### Most completed courses

* The chart shows the top 5 courses by completions (all-time).

<figure><img src="/files/RqRFKLrOAAg4H7ZfUwK6" alt=""><figcaption></figcaption></figure>

### Most popular course technologies

* The graph shows the ten technologies (Python, R, ChatGPT, etc.) with the most course starts (all-time).

<figure><img src="/files/2AqeSGHXWaI8Fp6fSEiw" alt=""><figcaption></figcaption></figure>

### Most popular course topics

* The graph shows the ten topics (Programming, Data Manipulation, Artificial Intelligence, etc.) with the most course starts (all-time).

<figure><img src="/files/1dUd9N2vhmIhhOwfryvU" alt=""><figcaption></figcaption></figure>

### Course Activity

* The table shows the course title, topic, technology, starts, completions, and completion rate (completions divided by starts) for all courses with at least one start (all-time).
* The report can be filtered by topic (Programming, Data Manipulation, Artificial Intelligence, etc.) or technology (Python, R, ChatGPT, etc.)
* The search box can be used to find a particular course.

<figure><img src="/files/9PR94HUEqCdbjlQMmv7f" alt=""><figcaption></figcaption></figure>


# Projects

Projects allow your organization's users to apply their knowledge to real scenarios in a practical environment. This section shows the most relevant project activity metrics.

* Below is a brief description of each metric shown:
  * [Projects started](#projects-started)
  * [Projects completed](#projects-completed)
  * [Completion rate](#completion-rate)
  * [Most started projects](#most-started-projects)
  * [Most completed projects](#most-completed-projects)
  * [Most popular project technologies](#most-popular-project-technologies)
  * [Projects Activity](#projects-activity)

### Projects started

* The card shows the number of projects started and the number of users who started them (all-time).

<figure><img src="/files/XygwO5uoaRi10f2cnyeM" alt=""><figcaption></figcaption></figure>

### Projects completed

* The card shows the number of projects completed and the number of users who completed them (all-time).

<figure><img src="/files/k7NiZWeS8hH96pwLFAsU" alt=""><figcaption></figcaption></figure>

### Completion rate

* The card shows the completion rate (completions divided by starts) for projects (all-time).

<figure><img src="/files/qLrr5zyZkWPARo66Xs8k" alt=""><figcaption></figcaption></figure>

### Most started projects

* The chart shows the top 5 projects by starts (all-time).

<figure><img src="/files/EPHNcdXpFI9xx8MAtL3C" alt=""><figcaption></figcaption></figure>

### Most completed projects

* The chart shows the top 5 projects by completion (all-time).

<figure><img src="/files/GQItZmwtW9eeNUBF0UFb" alt=""><figcaption></figcaption></figure>

### Most popular project technologies

* The graph shows the ten technologies (Python, R, OpenAI, etc.) with the most project starts (all-time).

<figure><img src="/files/joDgnYIXiUvRHzsYIs4m" alt=""><figcaption></figcaption></figure>

### Projects Activity

* The table shows the project title, technology, starts, completions, and completion rate (completions divided by starts) for all projects with at least one start in the organization (all-time).
* The report can be filtered by technology (Python, R, OpenAI, etc.)
* The search box can be used to find a particular project.

<figure><img src="/files/QasDHqZ2TgAvLGcAMVKQ" alt=""><figcaption></figcaption></figure>


# Tracks

Tracks are a collection of curated content units (courses, chapters, projects, assessments) that guide your organization's users' learning and help them gain new skills. This section shows the most relevant track activity metrics.

* Below is a brief description of each metric shown:
  * [Tracks enrolled](#tracks-enrolled)
  * [Tracks completed](#tracks-completed)
  * [Completion rate](#completion-rate)
  * [Most enrolled tracks](#most-enrolled-tracks)
  * [Most completed tracks](#most-completed-tracks)
  * [Tracks Activity](#tracks-activity)

### Tracks enrolled

* The card shows the number of tracks started and users who enrolled on them (all-time).

<figure><img src="/files/tc0EXgTq57OrkcT21e0I" alt=""><figcaption></figcaption></figure>

### Tracks completed

* The card shows the number of tracks completed and the number of users who completed them (all-time).

<figure><img src="/files/qf4CvMADHY6sCvrSy9YT" alt=""><figcaption></figcaption></figure>

### Completion rate

* The card shows the completion rate (completions divided by starts) for tracks (all-time).

<figure><img src="/files/IvA2Z2joIBojLUcMDcJT" alt=""><figcaption></figcaption></figure>

### Most enrolled tracks

* The chart shows the top 5 tracks by starts (all-time).

<figure><img src="/files/5x2c4Uw8brpBqWvX8lbp" alt=""><figcaption></figcaption></figure>

### Most completed tracks

* The chart shows the top 5 tracks by completions (all-time).

<figure><img src="/files/rVGDT7EB5K9ZNVX356ov" alt=""><figcaption></figcaption></figure>

### Tracks Activity

* The table shows the track name, type, enrollments, completions, and completion rate (completions divided by starts) for all tracks with at least one start (all-time).
* The search box can be used to find a particular track.

<figure><img src="/files/P4zGSRn55OIQWOzTwEdx" alt=""><figcaption></figcaption></figure>


# Assessments

This page shows the number of assessment completions over time.

It also includes a report on your organization’s median score for each assessment and how it compares to all other organizations' scores. This enables the organization to benchmark its overall skill level relative to other companies using DataCamp.

* Below is a brief description of each metric shown:
  * [Activity Ribbon](#activity-ribbon)
  * [Total Assessments Completed](#total-assessments-completed)
  * [Assessment Activity](#assessment-activity)
  * [Assessments Score Distribution](#assessments-score-distribution)
  * [Top Course Recommendations](#top-course-recommendations)

### Activity Ribbon

* Provides a quick summary of your organization's users' engagement with assessments.
  * Assessments completed - The number of assessments completed (all-time and in the last 30 days).
  * Unique Members - The number of users who have completed an assessment (all-time and how many more in the last 30 days).
  * Percentile (based on median score) - Your organization's percentile ranking is based on the median score of all assessments compared to all other organizations using DataCamp (all-time and the change in the last 30 days).
  * Most popular - The most popular assessment by completions (all-time).
  * Highest median score - The assessment with the highest median score.
  * Lowest median score - The assessment with the lowest median score.

<figure><img src="/files/WAnQEdrtVvP4KSkPBVvy" alt=""><figcaption></figcaption></figure>

### Total Assessments Completed

* The chart shows the number of assessments completed per month over the last year.

<figure><img src="/files/5XKrcmMO1D6JThK0gg4a" alt=""><figcaption></figcaption></figure>

### Assessment Activity

* The table shows the assessment name, completions, the number of members that have completed an assessment, how many members have improved in subsequent assessments, the median score for the assessment, and how that median score compares to all organizations using DataCamp (all-time).

<figure><img src="/files/JSDTaotn3xx1kodSYawI" alt=""><figcaption></figcaption></figure>

### Assessments Score Distribution

* The chart shows the distribution of scores for all assessments completed in your organization. Each bar indicates the number of users who received that particular score range.
* You can select a different assessment in the drop-down menu at the top.

<figure><img src="/files/Za819VWlhxrcyeHNp4s1" alt=""><figcaption></figcaption></figure>

### Top Course Recommendations

* The table shows the top courses recommended for your organization based on the overall assessment scores.
* As an admin, you can use the buttons on the right of the table to assign each course.

<figure><img src="/files/4rQFyxtYRI5gpk6hUZQh" alt=""><figcaption></figcaption></figure>


# Certifications

This page shows the number of certifications started and obtained over time.

It also includes a breakdown by certification type and the details of the certification activity for your organization.

* Below is a brief description of each metric shown:
  * [Total certifications obtained](#total-certifications-obtained)
  * [Most obtained and most started certification](#most-obtained-and-started-certification)
  * [Members started -> Members obtained](#members-started-greater-than-members-obtained)
  * [Engagement](#engagement)
  * [Certification Activity](#certification-activity)

### Total certifications obtained

* The card shows the total number of certifications obtained by users in the organization (all-time).

<div align="center"><figure><img src="/files/Ac0uNZpfeyBINtFWBjOR" alt="" width="501"><figcaption></figcaption></figure></div>

### Most obtained and started certification

* The card shows the most obtained certification on top and the most started certification on the bottom (all-time).

<figure><img src="/files/6rd2CznaamDLZGCfIwDJ" alt="" width="501"><figcaption></figcaption></figure>

### Members started -> Members obtained

* The graph shows the number of users who have started a certification on the left and, on the right, the number of users who have obtained at least one certification (all-time).

<figure><img src="/files/nxCTbcLoFyHb3fPEpBEr" alt="" width="563"><figcaption></figcaption></figure>

### Engagement

* This graph shows the number of members in your organization that have engaged with certifications.
  * Members who started a certification - The top chart shows the number of users who have started each certification (all-time).
  * Members who obtained a certification - The bottom chart shows the number of users who have obtained each certification (all-time).

<figure><img src="/files/wBfx9YdoIozaTvmMdN8b" alt=""><figcaption></figcaption></figure>

### Certification Activity

* The table shows the user who attempted the certification, the certification title, when the certification attempt started and ended, and the status (Obtained, In Progress, or Failed).
* The report can be filtered by certification title and status.
* The search box can be used to find a particular user.
* The table only includes data for current group members (all-time).

<figure><img src="/files/pmOFojaKs66OxFu5VkWq" alt=""><figcaption></figcaption></figure>


# Time in Learn

This page shows the time spent in Learn content (assessments, courses, practices, and projects) across the organization over time and by user.

* Below is a brief description of each metric shown:
  * [Activity Ribbon](#activity-ribbon)
  * [Time spent per month in all content types](#time-spent-per-month-in-all-content-types)
  * [Time spent per member](#time-spent-per-member)

### Activity Ribbon

* Provides a quick summary of your organization's users' time spent in Learn content.
  * Time spent in Learn content - The hours spent in Learn content (all-time and in the last 30 days).
  * Time spent in Datacamp Learn content - The hours spent in Datacamp Learn content (all-time and in the last 30 days).
  * Time spent in AI Tutor Learn content - The hours spent in AI Tutor Learn content (all-time and in the last 30 days).
  * Most popular content item - The content item where your organization's users have spent the most time.
  * Busiest month so far - The month with the most hours spent on Lean content.

<figure><img src="/files/iBLmItYfncetF7eWIPsH" alt=""><figcaption></figcaption></figure>

### Time spent per month in all content types

* The chart displays the total hours spent on Learn content per month over the past year. Selecting from the drop-down menu allows you to select the time spent per month in the following content types:
  * Courses
  * Assessments
  * Projects
  * Practices

<figure><img src="/files/nbAMYTzOLRiZHgqWp4gp" alt=""><figcaption></figcaption></figure>

### Time spent per member

* The table shows the time spent per user in all Learn content and by content type: in Datacamp courses, in AI Tutor courses, assessments, projects, and practices.

<figure><img src="/files/TSbb0TBJ3U50YDw4SJoR" alt=""><figcaption></figcaption></figure>


# DataLab

This page includes detailed information on your organization's users' DataLab activity.

It includes the number of users who have spent time in DataLab, the total time spent in DataLab, and the number of workbooks created.

* Below is a brief description of each metric shown:
  * [Activity Ribbon](#activity-ribbon)
  * [Number of users who used DataLab](#number-of-users-who-have-used-datalab)
  * [Total time spent in DataLab](#total-time-spent-in-datalab)

### Activity Ribbon

* Provides a quick summary of your organization's users' activity in DataLab.
  * Users who have used DataLab - The total number of unique users who have edited or viewed at least one DataLab workbook (all-time and how many more in the last 30 days).
  * Time spent in DataLab - The total hours spent editing or viewing DataLab workbooks (all-time and in the last 30 days).
  * Number of workbooks created - The total number of DataLab workbooks created by your organization's users (all-time and in the last 30 days).

<figure><img src="/files/Ba8KhGmdpe7QDpkuBZt2" alt=""><figcaption></figcaption></figure>

### Number of users who have used DataLab

* The chart shows the number of users who have edited or viewed a DataLab workbook per month over the last year.

<figure><img src="/files/tICP78WF13zomWpvy18E" alt=""><figcaption></figcaption></figure>

### Total time spent in DataLab

* The chart shows the hours spent editing or viewing DataLab workbooks per month over the last year.

<figure><img src="/files/2K5p5TacXvRI1dFLezya" alt=""><figcaption></figcaption></figure>


# Export

This tab lets you download detailed data on your users’ activity. Files are downloadable as CSV files or XLSX files.

Files can take a few moments to process, depending on the size of your organization and the volume of data you are exporting. You will receive an email when the processing is complete. You can download the file from the Data Export page for 30 days after the initial request. You can always download a new copy of the file.

When selecting the XLSX format, the number of rows that can be exported is limited. If you exceed that limit, you will see a message within DataCamp.

{% hint style="info" %}
If you regularly export your data, we recommend using our [Data Connector](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools) to better integrate your organization's learning data into your tools.
{% endhint %}

* Below is a brief description of each export available:
  * [Summary](#summary)
  * [Time in Learn](#time-in-learn)
  * [Certification](#certification)
  * [Course](#course)
  * [Track](#track)
  * [Project](#project)
  * [Skill Assessment](#skill-assessment)
  * [Members](#members)
  * [Team History](#team-history)
  * [License History](#license-history)
  * [Content Catalog](#content-catalog)

<figure><img src="/files/STfttIjPayxl6DFTY69K" alt=""><figcaption></figcaption></figure>

### Summary

The Summary file provides an overview of metadata and completions for each member of your organization:

* First and Last name
* Email
* Teams they belong to
* Timestamps when they joined and left the group (if applicable)
  * These reflect the latest membership period. If a user has left and rejoined multiple times, only the most recent join date is shown. The "left" timestamp will be empty if the user is currently in the group, even if they had left previously.
* Total XP
* Date of Last XP Earned
  * This column is **not** affected by the time range configuration; it will display a fixed date per member.
* Content completions:
  * Exercises
  * Courses
  * Tracks
  * Practices
* A list of all completed courses

The report is time-range configurable by:

* All time
* Last 30 days
* Last 90 days
* Last 365 days
* A custom date range

When a time range is selected, the export includes **only the completions that occurred within the chosen period**.

### Time in Learn

The Time in Learn file provides the time spent, in hours, on Learn content (assessments, courses, practices, and projects) by the user.

The report is time-range configurable and follows the same date-range logic as the Summary export. When a time range is selected, only learning activity that occurred within the chosen period is included.

The report has one row for every user and contains the following information:

* First and Last name
* Email
* Time spent in all content types
* Time spent in Datacamp courses
* Time spent in AI Tutor courses
* Time spent in courses
* Assessments
* Projects
* Practices

### Certification

This report captures certification completion data, including dates and status (all-time).

The report has one row for every certification started by a user and contains the following information:

* First and Last name
* Email
* Teams they belong to
* Certification Name
* Timestamp when they started and completed the certification (if applicable)
* Status (Failed, Obtained, In Progress)

### Course

This report provides an overview of your organization's course activity (all-time).

The report has one row for every course-variant started by a user. It contains the following information:

* First and Last name
* Email
* Teams they belong to
* Course ID
* Course Title
* Technology
* Timestamps when they started and completed the course (if applicable)
* Timestamp when they last visited the course
* Status (In Progress, Completed)
* XP earned
* XP available
* XP score (% of XP available earned)
* Current course state (Live, Soft Launch, Archived)

### Track

This file provides an overview of your organization's track activity (all-time).

The report has one row for every track started by a user. It contains the following information:

* First and Last name
* Email
* Teams they belong to
* Track ID
* Track version ID
* Track Title
* Technology
* Timestamps when they started and completed the track (if applicable)
* % of XP earned
* Hours spent on the track

{% hint style="info" %}
When a course within a track is available in both Datacamp and AI Tutor variants and a user has progress in both, the Track Export reflects the variant with the most progress
{% endhint %}

### Project

This report provides an overview of your organization's project activity (all-time).

The report has one row for every project started by a user. It contains the following information:

* First and Last name
* Email
* Teams they belong to
* Project ID
* Project Title
* Technology
* Timestamps when they started and completed the project (if applicable)

### Skill Assessment

The report has one row for every assessment completed by a user (all-time). It contains the following information:

* First and Last name
* Email
* Teams they belong to
* Assessment name
* Assessment slug
* Timestamp when they started and completed the assessment (if applicable)
* Score
* Percentile
* Knowledge level (Novice, Lower Intermediate, Upper Intermediate, Lower Advanced, Upper Advanced)
* Attempt Number

### Members

This report includes a list of your group’s current members (all-time).

It has one row per user and contains the following information:

* First and Last name
* Email
* Teams they belong to
* Role (Member, Team Manager, Manager, and Admin)
* Learn license
* DataLab license

### Team History

This report includes the history of your group's teams (all-time). The file contains the following information:

* A timestamp of the event
* The event type (Team was created, updated, or deleted; User joined team, left team)
* The event target (Team or User)
* Team name
* Email

### License History (for [seat-based accounts](/understanding-reports-with-clarity-definitions) only)

This report includes the history of your group's license usage (all-time).

Two files are created, one for Learn licenses and another for DataLab licenses. The files contain the following information:

* A timestamp of the event
* The event type (License allocated, revoked)
* The event target (User or Invite)
* Name and email address of the user

### Content Catalog

This report provides a complete list of learning content available to your organization, both public and custom, along with detailed metadata for each element.

The file contains the following information:

* Content type (e.g., course, project, practice, assessment)
* Title
* Description
* URL (link to the content on DataCamp)
* Technology
* Topic
* Skill level
* Hours
* State (Live/Soft Launch)
* Mobile (True/False to indicate whether the content is available on mobile)
* Released date
* Last update date

This export is not time-range configurable and always reflects the current state of the content catalog available to your organization at the time of export.


# Skill Matrix

The Skill Matrix summarizes each user's assessment scores and their evolution over time. It facilitates identifying and assigning learning paths to bridge skill gaps. It is also an excellent resource for evaluating a user's level across different skills.

* Each column represents a skill, and each row represents a user.
* An additional column shows the team(s) the user is part of.
* The arrows next to each score show the recent trend (when a user scores higher in a subsequent assessment, the arrow points up and vice versa).
* The colors match the score with the corresponding skill level:

| Color        | Skill level        | Score   |
| ------------ | ------------------ | ------- |
| Gray         | No score           |         |
| Yellow       | Novice (0-70)      | 0-70    |
| Light green  | Lower intermediate | 71-100  |
| Darker green | Intermediate       | 101-130 |
| Light blue   | Upper intermediate | 131-160 |
| Dark blue    | Advanced           | 161-200 |

* It is possible to hide the raw score with the **View Raw Scores** toggle.
* Clicking on a score opens a summary of the user’s scores and shows a list of recommended content for that particular user.
* When a user has no data for a particular skill, clicking the plus sign assigns an assessment.
* Clicking on the circular arrow reassigns an assessment if the assignment is past due.
* You can search for a particular member using the search box at the top.
* The technology dropdown menu next to the search box switches the assessment technology (Python, SQL, R, or Theory).

<figure><img src="/files/4HSONoGwUjYvCBRLhTrv" alt=""><figcaption></figcaption></figure>


# Data Freshness & Reporting Update Schedule

Understanding when your reporting data is refreshed helps you plan when to pull reports for your organization.

### How reporting data is updated

Most Group Hub reporting data is refreshed **once every 24 hours, including weekends and holidays**. The data pipeline processes your group daily, and the time it takes to complete varies depending on the size and complexity of each group.

Some sections — such as the Members list, Teams and Leaderboard— update in **real time** and do not depend on the daily pipeline.

#### Key details

<table><thead><tr><th width="196.5234375">Detail</th><th>Value</th></tr></thead><tbody><tr><td><strong>Update frequency</strong></td><td>Every 24 hours for most reporting data</td></tr><tr><td><strong>Pipeline window</strong></td><td>Starts approximately 6:00 AM UTC daily</td></tr><tr><td><strong>Typical completion</strong></td><td>Most groups are updated by 4:00 PM UTC</td></tr><tr><td><strong>Weekends &#x26; holidays</strong></td><td>The pipeline runs every day, no exceptions</td></tr></tbody></table>

### What this means for you

**Data reflects the most recent pipeline run.** When you access reporting, the data includes activity up to the last completed pipeline run. If the pipeline has not yet completed for the current day, you may be looking at data from the previous run.

**Completion times vary by group.** Larger groups with more members and activity may take longer to process. There is no fixed time that applies to all groups.

### Best practice for pulling reports

If you share reports with leadership or stakeholders on a regular schedule, we recommend pulling your reports **after 4:00 PM UTC** to ensure the most recent daily pipeline run has completed for your group.

{% hint style="info" %}
**Example:** If a learner completes a course on Tuesday evening, that completion will appear in your Group Hub reporting after the pipeline completes on Wednesday.
{% endhint %}

### How to check when your data was last updated

Most reporting sections in Group Hub show a **"Last updated at"** timestamp as a small grey clock chip. Hover over the chip to see the exact date and time that section's data was last refreshed, displayed in your local timezone.

Where the timestamp appears depends on the page:

* **Single-source pages** (Adoption, Progress, Skill Matrix, AI Insights) — one timestamp at the top of the page, since the whole page refreshes together.
* **Multi-section pages** (Engagement, Content Insights, Assessments, Certifications, Time in Learn, DataLab) — a separate timestamp on each section, since each is fed by its own pipeline and refreshes independently.
* **Dashboard** — a timestamp under each widget.

<figure><img src="/files/Iv6nAuNFZNDVfNkYQQVC" alt=""><figcaption><p>On the Time in Learn page, each section shows its own "Last updated at" time.</p></figcaption></figure>

#### Use the timestamp to

* **Confirm your data is current** before sharing a report with stakeholders.
* **Understand gaps** — if the timestamp shows yesterday's date, the current day's pipeline run has not yet completed for that section.
* **Troubleshoot** — if the timestamp is more than 48 hours old, contact your CSM or open a support ticket with your group ID.

### Why different sections may show different times

Each report and chart in Group Hub is backed by its own data source. During the daily pipeline run, these tables are processed and updated at different stages. This means:

* One section (e.g., Progress) may show a more recent timestamp than another (e.g., Time in Learn) on the same day.
* This is normal and expected — it simply reflects the order in which the pipeline processes the data.
* If a section, or the page it is rendered in, does **not** display a "Last updated at" timestamp, it means that section updates in real time.

### Real-time vs. daily data

Not all data in Group Hub follows the same refresh schedule.

**Sections that update in real time** do not depend on the daily pipeline. Changes are reflected immediately. These sections do not show a "Last updated at" timestamp. Examples include:

* **Members** — adding or removing members is reflected instantly.
* **Teams** — team creation, updates, and membership changes appear immediately.
* **Assignments —** creating, editing, and tracking assignment status (assigned, started, completed) is reflected immediately.
* **Custom Tracks —** creating, editing, and publishing custom tracks is reflected immediately.
* **Leaderboard —** XP rankings and learner positions update as members earn XP.

**All other sections** — including Dashboard, Progress, Adoption, Engagement, Content Insights, Assessments, Certifications, Time in Learn, DataLab, Skill Matrix, AI Insights, and Exports — are refreshed as part of the daily pipeline and display a "Last updated at" timestamp.

### About exports

When you download an export (CSV) from the Export section, the data in the file reflects the state of the underlying data table at the time you generate the export:

* For **pipeline-based exports** (Summary, Time in Learn, Certification, Course, Track, Project, Skill Assessment, Content Catalog), the data reflects the most recent completed pipeline run for that table. Different exports may reflect different pipeline stages, so timestamps can vary.
* For **real-time exports** (Members, Team History, License History), the data reflects the current state at the moment you generate the file.

Exports may take a few moments to process depending on the size of your organization. You will receive an email notification when your export is ready. Export files are available for download for 30 days.

{% hint style="info" %}
**Tip:** A newly added member will immediately appear in the Members export, but their learning activity will only appear in other exports (e.g., Summary, Course) after the next pipeline run.
{% endhint %}


# Integrating our data into your tools (via Data Connector 2.0)

### Integrate learning insights with your data.

DataCamp's Data Connector 2.0 provides easy access to your organization’s learning data. You can use your existing BI infrastructure to report on users’ learning activity.

We aim to expose all possible data related to our learning platform through Data Connector.

* See [Explore the data Model](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model) for a complete list of the available data.
* See [Getting Started with Data Connector](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0) for information on how to set up Data Connector.
* See [Using Data Connector](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0) for guides on setting up the connection with your BI tools.


# Explore the data model

Learn more about the data we expose through the Data Connector 2.0 by exploring the data model.

### **Data Model**

The data model for Data Connector provides data on activity for users in an organization across different content types.

* The currently supported content types are:
  * Assessments
  * Certifications
  * Competitions
  * Courses
  * Course chapters
  * Projects
  * Practices
  * Tracks
  * DataLab
  * Resources
    * Infographics
    * Ebooks
    * Webinars
    * Podcasts
    * Whitepapers
    * Code-Alongs
    * Data Sheets
    * Case Studies
    * Tools
    * Cheatsheets

### How to work with the data?

The data available from Data Connector is modeled using a dimensional model. This means fact, dimension, bridge, and mart tables are available.

You can join the fact tables with the dimension tables to summarize XP and time spent across technology, topic, etc.

The data model also provides dimension and bridge tables for team- or user-level analysis.

For example, you can aggregate the XP and time spent by technology for January 2025 with the following query:

```sql
/* Aggregate XP and time spent for January 2025 on courses, 
practices, projects, and assessments */

SELECT 
    content.technology,
    sum(xp_earned) as total_xp,
    sum(duration_engaged) as time_spent_seconds
FROM group_1234.fact_learn_events AS events
LEFT JOIN group_1234.dim_content AS content
    ON content.content_id = events.content_id
-- limit to courses, practices, projects, and assessments
WHERE events.event_name IN ('course_engagement', 
                            'practice_engagement',
                            'project_engagement',
                            'assessment_engaged')
    AND date(events.occurred_at) BETWEEN '2025-01-01' AND '2025-01-31'
GROUP BY content.technology
```

* In the following sections, we explore the different components of our data model:
  * [Fact tables](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/fact-tables)
  * [Dimension tables](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/dimension-tables)
  * [Bridge tables](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/bridge-tables)
  * [Metrics tables](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/metrics-tables)

### Data Connector's ERD

<figure><img src="/files/DNR3SjKT8e2b4GgRt77l" alt="Data Connector 2.0 entity relationship diagram"><figcaption><p>Data Connector 2.0 data model</p></figcaption></figure>

{% hint style="info" %}
The ER-Diagram covers fact, dimension, and bridge tables. The aggregated detail tables (`group_detail`, `user_engagement_detail`, `track_engagement_detail`, `ai_tutor_credit_usage_detail`) are documented separately on the [Metrics tables](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/metrics-tables) page.
{% endhint %}


# Fact tables

Fact tables store quantitative information (measurements/metrics) about events (facts) based on users' activity on DataCamp.

* The fact tables available are:
  * [**fact\_learn\_events**](#fact_learn_events)
  * [**fact\_certification\_events**](#fact_certification_events)
  * [**fact\_datalab\_events**](#fact_datalab_events)
  * [**fact\_permission\_events**](#fact_permission_events)
  * [**fact\_ai\_insights\_disclosures**](#fact_ai_insights_disclosures)

Events in the fact tables only include activity that occurred **while the user was part of the group**. This means that any events from before the user joined or after they left the group are not included in these tables. As a result, the recorded activity reflects only the period during which the user was associated with the group, rather than their complete history on the platform. This is an important distinction to keep in mind when aggregating metrics using fact tables, as the totals may not represent a user’s full learning journey on DataCamp.

### fact\_learn\_events

This table captures learning events and user interactions on the platform.

These are the event types in this table:

* Starts and completion events, arguably the most common, reflect content starts and/or completions:

  * `assessment_started` and `assessment_completed`
  * `course_started` and `course_completed`
  * `chapter_started` and `chapter_completed`
  * `exercise_completed`
  * `practice_completed`
  * `project_started` and `project_completed`
  * `track_started` and `track_completed`
  * `assignment_completed` and `assignment_completed_late`– The assignment was completed on time (on or before the due date) or late (after the due date).
  * `assignment_assigned` – The assignment was issued to the assignee.
  * `assignment_missed` – The assignment was not completed before the due date.
  * `assignment_unassigned` – The assignment was deleted after the creation.

  When an assignment is missed, an `assignment_missed` event is logged. If the user later completes the assignment after the due date, an `assignment_completed_late` event is also recorded. In this case, both the missed and late completion events are preserved.

{% hint style="info" %}
In assignment events, the `duration_engaged` and `xp_earned` columns remain NULL. Engagement time and XP are recorded through the learner’s interactions with the assigned content, such as `course_engagement` and `assessment_engaged`.
{% endhint %}

* Engagement events that reflect user interaction with particular content, such as time spent and XP earned:
  * `assessment_engaged`
  * `course_engagement`
  * `practice_engagement`
  * `project_engagement`
* One-off XP events:
  * `alpa_onboarding`
  * `b2b_onboarding_xp_boost`

{% hint style="info" %}
We stopped awarding `b2b_onboarding_xp_boost` in October 2024
{% endhint %}

Most fact events are associated with a specific content item via the `content_id` column, which can be used to perform a join with the `dim_content` table. For track events, the `track_version_id` column is used (and the `content_id` column will be empty), which can be used to join with the `dim_track` table. Assignment events use `assignment_id` to join with `dim_assignment` and retrieve assignment details.

Every fact event has a `occurred_at` timestamp that determines when the event happened.

Additionally, content-specific fields will have data when the event is related to specific content types. For example, `assessment_score` will contain the assessment score for `assessment_completed` events.

{% hint style="info" %}
For course-related and chapter-related events (e.g., `course_started`, `course_completed`, `chapter_started`, `chapter_completed`, `course_engagement`), the `course_variant_id` column identifies which variant the user interacted with. A user can start and complete both the Datacamp and AI Tutor variant of the same course, resulting in separate events for each variant. Use `course_variant_id` to filter or group by variant. Join with `dim_course_variant` for variant metadata.
{% endhint %}

<table><thead><tr><th width="374">Field</th><th>Description</th></tr></thead><tbody><tr><td>user_id</td><td>The unique user identifier</td></tr><tr><td>date_id</td><td>The date identifier (YYYYMMDD)</td></tr><tr><td>content_id</td><td>The unique content identifier</td></tr><tr><td>course_variant_id</td><td>The course variant identifier. <code>1</code> = datacamp, <code>2</code> = ai-tutor. Populated for course and chapter events. Can be joined with <code>dim_course_variant</code> for variant details.</td></tr><tr><td>track_version_id</td><td>The unique track identifier</td></tr><tr><td>assignment_id</td><td>The unique assignment identifier</td></tr><tr><td>event_name</td><td>The name of the event</td></tr><tr><td>occurred_at</td><td>The timestamp when the event took place (UTC)</td></tr><tr><td>xp_earned</td><td>The XP earned on the event</td></tr><tr><td>duration_engaged</td><td>The time (in seconds) the user spent engaged with the particular content item</td></tr><tr><td>assessment_score</td><td>The assessment score (0-200)</td></tr><tr><td>assessment_percentile</td><td>The percentile that corresponds to the assessment score</td></tr><tr><td>assessment_knowledge_level</td><td>The skill level (Novice, Lower Intermediate, Upper Intermediate, Lower Advanced, Upper Advanced) that correlates to the assessment score</td></tr><tr><td>course_is_skipped</td><td>Determines whether the course was skipped. Only used for <code>course_completed</code> events.</td></tr></tbody></table>

{% hint style="warning" %}
Not all events in the fact learn events table will have a corresponding content item in `dim_content`. This is due to a limitation in our system, where some content items are hard deleted on our end. Despite this, we still include events related to these deleted content items in the fact table because they represent valuable user activity—users gained XP and spent time engaging with the content. Even if the content reference is missing, these events provide meaningful insights into user learning behavior and should not be excluded from reporting.\
\
Please check the [Domain Gotchas](/integrating-our-data-into-your-tools-via-data-connector-2.0/domain-gotchas) section for more details.
{% endhint %}

### fact\_certification\_events

This table captures certification events and user interactions on the platform.

These are the event types in this table:

* Certification milestone events
  * `certification_registered`
  * `certification_withdrawn`
  * `certification_failed`
  * `certification_expired`
  * `certification_granted`
* Certification component events
  * Attempts
    * `certification_attempt_expired`
    * `certification_out_of_attempts`
  * Case Studies
    * `certification_case_study_registered`
    * `certification_case_study_presentation_submitted`
    * `certification_case_study_graded`
    * `certification_case_study_failed`
    * `certification_case_study_passed`
  * Project
    * `certification_project_registered`
    * `certification_project_passed`
    * `certification_project_failed`
    * `certification_project_expired`
  * Skill Assessment
    * `certification_skill_assessment_registered`
    * `certification_skill_assessment_failed`
    * `certification_skill_assessment_passed`

Every event is tied to a specific certification attempt. Use `certification_id` to join with `dim_certification` for certification metadata. Use `attempt_id` to stitch events that belong to the same attempt — the same `attempt_id` value is shared across the parent certification milestone events and all three component families (project, skill assessment, case study), so a full per-attempt funnel can be reconstructed by ordering events by `occurred_at` within an `attempt_id`.

Each component family emits a `_registered` event for every attempt the user starts, plus the corresponding outcome events (`_passed`, `_failed`, and where applicable `_expired` or `_graded`). This gives complete funnel coverage per attempt: which component the user started, which they finished, and how each outcome was reached.

| Field             | Description                                   |
| ----------------- | --------------------------------------------- |
| user\_id          | The unique user identifier                    |
| date\_id          | The date identifier (YYYYMMDD)                |
| certification\_id | The unique certification identifier           |
| event\_name       | The name of the event                         |
| xp\_earned        | The XP earned on the event                    |
| occurred\_at      | The timestamp when the event took place (UTC) |
| attempt\_id       | The unique certification attempt identifier   |

### fact\_datalab\_events

This table captures events related to interactions within DataLab on the platform.

These are the event types in this table:

* Workbook creation:
  * `workspace_created`
* Engagement events that reflect interactions with DataLab workbooks:
  * `workspace_publication_viewed`
  * `workspace_viewed`
    * When a user spends time viewing a DataLab workbook
  * `workspace_visited`
    * When a user spends time either viewing or editing a workbook

{% hint style="warning" %}
Please note that the workspace\_viewed events are a subset of workspace\_visited events. Only one of the two events should be used when calculating time spent on DataLab workbooks.
{% endhint %}

Most fact events are associated with a specific DataLab workbook via the `workbook_id` column. The `workbook_id` is used in the URL for the workbook. DataLab workbooks have the following URLs: `https://www.datacamp.com/datalab/w/workbook_id`.

Every fact event has a `occurred_at` timestamp that determines when the event happened.

| Field             | Description                                                           |
| ----------------- | --------------------------------------------------------------------- |
| user\_id          | The unique user identifier                                            |
| date\_id          | The date identifier (YYYYMMDD)                                        |
| workbook\_id      | The unique workbook identifier                                        |
| event\_name       | The name of the event                                                 |
| occurred\_at      | The timestamp when the event took place (UTC)                         |
| duration\_engaged | The time (in seconds) when the user was engaged with the workbook     |
| workbook\_source  | Source of the workbook (e.g., dataset template, course continuation). |
| workbook\_class   | Class of the workbook (e.g., notebook, exploration).                  |

### fact\_permission\_events

This fact table captures permission, license and invite related events across the platform.

**Event types in this table include:**

* **Subscription:** `subscription_started`, `subscription_ended` (with related subscription metadata, e.g., license counts).
* **License:** `user_license_allocated`, `user_license_revoked`.
* **Invites:** `invite_sent`, `invite_claimed`, `invite_withdrawn`.

Each event is one row and carries an `occurred_at` timestamp indicating when the event happened.

| Field                   | Description                                                                |
| ----------------------- | -------------------------------------------------------------------------- |
| team\_id                | The unique team identifier if the event is associated with a specific team |
| user\_id                | The unique user identifier if the event is associated with a specific user |
| email                   | The email of the person invited                                            |
| date\_id                | The date identifier (YYYYMMDD)                                             |
| event\_name             | The name of the event                                                      |
| occurred\_at            | The timestamp when the event took place (UTC)                              |
| invite\_id              | The unique invite identifier                                               |
| is\_active              | Indicates whether the subscription or the license is currently active      |
| product                 | Product the event is associated to, e.g. 'learn' or 'workspace'            |
| license                 | License the event is associated to, e.g. 'enterprise', 'teams', etc...     |
| slug                    | The product slug, e.g. 'learn.enterprise'                                  |
| nb\_licenses\_purchased | The number of licenses purchased.                                          |

### fact\_ai\_insights\_disclosures

This table captures high-confidence, non-sensitive topics that learners disclose and AI-tool mentions detected during AI Tutor conversations.

For tool signals, each row is the first disclosure for a learner and displayed tool label while the learner was part of the group. For topic signals, each row is the first disclosure for a learner, AI Tutor step, and topic while the learner was part of the group.

| Field              | Description                                                                                                       |
| ------------------ | ----------------------------------------------------------------------------------------------------------------- |
| user\_id           | The unique user identifier                                                                                        |
| thread\_id         | The AI Tutor conversation identifier                                                                              |
| slice\_id          | The conversation slice from which the disclosure was extracted                                                    |
| signal\_type       | The disclosure type: `topic` for a learner disclosure or `tool` for an AI-tool mention                            |
| step               | The AI Tutor step associated with the disclosure: `task`, `challenge`, `refinement need`, or `profiling`          |
| category           | The assigned classification: a topic cluster for topic signals or a canonical tool label for tool signals         |
| detail             | The extracted disclosure for topic signals or the raw tool mention for tool signals                               |
| is\_internal\_tool | For tool signals, whether the mentioned tool is a company-internal bespoke tool. This is `null` for topic signals |
| occurred\_at       | The timestamp of the conversation's first message (UTC), used to scope the disclosure to group membership         |
| generated\_at      | The timestamp when the disclosure signal was generated (UTC)                                                      |


# Dimension tables

Dimensions provide context surrounding the fact tables. Simply put, they give the who, what, where of a fact.

`fact_learn_events`, for example, can be joined to `dim_content` to get more information on the content items (title, technology, topic, etc.)

* The dimension tables available are:
  * [**dim\_content**](#dim_content)
  * [**dim\_course\_variant**](#dim_course_variant)
  * [**dim\_user**](#dim_user)
  * [**dim\_team**](#dim_team)
  * [**dim\_track**](#dim_track)
  * [**dim\_certification**](#dim_certification)
  * [**dim\_assignment**](#dim_assignment)
  * [**dim\_date**](#dim_date)

### dim\_content

This table stores detailed information on the different types of content available on the platform.

{% hint style="warning" %}
The `chapter_id` column type has changed from integer to string in March 2026. If your existing queries cast `chapter_id` to an integer or use integer comparison operators, they will need to be updated. See Domain Gotchas for more details.
{% endhint %}

| Field                      | Description                                                                                                                       |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| content\_type              | The type of content (course, chapter, project, assessment, etc.)                                                                  |
| content\_id                | The unique content identifier                                                                                                     |
| exercise\_id               | The unique exercise identifier                                                                                                    |
| chapter\_id                | The unique course chapter identifier                                                                                              |
| course\_id                 | The unique course identifier                                                                                                      |
| course\_variant\_id        | The unique ID of the course variant, 1 for datacamp, 2 for ai-tutor. Can be joined with `dim_course_variant` for variant details. |
| content\_title             | The title of the content item                                                                                                     |
| technology                 | The technology of the content item (R, Python, SQL, Spark, etc.)                                                                  |
| topic                      | The topic of the content item (Programming, Data Manipulation, Artificial Intelligence, etc.)                                     |
| slug                       | The slug of the content item, if applicable                                                                                       |
| content\_url               | The URL of the content                                                                                                            |
| xp\_available              | The maximum XP points the user can earn by completing the content item                                                            |
| course\_state              | The current status of the course (Live, Soft Launch, Archived)                                                                    |
| course\_is\_custom         | Whether the course is custom or not                                                                                               |
| assessment\_id             | The unique identifier of the assessment                                                                                           |
| assessment\_active         | The current status of the assessment                                                                                              |
| project\_id                | The unique identifier of the project                                                                                              |
| project\_is\_guided        | Whether the project is guided or unguided                                                                                         |
| project\_state             | The current status of the project (Live, Archived)                                                                                |
| project\_is\_custom        | Whether the project is custom or not                                                                                              |
| practice\_pool\_id         | The unique identifier of the practice pool                                                                                        |
| practice\_pool\_status     | The current status of the practice pool (Live, Archived)                                                                          |
| exercise\_is\_deleted      | Whether the exercise has been deleted                                                                                             |
| time\_needed\_in\_hours    | The estimated time needed in hours to complete the content item                                                                   |
| description                | A description of the content                                                                                                      |
| short\_description         | A short description of the content                                                                                                |
| assessment\_is\_custom     | Whether the assessment is custom or not                                                                                           |
| course\_difficulty\_level  | Difficulty level of the course (Beginner, Intermediate, Advanced).                                                                |
| project\_difficulty\_level | Difficulty level of the project (Beginner, Intermediate, Advanced).                                                               |
| is\_mobile\_enabled        | Whether the content can be completed on the DataCamp mobile app.                                                                  |
| is\_course\_case\_study    | Whether the course is a case study.                                                                                               |
| content\_published\_at     | Timestamp when the content was first published.                                                                                   |
| content\_updated\_at       | Timestamp when the content metadata was last updated.                                                                             |
| is\_resource               | Whether a content item is a resource (podcast, webinar, cheatsheet, etc.)                                                         |
| has\_variant\_datacamp     | Indicates whether the course has a Datacamp variant.                                                                              |
| has\_variant\_ai\_tutor    | Indicates whether the course has an AI Tutor variant.                                                                             |

### dim\_course\_variant

This table provides information about course variants. A course variant represents a specific version of a course's learning experience. Currently, courses can be either **Datacamp** or **AI Tutor.**

| Field                        | Description                                                                                                                                             |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| course\_variant\_id          | The unique identifier for the course variant. `1` = datacamp, `2` = ai-tutor.                                                                           |
| content\_id                  | The unique identifier for the content item (course).                                                                                                    |
| course\_variant\_name        | The name of the course variant (e.g., 'datacamp', 'ai-tutor').                                                                                          |
| course\_variant\_description | The description of the course variant.                                                                                                                  |
| duration\_minutes\_average   | Average duration of the AI Tutor variant of the course in minutes.                                                                                      |
| duration\_minutes\_margin    | Margin in minutes of the duration of the AI Tutor variant of the course. The range of durations of the course is the duration plus or minus the margin. |

### dim\_user

This table contains detailed information on the user. This table is commonly joined with other tables to enrich user-related data, as most fact event tables contain a user ID.

| Field              | Description                                                                                  |
| ------------------ | -------------------------------------------------------------------------------------------- |
| user\_id           | The unique user identifier                                                                   |
| email              | The user’s email address                                                                     |
| first\_name        | The user’s first name                                                                        |
| last\_name         | The user’s last name                                                                         |
| slug               | The slug of the user, used in the user's portfolio/profile URL                               |
| last\_login\_at    | The timestamp of the user’s most recent DataCamp login. Null when no timestamp is available. |
| avatar\_file\_name | The avatar file name of the user                                                             |

### dim\_team

This table stores detailed information about teams.

| Field                | Description                                            |
| -------------------- | ------------------------------------------------------ |
| team\_id             | The unique team identifier                             |
| team\_name           | The name of the team                                   |
| created\_at          | The timestamp when the team was created                |
| updated\_at          | The timestamp when the team was last updated           |
| deleted\_at          | The timestamp when the team was deleted, if applicable |
| group\_created\_at   | The timestamp when the group was created               |
| slug                 | The slug of the team                                   |
| team\_color\_hexcode | The hexacode of the team’s color                       |

### dim\_track

This dimension table is designed to store detailed information about skill, career, and custom tracks. It’s commonly used to enrich track metrics with track information. For example, it helps in the Progress report where it provides the track title.

Entries in this table contain both a `track_id` and `track_version_id` because a track can contain multiple versions.

Track fact events are always tied to a `track_version_id`.

| Field                      | Description                                                                                                                                                                                                                           |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| track\_version\_id         | The unique track version identifier. Every time a particular track is updated, it gets a new `track_version_id` while keeping the same `track_id`                                                                                     |
| track\_id                  | The unique track identifier                                                                                                                                                                                                           |
| track\_type                | The type of track (public or custom)                                                                                                                                                                                                  |
| track\_title               | The title of the track. The full name of the track is a concatenation of `track_title` and `track_subtitle`                                                                                                                           |
| track\_subtitle            | The subtitle of the track                                                                                                                                                                                                             |
| track\_category            | The category of the track (career or skills)                                                                                                                                                                                          |
| track\_topic               | The topic of the track                                                                                                                                                                                                                |
| is\_current\_version       | Whether this track version is the current (latest) version of the track                                                                                                                                                               |
| track\_version\_number     | The ordinal version number of the track. Each time the track is updated, the `track_version_number` increases by one                                                                                                                  |
| track\_published\_at       | The timestamp when the track was published                                                                                                                                                                                            |
| track\_updated\_at         | Timestamp when the track metadata was last updated.                                                                                                                                                                                   |
| track\_archived\_at        | The timestamp when the track was archived, if applicable                                                                                                                                                                              |
| track\_technology          | The technology of the track (R, Python, Shell, etc.)                                                                                                                                                                                  |
| track\_state               | The current status of the track (live, archived)                                                                                                                                                                                      |
| track\_short\_description  | A short description of the track, only populated for DataCamp catalog tracks.                                                                                                                                                         |
| track\_description         | The full description of the track. For custom tracks, this is the long-form description an admin enters when creating or editing the track. For catalog tracks, this matches the description shown on the public DataCamp track page. |
| track\_slug                | The track slug                                                                                                                                                                                                                        |
| track\_url                 | The URL of the track                                                                                                                                                                                                                  |
| track\_time\_needed\_hours | Time needed (in hours) to complete the track                                                                                                                                                                                          |

### dim\_certification

This table stores details on certifications.

| Field                        | Description                                                        |
| ---------------------------- | ------------------------------------------------------------------ |
| certification\_id            | The unique certification identifier                                |
| certification\_name          | The name of the certificate                                        |
| certification\_slug          | The slug of the certificate                                        |
| certification\_description   | Description summarizing the certification content                  |
| certification\_type          | Type of the certification: Public, Restricted, or Specialist       |
| certification\_is\_custom    | Whether the certification is custom or not                         |
| xp\_available                | The maximum XP a learner can earn by completing this certification |
| certification\_level         | The level of the certification                                     |
| certification\_url           | The URL of the certification                                       |
| certification\_published\_at | Timestamp when the certification was published                     |
| certification\_updated\_at   | Timestamp when the certification metadata were updated             |

### dim\_assignment

This table contains metadata for each assignment, including its creator, assigned content, target audience, type, XP value, status, and key timestamps. It includes foreign keys to join with assigned elements (content, track, certification) for additional details.

For tracks, only `track_id` is available—join to `dim_track` using `is_current_version = true` to get the latest version.

| Field                          | Description                                                                           |
| ------------------------------ | ------------------------------------------------------------------------------------- |
| assignment\_id                 | The unique assignment identifier.                                                     |
| created\_by\_id                | The id (user\_id) of the user who created the assignment.                             |
| content\_id                    | The id of the content assigned (assessment, chapter, course, or project).             |
| certification\_id              | The id of the certification assigned.                                                 |
| track\_id                      | The id of the track or custom track assigned.                                         |
| assignment\_type               | The type of assignment (custom track, assessment, chapter, course, project, xp, etc). |
| assignment\_xp                 | The XP or goal value of the assignment. Only filled for assignment type ‘xp’.         |
| assignment\_status             | The status of the assignment (e.g., active or archived).                              |
| created\_at                    | The timestamp when the assignment was created.                                        |
| due\_at                        | The due date of the assignment.                                                       |
| deleted\_at                    | The timestamp when the assignment was deleted, if applicable.                         |
| personalized\_message\_content | The personalized message content for the assignment.                                  |
| assignee\_type                 | The type of assignee (group, team, user).                                             |
| team\_id                       | The unique team identifier                                                            |

### dim\_date

This table contains a row per date from the year 2010 onwards. It serves as a support table for joining other tables with `date_id`.

This table includes pre-calculated values for common date-related operations, such as day, week, month, quarter, half-year, and year attributes, calendar period boundaries, weekday and weekend flags, US holidays, and business-day indicators.

| Field                           | Description                                                    |
| ------------------------------- | -------------------------------------------------------------- |
| date\_id                        | The unique date identifier (YYYYMMDD)                          |
| date                            | The date                                                       |
| day\_of\_week                   | The day of the week for that date (1-7)                        |
| day\_of\_week\_name             | The name of the day of the week                                |
| day\_of\_month                  | The day of the month for that date (1-31)                      |
| day\_of\_month\_name            | The display label for the day of the month                     |
| day\_of\_quarter                | The day of the quarter for that date                           |
| day\_of\_year                   | The day of the year for that date (1-366)                      |
| day\_of\_year\_name             | The display label for the day of the year                      |
| week                            | The week number for that date                                  |
| week\_end\_start                | The end date of the week                                       |
| week\_start\_date               | The start date of the week                                     |
| month                           | The month number for that date (1-12)                          |
| month\_name                     | The month name                                                 |
| month\_end\_date                | The end date of the month                                      |
| month\_start\_date              | The start date of the month                                    |
| quarter                         | The quarter number for that date (1-4)                         |
| quarter\_name                   | The quarter label                                              |
| half\_year                      | The half-year number for that date (1-2)                       |
| half\_year\_name                | The half-year label                                            |
| year                            | The year                                                       |
| year\_end\_date                 | The end date of the year                                       |
| year\_start\_date               | The start date of the year                                     |
| is\_weekday                     | Indicates whether the date is a weekday                        |
| is\_weekend                     | Indicates whether the date is a weekend                        |
| month\_day\_name\_rank          | The occurrence number of that weekday within the month         |
| month\_day\_name\_reverse\_rank | The reverse occurrence number of that weekday within the month |
| us\_holiday\_identifier         | The US holiday name or identifier for that date, if applicable |
| is\_business\_day               | Indicates whether the date is a business day                   |


# Bridge tables

Bridge tables are used to connect fact and dimension tables. Bridge tables are also called “join tables” in classic SQL.

* The bridge tables available are:
  * [**bridge\_user\_team**](#bridge_user_team)
  * [**bridge\_user\_group**](#bridge_user_group)
  * [**bridge\_track\_content**](#bridge_track_content)

### bridge\_user\_team

This table can connect a user to the team(s) of which they are a member. In this case, a bridge table is needed because a single user can simultaneously be a member of multiple teams.

This bridge table captures the many-to-many relationships between users and teams on the platform. A row in this table reflects one period of user membership in the team and the role they had during this period. A user can have multiple periods in a team (e.g., joining and leaving multiple times).

A row will contain the start and end timestamps of the user’s membership period in the team. If `ended_at` is null, it means that the user is currently still part of the team.

| Field       | Description                                                          |
| ----------- | -------------------------------------------------------------------- |
| user\_id    | The unique user identifier                                           |
| team\_id    | The unique team identifier                                           |
| started\_at | The timestamp when the user was added to the team                    |
| ended\_at   | The timestamp when the user was removed from the team, if applicable |

### bridge\_user\_group

This bridge table is designed to capture user memberships in the group. An entry in this table reflects one period of user membership in the group and the role they had during this period. A user can have multiple periods in a group (e.g., joining and leaving multiple times or being assigned a new role).

A record will contain the start and end timestamps of the user’s membership period in the group. If `ended_at` is null, it means that the user is currently still part of the group.

| Field             | Description                                                                                                                                                |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user\_id          | The unique user identifier                                                                                                                                 |
| started\_at       | The timestamp when the user was added to the group                                                                                                         |
| ended\_at         | The timestamp when the user was removed from the group, if applicable                                                                                      |
| role              | The role of the user in that period.                                                                                                                       |
| last\_sso\_nameid | The last SSO NameID of the user in the group. Some groups that authenticate with SSO use this field to include custom identification data for their users. |

### bridge\_track\_content

This bridge table captures the content items of each track. For each track in `dim_track` (referenced with `track_version_id`), this table contains the content items that make up the track.

Each row is a content item on a given track, with `content_id`, `content_type`, and `position` providing more details. You can join with `dim_content` to get more metadata on each content item like `content_title`, `technology`, `topic`, etc.

| Field                     | Description                                                                                                             |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| track\_version\_id        | The unique track version identifier to which the content item belongs. This is the foreign key to join with `dim_track` |
| content\_id               | The unique content identifier of the content item                                                                       |
| content\_type             | The content item’s type (course, chapter, project, assessment, etc.)                                                    |
| position                  | The position of the content item within the track (0 indicates the first item)                                          |
| required\_for\_completion | `true` if the item must be completed to finish the track; `false` if it is optional.                                    |


# Metrics tables

Metrics tables contain aggregated tabular data. They combine data from fact, dimension, and bridge tables to provide an easy-to-use foundation for reports and dashboards.

* The metric tables available are:
  * [**group\_detail**](#group_detail)
  * [**user\_engagement\_detail**](#user_engagement_detail)
  * [**track\_engagement\_detail**](#track_engagement_detail)
  * [**ai\_tutor\_credit\_usage\_detail**](#ai_tutor_credit_usage_detail)

### group\_detail

This table aggregates activity information per user and day. It can help you build a flexible activity dashboard or report showing activity for the whole organization or per user for any period. Using only this table, for example, you can quickly create a dashboard like the one below:

<figure><img src="/files/hkb0qnKyXgySQfGFNd77" alt=""><figcaption></figcaption></figure>

| Field                         | Description                                                                                                |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------- |
| user\_id                      | The unique identifier of the user                                                                          |
| date                          | The date for which the statistics are aggregated                                                           |
| total\_hours\_on\_learn       | Total time spent by the user on Learn content (assessments, courses, practices, and projects) on that date |
| total\_hours\_on\_courses     | Total time spent by the user on courses on that date                                                       |
| total\_xp\_earned             | The amount of xp the user earned on the given date                                                         |
| nb\_courses\_started          | The number of courses the user has started on the given date                                               |
| nb\_courses\_completed        | The number of courses the user has completed on the given date                                             |
| nb\_chapters\_started         | The number of chapters the user has started on the given date                                              |
| nb\_chapters\_completed       | The number of chapters the user has completed on the given date                                            |
| nb\_exercises\_completed      | The number of exercises the user has completed on the given date                                           |
| nb\_projects\_started         | The number of projects the user has started on the given date                                              |
| nb\_projects\_completed       | The number of projects the user has completed on the given date                                            |
| nb\_practices\_completed      | The number of practices the user has completed on the given date                                           |
| nb\_assessments\_started      | The number of assessments the user has started on the given date                                           |
| nb\_assessments\_completed    | The number of assessments the user has completed on the given date                                         |
| nb\_tracks\_started           | The number of tracks the user has started on the given date                                                |
| nb\_tracks\_completed         | The number of tracks the user has completed on the given date                                              |
| nb\_certifications\_started   | The number of certifications the user has completed on the given date                                      |
| nb\_certifications\_completed | The number of certifications the user has completed on the given date                                      |
| ai\_tutor\_hours\_on\_learn   | Total time spent by the user on Learn AI Tutor content on that date                                        |
| ai\_tutor\_hours\_on\_courses | Total time spent by the user on Learn AI Tutor courses on that date                                        |
| ai\_tutor\_xp\_earned         | The amount of xp the user earned on the given date on AI Tutor content                                     |
| ai\_tutor\_courses\_started   | The number of AI Tutor courses the user has started on the given date                                      |
| ai\_tutor\_courses\_completed | The number of AI Tutor courses the user has completed on the given date                                    |

### user\_engagement\_detail

This table contains activity information per user at the content-item level. It tracks courses, course chapters, projects, and assessments.

This table shows users' activity for particular technologies, topics, or content items. When assigning content to users, it can help you determine who has done what, when they started, who has finished, and how much time they spent on a given set of content items.

| Field               | Description                                                                                                                 |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| user\_id            | The unique identifier of the user                                                                                           |
| content\_id         | The unique identifier of the content unit                                                                                   |
| course\_variant\_id | The course variant identifier. `1` = datacamp, `2` = ai-tutor. Can be joined with `dim_course_variant` for variant details. |
| content\_title      | The title of the content unit                                                                                               |
| started\_at         | The timestamp when the user started the content unit, if available                                                          |
| completed\_at       | The timestamp when the user completed the content unit, if available                                                        |
| hours\_engaged      | The number of hours the user spent on the content unit                                                                      |
| xp\_earned          | The xp points the user earned on the content unit                                                                           |
| pct\_completed      | The completion ratio (0-1.0) based on the xp earned                                                                         |
| content\_type       | The content type of the content unit (course, chapter, project, assessment)                                                 |
| technology          | The technology of the content unit                                                                                          |
| topic               | The topic of the content unit                                                                                               |

### track\_engagement\_detail

This table contains information on the track activity for each user and each track they have enrolled in.

It is the companion to `user_engagement_detail`, but at the track level. Since tracks contain multiple items from different content types (courses, projects, assessments), a different metric table is needed to show the user's progress in the track and its constituent components.

The table shows who has started a track, who has completed it, and each user's detailed progress. It includes the number of courses, chapters, projects, and assessments in the track and the number each user has completed.

| Field                      | Description                                                                                                  |
| -------------------------- | ------------------------------------------------------------------------------------------------------------ |
| user\_id                   | The unique identifier of the user                                                                            |
| track\_name                | The name of the track                                                                                        |
| category                   | The category of the track (skills, career)                                                                   |
| track\_id                  | The unique identifier of the track                                                                           |
| track\_version\_id         | The unique identifier of the track version. A track can have multiple versions, all with the same `track_id` |
| is\_custom                 | Whether or not a track is custom. If `false`, then the track is a regular (public) track                     |
| is\_current\_version       | Whether or not the version of the track is the most recently published version                               |
| track\_started\_at         | The timestamp when the user started the track.                                                               |
| track\_completed\_at       | The timestamp when the user completed the track. If a user has not completed the track, this field is `null` |
| nb\_courses                | The number of courses that are part of the track                                                             |
| nb\_courses\_completed     | The number of courses the user has completed in this track                                                   |
| nb\_chapters               | The number of chapters that are part of the track                                                            |
| nb\_chapters\_completed    | The number of chapters the user has completed in this track                                                  |
| nb\_projects               | The number of projects that are part of the track                                                            |
| nb\_projects\_completed    | The number of projects the user has completed in this track                                                  |
| nb\_assessments            | The number of assessments that are part of the track                                                         |
| nb\_assessments\_completed | The number of assessments the user has completed in this track                                               |
| xp\_available              | The total XP available for the track                                                                         |
| xp\_earned                 | The XP the user has earned in the track                                                                      |
| pct\_xp\_earned            | The percentage of XP available the user has earned in this track                                             |

### ai\_tutor\_credit\_usage\_detail

This table contains each learner's AI Tutor credit usage and current credit limit for the active 12-month reset window. It can help you monitor AI Tutor credit consumption, remaining credits, and users who have exceeded their current limit.

Each row represents one user in the group. Users with no AI Tutor course usage in the current reset window are included with `credits_used_cum` set to `0`. If no AI Tutor credit limit is configured, limit-derived fields are `null`.

| Field                                 | Description                                                                                                                                        |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| group\_id                             | The unique identifier of the group                                                                                                                 |
| user\_id                              | The unique identifier of the user                                                                                                                  |
| next\_renewal\_date                   | The active subscription term end date used to determine the current reset window                                                                   |
| reset\_window\_start                  | The start date of the active 12-month reset window, inclusive                                                                                      |
| reset\_window\_end                    | The end date of the active 12-month reset window, exclusive                                                                                        |
| credits\_used\_cum                    | The number of AI Tutor credits used by the user in the active reset window. One credit equals one hour of AI Tutor course engagement               |
| credits\_remaining                    | The user's effective AI Tutor credit limit minus credits used, floored at `0`. This is `null` when no effective limit is configured                |
| percentage\_credits\_used             | The share of the user's effective AI Tutor credit limit that has been used. `1.0` means 100%. This is `null` when no effective limit is configured |
| is\_limit\_exceeded                   | Whether the user's credits used are greater than their effective AI Tutor credit limit                                                             |
| last\_credit\_usage\_at               | The timestamp of the user's most recent AI Tutor course engagement event in the active reset window                                                |
| ai\_tutor\_default\_user\_limit       | The default per-user AI Tutor credit limit for members of the group                                                                                |
| ai\_tutor\_custom\_user\_limit        | The user's active custom AI Tutor credit limit, if one is configured                                                                               |
| ai\_tutor\_effective\_user\_limit     | The user's current AI Tutor credit limit after resolving custom, default, then group limits                                                        |
| ai\_tutor\_limit\_source              | The level that provides the effective user limit: `custom`, `default`, or `group`                                                                  |
| ai\_tutor\_custom\_limit\_created\_at | The timestamp when the active custom user limit was created                                                                                        |
| ai\_tutor\_group\_limit               | The current group-level AI Tutor credit allocation, repeated on each user row and used as the final fallback limit                                 |


# Common use cases

An everyday use case is integrating DataCamp reporting with your existing BI infrastructure. The [Using Data Connector](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0) section provides detailed instructions on setting up and getting started for the most popular BI tools.

After accessing the data in Data Connector, you can easily create custom reports like:

* XP and time spent on a particular set of technologies or topics
* Extending and customizing engagement reports to fit your organization’s specific needs.

We have included several [sample queries](/integrating-our-data-into-your-tools-via-data-connector-2.0/sample-queries) for typical reporting needs and a section with SQL queries that [recreate key reports in the Groups tab](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab).


# Sample queries

In this section, we provide several sample SQL queries to answer typical reporting needs like:

* [Users who have gained XP in the last 7 days](#users-who-have-gained-xp-in-the-last-7-days)
* [All current members of the group](#all-current-members-of-the-group)
* [Time spent in Learn per technology](#time-spent-in-learn-per-technology)
* [Time spent in Learn per team](#time-spent-in-learn-per-team)
* [Time spent in Learn per user](#time-spent-in-learn-per-user)
* [XP earned by user](#xp-earned-by-user)
* [Completed courses by user](#completed-courses-by-user)
* [Completed assessments by user](#completed-assessments-by-user)

Additionally, in the following section, we provide [SQL queries that replicate key reports in the Groups tab](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab).

{% hint style="info" %}
Courses on DataCamp can now have multiple variants: **Datacamp** and **AI Tutor**. A user can complete both variants of the same course. The sample queries below return results across all variants by default. To filter by variant, add `course_variant_id` to your `WHERE` clause (e.g., `WHERE course_variant_id = 1` for Datacamp only). See Domain Gotchas for more details.
{% endhint %}

### Users who have gained XP in the last 7 days

To track which users actively engage with the platform, you can use [XP](/understanding-reports-with-clarity-definitions) as a proxy for activity and look at users who have recently earned XP.

The following query returns a list of all users that earned XP in the last 7 days.

```sql
SELECT
  user.email,
  max(events.occurred_at) AS last_xp_at
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_user AS user 
  ON events.user_id = user.user_id
WHERE events.event_name IN ('assessment_engaged', 
                    'course_engagement', 
                    'practice_engagement', 
                    'project_engagement', 
                    'b2b_onboarding_xp_boost', 
                    'alpa_onboarding')
  AND date(events.occurred_at) >= date_add('day', -7, current_date)
  AND events.xp_earned > 0
GROUP BY user.email
ORDER BY last_xp_at DESC
```

{% hint style="warning" %}
In the query above, we specify the XP events to include. This is to avoid double counting XP in courses since the dataset contains `course_engagement` and `exercise_completed` events with a non-zero `xp_earned` value. Both contain XP gained from completing an exercise, so including both would lead to double counting XP earned in courses.

Please check the [Domain Gotchas](/integrating-our-data-into-your-tools-via-data-connector-2.0/domain-gotchas) section for more details.
{% endhint %}

You can also use the query above to identify your top learners for an XP competition. Simply modify the date filter to include the competition period.

### All current members of the group

Another common request is a list of the organization's users. The query below returns a list of all current members in your group and their start date.

```sql
SELECT 
  bug.user_id,
  user.email,
  bug.started_at
FROM data_connector_1234.bridge_user_group AS bug
LEFT JOIN data_connector_1234.dim_user AS user
  ON bug.user_id = user.user_id
WHERE bug.ended_at IS NULL
ORDER BY email
```

{% hint style="info" %}
**Removed users**

Please notice the `bug.ended_at` filter. If you leave this out, the query will also return the users who have been in your group but have since been removed. You can then include `bug.ended_at` in the `SELECT` clause to get the date a user left the group.
{% endhint %}

### Time spent in Learn per technology

Each content type at DataCamp has an associated [technology](/understanding-reports-with-clarity-definitions) (e.g., R, Python, SQL, Spark, etc.). If you want to examine what technologies your users are most focused on, you can create a report with the time spent per technology with the query below.

```sql
SELECT
  content.technology,
  if(sum(events.duration_engaged) = 0, 0, 
    sum(events.duration_engaged) / 3600) AS hours_spent
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_content AS content
  ON events.content_id = content.content_id
WHERE content.technology IS NOT NULL
GROUP BY content.technology
ORDER BY content.technology
```

You can include a restriction in the `WHERE` clause if you would like to limit the results to a particular period.

### Time spent in Learn per team

If you want to see how different teams in your organization are taking advantage of our platform, we can modify the query above to look at the time spent per team in Learn content (assessments, courses, practices, and projects).

<pre class="language-sql"><code class="lang-sql"><strong>WITH team_data AS (
</strong>  SELECT
    user.user_id,
    team.team_name
  FROM data_connector_1234.dim_team AS team
  INNER JOIN data_connector_1234.bridge_user_team AS user
    ON team.team_id = user.team_id
  WHERE team.deleted_at IS NULL -- Team hasn't been deleted
    AND user.ended_at IS NULL -- User has not left team
)

SELECT
  teams.team_name,
  if(sum(events.duration_engaged) = 0, 0, 
    sum(events.duration_engaged) / 3600) AS hours_spent
FROM data_connector_1234.fact_learn_events AS events
INNER JOIN team_data AS teams
  ON events.user_id = teams.user_id
GROUP BY teams.team_name
ORDER BY teams.team_name
</code></pre>

{% hint style="info" %}
**On team membership and scope**

* Keep in mind that the query above only shows XP gained by the users currently in the respective team; this means that once someone leaves a team, the team's XP calculation would decrease.
* A single user can be a member of multiple teams, which means their XP is included in each team's total. Adding up these team-XP values will not match the total XP gained across all users.

*If you would like `time_spent` to remain allocated to the team even if a user has left the team, you can use the `bridge_user_team` table which has `started_at` and `ended_at` columns to calculate the period the user was part of a team.*
{% endhint %}

You can include a restriction in the `WHERE` clause of the bottom section if you want to limit the results to a particular period.

### Time spent in Learn per user

You may be interested in reviewing the time each of your organization's users has spent learning on our platform. The following query returns each user's time spent in Learn content (assessments, courses, practices, and projects).

```sql
SELECT
  user.email,
  CASE                                                                                                                                                                                                                                                      
    WHEN sum(events.duration_engaged) = 0 THEN 0
    ELSE sum(events.duration_engaged) / 3600
  END AS hours_spent
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_user AS user
  ON events.user_id = user.user_id
-- Exclude deleted users
WHERE user.email NOT LIKE('%@deleted.datacamp.com')
GROUP BY user.email
ORDER BY email
```

{% hint style="info" %}
DataLab, Certification, and other products are not included in the query above.
{% endhint %}

You can include a restriction in the `WHERE` clause if you would like to limit the results to a particular period.

### Time spent on AI Tutor courses

If you want to review how much time your users are spending specifically on AI Tutor courses, you can filter learning events by course variant. The following query returns the total time spent per user on AI Tutor courses.

```sql
SELECT                                                                                                                                                                                                                                                    
    user.email,   
    CASE                                                                                                                                                                                                                                                      
      WHEN sum(events.duration_engaged) = 0 THEN 0
      ELSE sum(events.duration_engaged) / 3600
    END AS hours_spent
  FROM data_connector_1234.fact_learn_events AS events                                                                                                                                                                                                      
  LEFT JOIN data_connector_1234.dim_user AS user
    ON events.user_id = user.user_id                                                                                                                                                                                                                        
  WHERE events.course_variant_id = 2
    -- Exclude deleted users                                                                                                                                                                                                                                
    AND user.email NOT LIKE('%@deleted.datacamp.com')
  GROUP BY user.email                                                                                                                                                                                                                                       
  ORDER BY hours_spent DESC
```

{% hint style="info" %}
To compare time spent across variants, you can replace course\_variant\_id = 2 with a GROUP BY on events.course\_variant\_id to see Datacamp and AI Tutor side by side. You can also break this down further by course by adding content.content\_title from dim\_content
{% endhint %}

You can include a restriction in the WHERE clause if you would like to limit the results to a particular period.

### XP earned by user

A different way to look at engagement is to measure [XP](/understanding-reports-with-clarity-definitions). You can track how active each of your organization's users has been on our platform with the query below that displays the total XP per user.

```sql
SELECT
  user.email,
  sum(events.xp_earned) AS total_xp
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_user AS user 
  ON events.user_id = user.user_id
WHERE events.event_name IN ('assessment_engaged', 
                    'course_engagement', 
                    'practice_engagement', 
                    'project_engagement', 
                    'b2b_onboarding_xp_boost', 
                    'alpa_onboarding')
  AND events.xp_earned > 0
  -- Exclude deleted users
  AND user.email NOT LIKE('%@deleted.datacamp.com')
GROUP BY user.email
ORDER BY total_xp DESC
```

{% hint style="warning" %}
In the query above, we specify the XP events to include. This is to avoid double counting XP in courses since the dataset contains `course_engagement` and `exercise_completed` events with a non-zero `xp_earned` value. Both contain XP gained from completing an exercise, so including both would lead to double counting XP earned in courses.

Please check the [Domain Gotchas](/integrating-our-data-into-your-tools-via-data-connector-2.0/domain-gotchas) section for more details.
{% endhint %}

You can include a restriction in the `WHERE` clause if you would like to limit the results to a particular period.

### Completed courses by user

It is often necessary to review learning activity on a more granular level. A common question is, "What courses have our users completed?" The query below returns all courses completed by users in your organization.

```sql
SELECT
  events.user_id,
  user.email,
  content.course_id,
  content.content_title,
  events.occurred_at AS completed_at
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_content AS content
  ON events.content_id = content.content_id
LEFT JOIN data_connector_1234.dim_user AS user
  ON events.user_id = user.user_id
WHERE events.event_name = 'course_completed'
  -- Exclude deleted users
  AND user.email NOT LIKE('%@deleted.datacamp.com')
ORDER BY user.email, completed_at DESC
```

You can include a restriction in the `WHERE` clause if you would like to limit the results to a particular period.

{% hint style="info" %}
The query above returns completions across all course variants. If a user has completed both the Datacamp and AI Tutor variant of a course, both completions will appear. To see which variant was completed, add `events.course_variant_id` to the `SELECT` clause. To count each course only once regardless of variant, wrap the query in a `GROUP BY` on `user_id` and `course_id`.
{% endhint %}

### Completed courses by user and variant

If you want to analyze course completions broken down by course variant (Datacamp vs AI Tutor), use the following query:

```sql
SELECT
  events.user_id,
  user.email,
  content.course_id,
  content.content_title,
  variant.course_variant_name,
  events.occurred_at AS completed_at
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_content AS content
  ON events.content_id = content.content_id
LEFT JOIN data_connector_1234.dim_course_variant AS variant
  ON events.course_variant_id = variant.course_variant_id
  AND content.content_id = variant.content_id
LEFT JOIN data_connector_1234.dim_user AS user
  ON events.user_id = user.user_id
WHERE events.event_name = 'course_completed'
  AND user.email NOT LIKE('%@deleted.datacamp.com')
ORDER BY user.email, completed_at DESC
```

This query joins `dim_course_variant` to display the variant name alongside each completion. You can filter to a specific variant by adding `AND events.course_variant_id = 1` (datacamp) or `AND events.course_variant_id = 2` (ai-tutor) to the `WHERE` clause.

### Completed assessments by user

Testing a user's skill level is an integral part of learning. If you want a report of all the assessments your organization's users have completed, the query below will tell you all complete assessments and their user, score, percentile, and completion date.

```sql
SELECT
  user.email,
  content.content_title AS assessment_title,
  events.assessment_score,
  events.assessment_percentile,
  events.assessment_knowledge_level,
  events.occurred_at AS completed_at
FROM data_connector_1234.fact_learn_events AS events
LEFT JOIN data_connector_1234.dim_content AS content
  ON events.content_id = content.content_id
LEFT JOIN data_connector_1234.dim_user AS user
  ON events.user_id = user.user_id
WHERE events.event_name = 'assessment_completed'
ORDER BY completed_at DESC
```

You can include a restriction in the `WHERE` clause if you would like to limit the results to a particular period.


# Queries to recreate key reports in the Groups tab

In the following pages, we provide examples of queries that replicate key in the reports in the **Groups** tab:

* [Dashboard](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/dashboard)
  * [Members who have earned XP](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/dashboard/members-who-have-earned-xp)
* [Reporting section](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section)
  * [Progress report](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/progress-report)
  * [Content Insights](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/content-insights)
  * [Assessments](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/assessments)
  * [Certification Insights](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/certification-insights)
  * [Time in Learn](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab/reporting-section/time-in-learn)


# Dashboard

To access the Dashboard, navigate to the left-hand panel (inside the **Groups** tab) and select **Dashboard** near the top.

<figure><img src="/files/dHxzg2bZ7kFzjJzl30wx" alt=""><figcaption></figcaption></figure>


# Members who have earned XP

<figure><img src="/files/LBBc0kB4pd4M5hjKBJYS" alt=""><figcaption></figcaption></figure>

To get the number of members who have earned XP, you can use the following query:

```sql
SELECT
  count(DISTINCT user_id) AS total_members
FROM data_connector_1234.fact_learn_events
WHERE event_name IN ('assessment_engaged', 
                    'course_engagement', 
                    'practice_engagement', 
                    'project_engagement', 
                    'b2b_onboarding_xp_boost', 
                    'alpa_onboarding')
  AND xp_earned > 0
```

The number below with the arrow is the number of new members in the last 30 days. You can calculate it by getting the number of members up until last month and subtracting it from the all-time total calculated above.

```sql
SELECT
  count(DISTINCT user_id) AS total_members
FROM data_connector_1234.fact_learn_events
WHERE event_name IN ('assessment_engaged', 
                    'course_engagement', 
                    'practice_engagement', 
                    'project_engagement', 
                    'b2b_onboarding_xp_boost', 
                    'alpa_onboarding')
  AND xp_earned > 0
  -- members last month
  AND date(occurred_at) <= date_add('day', -31, current_date)
```

{% hint style="warning" %}
In the queries above, we specify the XP events to include. This is to avoid double counting XP in courses since the dataset contains `course_engagement` and `exercise_completed` events with a non-zero `xp_earned` value. Both contain XP gained from completing an exercise, so including both would lead to double counting XP earned in courses.

Please check the [Domain Gotchas](/integrating-our-data-into-your-tools-via-data-connector-2.0/domain-gotchas) section for more details.
{% endhint %}


# Reporting section

To access the Reporting section, navigate to the left-hand panel (inside the **Groups** tab) and select **Reporting** in the **Insights & Analytics** section.

<figure><img src="/files/blTbRBn2UDQvgytWK9TJ" alt=""><figcaption></figcaption></figure>


# Progress report

<figure><img src="/files/3IPGNQTELyOOFBjhoSV2" alt=""><figcaption></figcaption></figure>

The Progress report shows a table with all active members in the organization. For each member who has earned XP, it will show the total number of completions on courses, course chapters, projects, practices, tracks, and XP earned.

The filters section allows you to modify the report. The query below replicates the Progress report using the default filters:

* All time
* Since the user was part of the group
* All license types
* All content types

```sql
WITH last_xp_earned AS (
        SELECT
          user_id,
          max(occurred_at) AS last_xp_earned_at 
        FROM data_connector_1234.fact_learn_events
        WHERE xp_earned > 0
        GROUP BY user_id
    ),

   -- The Progress report includes only current members
    current_users AS (
        SELECT user_id
        FROM data_connector_1234.bridge_user_group
        WHERE ended_at IS NULL
    ),

    /* We use a separate CTE for XP events to specify 
    which events to include. */
    xp_events AS (
        SELECT 
            events.user_id, 
            events.event_name, 
            events.occurred_at, 
            events.xp_earned
        FROM data_connector_1234.fact_learn_events AS events 
        -- only current members
        INNER JOIN current_users 
          ON events.user_id = current_users.user_id
        WHERE events.event_name IN ('assessment_engaged', 
                                'course_engagement', 
                                'practice_engagement', 
                                'project_engagement', 
                                'b2b_onboarding_xp_boost', 
                                'alpa_onboarding')
    ),

    completion_events AS (
        SELECT 
            events.user_id, 
            events.event_name, 
            events.occurred_at
        FROM data_connector_1234.fact_learn_events AS events 
        -- only current members
        INNER JOIN current_users 
            ON events.user_id = current_users.user_id
        WHERE events.event_name IN ('assessment_completed', 
                                'course_completed', 
                                'practice_completed', 
                                'project_completed', 
                                'chapter_completed', 
                                'track_completed')
    ),

    completions AS (
        SELECT 
            user_id,
            count_if(event_name = 'course_completed') AS nb_courses_compled,
            count_if(event_name = 'chapter_completed') AS nb_chapters_completed,
            count_if(event_name = 'assessment_completed') AS nb_assessments_completed,
            count_if(event_name = 'project_completed') AS nb_projects_completed,
            count_if(event_name = 'practice_completed') AS nb_practices_completed,
            count_if(event_name = 'track_completed') AS nb_tracks_completed
        FROM completion_events
        GROUP BY user_id

    ),
    xp_earned AS (
        SELECT
            user_id,
            coalesce(sum(xp_earned), 0) as total_xp_earned
        FROM xp_events
        GROUP BY user_id
    )

SELECT 
    user.email,
    coalesce(completions.nb_courses_compled, 0) AS nb_courses_compled,
    coalesce(completions.nb_chapters_completed, 0) AS nb_chapters_completed,
    coalesce(completions.nb_assessments_completed, 0) AS nb_assessments_completed,
    coalesce(completions.nb_projects_completed, 0) AS nb_projects_completed,
    coalesce(completions.nb_practices_completed, 0) AS nb_practices_completed,
    coalesce(completions.nb_tracks_completed, 0) AS nb_tracks_completed,
    lxe.last_xp_earned_at,
    coalesce(xpe.total_xp_earned, 0) AS total_xp_earned
FROM completions 
LEFT JOIN last_xp_earned AS lxe 
    ON completions.user_id = lxe.user_id 
LEFT JOIN xp_earned AS xpe 
    ON completions.user_id = xpe.user_id
LEFT JOIN data_connector_1234.dim_user AS user
    ON completions.user_id = user.user_id
ORDER BY user.email
```


# Content insights

The following queries match what is shown on selected reports in the Content tab (inside the Reporting section of the Groups tab):

* [XP earned by technology](#xp-earned-by-technology)
* [Courses activity](#courses-activity)
* [Projects activity](#projects-activity)
* [Tracks activity](#tracks-activity)

### XP earned by technology

<figure><img src="/files/dk9M8k8IAjRSXO4rqRcg" alt=""><figcaption></figcaption></figure>

To calculate XP earned by the technology (all time), you can use the following query:

```sql
SELECT 
    content.technology, 
    sum(events.xp_earned) AS total_xp
FROM data_connector_1234.fact_learn_events AS events 
INNER JOIN data_connector_1234.dim_content AS content 
  ON events.content_id = content.content_id
-- For legacy reasons, the report only shows course XP
WHERE events.event_name = 'course_engagement'
GROUP BY content.technology
ORDER BY total_xp DESC
```

{% hint style="info" %}
The query above only includes XP earned in courses. This matches the report in the **Groups** tab, which is restricted to course XP for legacy reasons.

You can modify the WHERE clause to get XP across all content types. Please check the [Domain Gotchas](/integrating-our-data-into-your-tools-via-data-connector-2.0/domain-gotchas) section for potential pitfalls when calculating XP.
{% endhint %}

### Courses Activity

<figure><img src="/files/9PR94HUEqCdbjlQMmv7f" alt=""><figcaption></figcaption></figure>

To replicate the Courses Activity table, you can use the following query:

```sql
WITH course_events AS (
        SELECT 
            content_id,
            event_name
        FROM data_connector_1234.fact_learn_events
        WHERE event_name IN ('course_started', 'course_completed')
    ),

    course_activity_counts AS (
        SELECT 
            content_id,
            count_if(event_name = 'course_started') AS starts,
            count_if(event_name = 'course_completed') AS completions
        FROM course_events
        GROUP BY content_id
    )

SELECT 
    content.content_title AS course,
    content.topic,
    content.technology,
    counts.starts,
    counts.completions,
    if(counts.starts = 0, 1, 
        round(100 * counts.completions / counts.starts, 2)) AS completion_rate
FROM course_activity_counts AS counts
INNER JOIN data_connector_1234.dim_content AS content
    ON counts.content_id = content.content_id
ORDER BY completions DESC
```

{% hint style="info" %}
When counting content completions over a given period, regardless of when the content start took place, the metric can exceed 100%.

In technical terms, it is a velocity metric, not a cohort metric.
{% endhint %}

### Projects Activity

<figure><img src="/files/QasDHqZ2TgAvLGcAMVKQ" alt=""><figcaption></figcaption></figure>

To replicate the Projects Activity table, you can use the following query:

```sql
WITH project_events AS (
        SELECT 
            content_id,
            event_name
        FROM data_connector_1234.fact_learn_events
        WHERE event_name IN ('project_started', 'project_completed')
    ),

    project_activity_counts AS (
        SELECT 
            content_id,
            count_if(event_name = 'project_started') AS starts,
            count_if(event_name = 'project_completed') AS completions
        FROM project_events
        GROUP BY content_id
    )

SELECT 
    content.content_title AS project,
    content.technology,
    counts.starts,
    counts.completions,
    if(counts.starts = 0, 1, 
        round(100 * counts.completions / counts.starts, 2)) AS completion_rate
FROM project_activity_counts AS counts
INNER JOIN data_connector_1234.dim_content AS content
    ON counts.content_id = content.content_id
ORDER BY completions DESC
```

{% hint style="info" %}
When counting content completions over a given period, regardless of when the content start took place, the metric can exceed 100%.

In technical terms, it is a velocity metric, not a cohort metric.
{% endhint %}

### Tracks Activity

<figure><img src="/files/P4zGSRn55OIQWOzTwEdx" alt=""><figcaption></figcaption></figure>

To replicate the Tracks Activity table, you can use the following query:

```sql
WITH track_names AS (
        SELECT DISTINCT
            track_id,
            /* Every time a particular track is updated, it gets a new track_version_id 
            while keeping the same track_id. Below, we keep the latest track_title
            and track_technology for each track_id */
            first_value(trim(track_title)) 
                OVER(PARTITION BY track_id 
                    ORDER BY track_version_id DESC) AS track_title,
            first_value(track_technology) 
                OVER(PARTITION BY track_id                            
                    ORDER BY track_version_id DESC) AS track_technology
        FROM data_connector_1234.dim_track
    ),
    
    track_events AS (
        SELECT 
            track_version_id,
            event_name
        FROM data_connector_1234.fact_learn_events
        WHERE event_name IN ('track_started', 'track_completed')
    ),

    track_activity_counts AS (
        SELECT 
            track_version_id,
            count_if(event_name = 'track_started') AS enrollments,
            count_if(event_name = 'track_completed') AS completions
        FROM track_events
        GROUP BY track_version_id
    ),

    track_activity_metrics AS (
        SELECT 
            track.track_id,
            track.track_category as track_type,
            sum(counts.enrollments) as enrollments,
            sum(counts.completions) as completions,
            if(sum(counts.enrollments) = 0, 1, 
                round(100* sum(counts.completions) / sum(counts.enrollments), 2)) AS completion_rate
        FROM track_activity_counts AS counts
        INNER JOIN data_connector_1234.dim_track AS track
            ON counts.track_version_id = track.track_version_id
        GROUP BY track.track_id, track.track_category
    )

SELECT
    /* The line below is to format the track names the 
    same way they appear in the Tracks Activity report */
    if(tracks.track_technology IS NULL, 
        tracks.track_title, 
        concat(tracks.track_title, ' (', tracks.track_technology, ')')
      ) AS track,
    metrics.track_type,
    metrics.enrollments,
    metrics.completions,
    metrics.completion_rate
FROM track_activity_metrics AS metrics
LEFT JOIN track_names AS tracks
    ON metrics.track_id = tracks.track_id
ORDER BY completions DESC
```

{% hint style="info" %}
When counting content completions over a given period, regardless of when the content start took place, the metric can exceed 100%.

In technical terms, it is a velocity metric, not a cohort metric.
{% endhint %}


# Assessments

<figure><img src="/files/JSDTaotn3xx1kodSYawI" alt=""><figcaption></figcaption></figure>

To replicate the Assessments Activity table, you can use the following query:

```sql
WITH assessment_completions AS (
    SELECT 
      content_id, 
      user_id, 
      assessment_score, 
      occurred_at
    FROM data_connector_1234.fact_learn_events
    WHERE event_name = 'assessment_completed'
),

assessment_completions_best_score AS (
    SELECT 
        user_id,
        content_id,
        max(assessment_score) AS assessment_score
    FROM assessment_completions
    GROUP BY user_id, content_id
),

assessment_completions_first_score AS (
    SELECT
        user_id,
        content_id,
        first_value(assessment_score) 
            OVER(PARTITION BY user_id, content_id 
                ORDER BY occurred_at ASC) AS assessment_first_score
    FROM assessment_completions
),

score_increases AS (
    SELECT
        best_score.content_id,
        coalesce(count(DISTINCT best_score.user_id), 0) AS nb_unique_improved_members
    FROM assessment_completions_best_score AS best_score
    INNER JOIN assessment_completions_first_score AS first_score 
        ON best_score.user_id = first_score.user_id
            AND best_score.content_id = first_score.content_id
    WHERE best_score.assessment_score > first_score.assessment_first_score
    GROUP BY best_score.content_id
),

median_scores AS (
    SELECT 
        content_id,
        approx_percentile(assessment_score, 0.6) AS median_score
    FROM assessment_completions
    GROUP BY content_id
),

metrics_without_medians AS (
    SELECT 
        completions.content_id,
        count(*) AS nb_assessments_completed,
        count(DISTINCT completions.user_id) AS nb_unique_member_completions,
        approx_percentile(completions.assessment_score, 0.5) AS median_score,
        approx_percentile(best_score.assessment_score, 0.5) AS median_best_score
    FROM assessment_completions AS completions
    INNER JOIN assessment_completions_best_score AS best_score 
        ON completions.user_id = best_score.user_id 
            AND completions.content_id = best_score.content_id
    GROUP BY completions.content_id
)

SELECT 
    coalesce(content.content_title, 'Deprecated Assessment') AS assessment,
    coalesce(mwm.nb_assessments_completed, 0) AS completions,
    coalesce(mwm.nb_unique_member_completions, 0) AS members,
    coalesce(sci.nb_unique_improved_members, 0) AS improved_members,
    coalesce(mwm.median_score, 0) AS median_score
FROM metrics_without_medians AS mwm 
LEFT JOIN score_increases AS sci 
    ON mwm.content_id = sci.content_id
LEFT JOIN median_scores AS ms
    ON ms.content_id = mwm.content_id
LEFT JOIN data_connector_1234.dim_content AS content
    ON content.content_id = mwm.content_id 
        AND content.assessment_active = true
ORDER BY completions DESC 
```


# Certification Insights

<figure><img src="/files/pmOFojaKs66OxFu5VkWq" alt=""><figcaption></figcaption></figure>

To replicate the Certification Activity table, you can use the following query:

```sql
WITH current_members AS (
      SELECT
          user_id
      FROM data_connector_1234.bridge_user_group
      WHERE ended_at IS NULL
    ),

    all_events AS (
      SELECT
          user_id,
          certification_id,
          event_name,
          occurred_at,
          attempt_id
      FROM data_connector_1234.fact_certification_events
      WHERE event_name IN ('certification_registered', 'certification_granted', 'certification_failed')
    ),

    registration_events AS (
      SELECT 
          user_id,
          certification_id,
          event_name,
          occurred_at,
          attempt_id
      FROM all_events
      WHERE event_name = 'certification_registered'
    ),

    granted_events AS (
      SELECT 
          user_id,
          certification_id,
          event_name,
          occurred_at,
          attempt_id
      FROM all_events
      WHERE event_name = 'certification_granted'
    ),

    failed_events AS (
        SELECT 
            user_id,
            certification_id,
            event_name,
            occurred_at,
            attempt_id
        FROM all_events
        WHERE event_name = 'certification_failed'
    ),

    all_events_with_status AS (
        SELECT
            coalesce(ge.user_id, re.user_id) AS user_id,
            coalesce(ge.certification_id, re.certification_id) AS certification_id,
            re.occurred_at AS started_at,
            ge.occurred_at AS ended_at,
            'granted' AS status
        FROM granted_events AS ge
        LEFT JOIN registration_events AS re 
            ON ge.attempt_id = re.attempt_id

        UNION ALL 

        SELECT                
            coalesce(fe.user_id, re.user_id) AS user_id,
            coalesce(fe.certification_id, re.certification_id) AS certification_id,
            re.occurred_at AS started_at,
            fe.occurred_at AS ended_at,
            'failed' AS status
        FROM failed_events AS fe
        LEFT JOIN registration_events AS re 
            ON fe.attempt_id = re.attempt_id

        UNION ALL 

        -- Everything else is considered as 'in progress'
        SELECT
            re.user_id AS user_id,
            re.certification_id AS certification_id,
            re.occurred_at AS started_at,
            NULL AS ended_at,
            'in_progress' AS status
        FROM registration_events AS re
        LEFT JOIN granted_events AS ge 
            ON re.attempt_id = ge.attempt_id
        LEFT JOIN failed_events AS fe 
            ON re.attempt_id = fe.attempt_id
        WHERE ge.user_id IS NULL 
            AND fe.user_id IS NULL
    )

SELECT 
    user.email,
    certification.certification_name,
    events.started_at,
    events.ended_at,
    events.status
FROM all_events_with_status AS events
INNER JOIN current_members AS members 
    ON events.user_id = members.user_id
LEFT JOIN data_connector_1234.dim_user AS user
    ON events.user_id = user.user_id
LEFT JOIN data_connector_1234.dim_certification AS certification
    ON events.certification_id = certification.certification_id
ORDER BY user.email
```


# Time in Learn

<figure><img src="/files/zwuJaUSGYo7mCOZjsG6Q" alt=""><figcaption></figcaption></figure>

To replicate the Time spent per month in all content types chart, you can use the following query:

```sql
SELECT
    date_trunc('month', occurred_at) as month,
    course_variant_id, 
    if(sum(duration_engaged) = 0, 0, sum(duration_engaged) / 3600) AS total_hours_on_learn
FROM data_connector_1234.fact_learn_events
-- The chart includes the current month and 11 months before
WHERE date(occurred_at) between
    date_trunc('month', date_add('month', -11, current_date)) and current_date
GROUP BY 1,2
ORDER BY 1,2

```


# Domain Gotchas

In this section, we'll explore some common gotchas and pitfalls that can arise when working with Data Connector 2.0. These pitfalls can lead to inaccurate reports if not considered.

### Calculating XP

The correct way to count XP is not to simply do a SUM on the `xp_earned` column of the `fact_learn_events` table, as this will end up in double counting. For example, for course XP, we have both `course_engagement` and `exercise_completed` events with a non-null `xp_earned` value; both contain XP gained from completing an exercise, so including both would lead to double counting XP earned in courses.

Starting from December 2025, certification completions also grant XP, and these events must be included in the total XP calculation.

To correctly count XP and have it match what is reported in the Groups tab, only use the following events:

* `assessment_engaged`
* `certification_granted` (`fact_certification_events`)
* `course_engagement`
* `practice_engagement`
* `project_engagement`
* `b2b_onboarding_xp_boost`
* `alpa_onboarding`

{% hint style="warning" %}
The sum of a user's XP in this table should not be expected to equal the total XP they have on the platform. This is because, in the Data Connector, admins can only see the activity that a user completed while they were part of the group. Any XP earned outside of the group—such as before joining, or after leaving—will not be reflected in this dataset.
{% endhint %}

### Missing Content Items in dim\_content

Not all events in the `fact_learn_events` table will have a corresponding content item in `dim_content`. This is because some content items may be hard deleted in our system, meaning they are permanently removed rather than being soft deleted or archived. As a result, any events tied to these deleted content items will no longer have a valid `content_id` reference in `dim_content`.

Despite this limitation, we still retain these events in the `fact_learn_events` table. These events represent real user activity, including time spent and XP earned, and are valuable for tracking engagement. When analyzing data, be aware that some events may not join to `dim_content`, but they remain important for understanding overall user behavior.

### Course Variant

#### **Duplicate events when a course has multiple variants**

With the introduction of course variants (**Datacamp** and **AI Tutor**), a user can now start and complete both variants of the same course. This means:

* A `course_completed` event can appear **twice** for the same user and course, once for each variant.
* The same applies to `course_started`, `chapter_started`, `chapter_completed`, and engagement events.

If you are counting course completions, starts, or time spent, decide whether you want to measure **per variant** or **per course**:

* **Per variant:** No changes needed, each variant's events are already separate rows. You can add `course_variant_id` to your `GROUP BY` or `SELECT` clause for clarity.
* **Per course (deduplicated):** Filter to a single variant (e.g., `WHERE course_variant_id = 1` for Datacamp only) or deduplicate using `DISTINCT` on the combination of `user_id` and `course_id`.

#### AI Tutor chapters are new records in dim\_content

AI Tutor courses introduce new chapter records in `dim_content`. These chapters:

* Have their own unique `content_id` and `chapter_id` values
* Are associated with `course_variant_id = 2`
* Share the same `course_id` as the Datacamp chapters of the same course

If you aggregate metrics at the chapter level (e.g., chapters started, chapters completed), your totals will now include both Datacamp and AI Tutor chapters. To analyze only one variant, filter using `course_variant_id`:

```sql
-- Datacamp chapters only
WHERE content_type = 'chapter' AND course_variant_id = 1

-- AI Tutor chapters only
WHERE content_type = 'chapter' AND course_variant_id = 2
```

#### `chapter_id` is now a string

The `chapter_id` column in `dim_content` has been changed from an integer to a string type. This is a **breaking change** for existing queries that:

* Cast `chapter_id` to an integer, e.g., `CAST(chapter_id AS INT)` or `CAST(chapter_id AS BIGINT)`
* Use integer comparison operators on `chapter_id`
* Join `chapter_id` to another table or column that expects an integer type

**How to fix:** Treat `chapter_id` as a string in all queries. Use string comparison operators and update any downstream schemas or BI tool column types accordingly.


# Getting started with Data Connector 2.0

In this section, we explain how to enable and connect to Data Connector 2.0:

* [Enable Data Connector](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/enable-data-connector-2.0)
* [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)
* [Storing your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/storing-your-credentials)


# Enable Data Connector 2.0

Enabling Data Connector 2.0 is an easy 3-step process.

**Step 1:** Navigate to the Reporting section (on the left-hand panel) and select the **Data Connector** tab at the top of the page. If the Data Connector tab is absent, speak to your Customer Success Manager to enable access.

<figure><img src="/files/w9NfNRZyJTDb2PGbKcM5" alt=""><figcaption></figcaption></figure>

**Step 2:** Move the selector to the right, to the activated position. This will enable Data Connector and allow you to access the S3 bucket containing your data exports or connect to the data using Amazon Athena.

<figure><img src="/files/bLCG2EfJSd4YQKwa5SsA" alt=""><figcaption></figcaption></figure>

**Step 3:** To see your connection credentials, click **View Details**.

{% hint style="danger" %}
Please remember that it can take up to 24 hours for your data to appear in the S3 bucket. If no data is available 24 hours after enabling the Data Connector, please get in touch with your Customer Success Manager.
{% endhint %}

After completing these steps, you have successfully activated Data Connector 2.0. Your learning data will be exported to your S3 bucket daily.

<figure><img src="/files/CxTq8krknA1mc9Tk56jQ" alt=""><figcaption></figcaption></figure>


# Your credentials

{% hint style="info" %}
To access your credentials, you'll first need to enable Data Connector 2.0. Check out [our guide](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/enable-data-connector-2.0) to learn how.
{% endhint %}

**Step 1:** Navigate to the Reporting page in the left-hand menu and select the **Data Connector** tab at the top.

**Step 2:** Click **View Details** on the **Data Connector** card.

<figure><img src="/files/CxTq8krknA1mc9Tk56jQ" alt=""><figcaption></figcaption></figure>

**Step 3:** View your credentials in the **View Details** dialog.

| Field           | Description                                                                                                                | Example                                    |
| --------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| AWS Region      | <p>The location in the world where the Amazon data center cluster is located.</p><p>This is where your data is stored.</p> | `us-east-1`                                |
| S3 Bucket Name  | The name of the storage resource containing your data.                                                                     | `data-connector-v2-99999-production`       |
| Access Key      | The username to access the S3 bucket. It consists of 20 upper case letters.                                                | `QOXGBQHVDLYJPCFFKOAE`                     |
| Secret Password | The password to access the S3 bucket. It consists of 40 alphanumeric characters.                                           | `HUUOTPJN/JKNLWIYCKPQPDDOXAISQSTRSVDXARUD` |

{% hint style="warning" %}
If you are using an Amazon Athena library, you might be required to enter a **staging or output directory**. This directory in the S3 bucket is writable by the Athena library and is used to store output files for your queries.

Use one of the following values for your output directory, depending on which tool you are using:

* <mark style="color:orange;">`s3://{YOUR_S3_BUCKET_NAME}/tmp-tableau`</mark> for Tableau
* <mark style="color:orange;">`s3://{YOUR_S3_BUCKET_NAME}/tmp-powerbi`</mark> for Power BI
* <mark style="color:orange;">`s3://{YOUR_S3_BUCKET_NAME}/tmp-datalab`</mark> for DataLab

Or, just use <mark style="color:orange;">`s3://{YOUR_S3_BUCKET_NAME}/tmp`</mark> if your tool is none of the above.
{% endhint %}


# Storing your credentials

Your credentials should all be treated as sensitive information as they allow access to your learning data, which includes personally identifiable information. That means that for security reasons, rather than including the credentials in your application code, it is better to store them securely (such as environment variables).

This reduces the risk of the credentials accidentally being viewed by someone else or checked into an online code repository.

```
AWS_BUCKET=data-connector-v2-123456-production 
AWS_ACCESS_KEY_ID="XGTWTIPVHZXSOZFGDOAL" 
AWS_SECRET_ACCESS_KEY="UbCtK9sUDmWXB5/cRDwwckoB6PYGhE/vIdkhg3oV"
AWS_DEFAULT_REGION=us-east-1
```

{% hint style="info" %}
Here are guides to set environment variables on different platforms.

* [Windows](https://www.computerhope.com/issues/ch000549.htm)
* [MacOS or Linux](https://www.doppler.com/blog/how-to-set-environment-variables-in-linux-and-mac)
  {% endhint %}


# Using Data Connector 2.0

Data Connector 2.0 exports files in CSV format to an S3 bucket. You can use these files in two ways, depending on your needs and how your organization approaches reporting.

### [Integrating with your BI tools](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools)

You can report on your data using your own BI tools or other reporting tools using an ODBC connection. Most tools require you to install the Amazon Athena ODBC driver or have integrated plugins to do this.

* We have guides for the following BI tools:
  * [Microsoft Power BI](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi)
  * [Tableau](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/tableau)
  * [Looker](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/looker)
  * [DataLab](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/datalab)

### [Downloading your data](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data)

Alternatively, you can download the raw data files. This is useful if you wish to load all your learning data into your own data lake. This usually means you have a data lake that already contains data from other sources and want to include your DataCamp learning data, too.

* We have guides for the following tools:
  * [S3 Browser (Windows)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/s3-browser-windows)
  * [3Hub (Mac)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/cyberduck-mac-or-windows)
  * [AWS CLI (Linux)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/aws-cli-linux)


# Integrating with your BI tools

Data Connector 2.0 allows seamless integration with your data infrastructure for those requiring more advanced reporting capabilities.

* This section covers how to set up the integrations with the following tools:
  * [Microsoft Power BI](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi)
  * [Tableau](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/tableau)
  * [Looker](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/looker)
  * [DataLab](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/datalab)


# Microsoft Power BI

With DataCamp Data Connector 2.0, it's easy to analyze your data in Microsoft Power BI. All you need to do is set up a connection using the PowerBI Athena Connector and configure it using the [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) you can retrieve in the Groups tab.

{% hint style="info" %}
This guide assumes you are using Power BI Desktop on Windows
{% endhint %}

Complete these two steps to view your learning data in Power BI.

1. [Set up an ODBC Data Source](#set-up-an-odbc-data-source)
2. [Set up the Power BI Athena Connector](#set-up-the-power-bi-athena-connector)

Start with our plug-and-play Power BI template

* [Power BI Dashboard Template](#power-bi-dashboard-template)

### Set up an ODBC Data Source

First, you must install the necessary drivers and configure a Data Source in Windows.

**Step 1:** Download and install the ODBC driver

Go to <https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html> and download & install the v1 driver for your operating system. (Remember which version (32 or 64 bit) you chose!)

**Step 2:** Configure your ODBC Data Source

{% hint style="info" %}
Make sure you have collected your credentials as described in [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).
{% endhint %}

1. Open the **ODBC Data Sources** application on your Windows machine (choose the version that aligns with the driver you installed, either 32 or 64 bit)
2. Select the **Drivers** tab and verify there is a **Simba Athena ODBC Drive**r entry in the list; if there isn't, you haven't installed the driver properly
3. Select the **System DSN** tab
4. Click the **Add** button
5. Select **Simba Athena ODBC driver** as Data Source
6. The **Simba Athena ODBC Driver DSN Setup** dialog will now open.\
   Enter the following data on the **Simba Setup** dialog:
   1. Data Source Name: Free to choose (e.g., `DataCamp Data Connector`)\
      \&#xNAN;*Choose an easy name here; you'll need this to set up your connection in Power BI*
   2. Description: optional; you can leave it blank
   3. AWS Region: the **AWS** **Region** from your credentials
   4. Catalog: AwsDataCatalog
   5. Schema: default
   6. Workgroup: primary
   7. Metadata Retrieval Method: Auto
   8. S3 Output location: `s3://{bucketname}/tmp-powerbi` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your credentials*
   9. Encryption Options: NOT\_SET
   10. Endpoint Override: empty
   11. Streaming Endpoint Override: empty
7. Click **Authentication Options** (don't close the dialog yet!)
   1. Authentication Type: IAM Credentials
   2. Username: the **AWS** **Access Key ID** from your credentials
   3. Password: the **AWS** **Secret Access Key** from your credentials
   4. Click the **OK** button
8. Click **Test**
9. If everything is configured correctly, this should result in a "SUCCESS" message.
10. Click **OK**

The list of items under the **System DSN** tab should now contain your newly created Data Source.

You can close the ODBC application now and start Power BI.

🎉 Your Data Source is successfully set up! Let's move on to the next part.

### Set up the Power BI Athena Connector

{% hint style="warning" %}
Make sure you restart Power BI if you had it running before you set up your Data Source.
{% endhint %}

In Power BI Desktop, click the **Get Data** button on the Home ribbon.

The dialog shows you all available Data Sources. Use the search field to find the **Amazon Athena** option and click the **Connect** button.

{% hint style="info" %}
If you do not see an Amazon Athena option, then you are likely using an outdated version of PowerBI. Please update your PowerBI before proceeding.
{% endhint %}

<div align="left"><img src="/files/bbIUsVFqNVew3TLkqgee" alt=""></div>

In the **Amazon Athena** dialog that appears, enter the name of the ODBC connection you created before. (Our example uses "DataCamp Data Connector")

<div align="left"><img src="/files/qjiMRn2JlnrYhnoNsB2H" alt=""></div>

Choose which Connectivity mode you want to use:

* **Import** loads the data into your local instance of Power BI, meaning you'll have a snapshot of the data locally. This is the best performing option.
* **DirectQuery** will query the live service, meaning you'll have the most up-to-date data daily without needing to import it again. This is the slower option.

{% hint style="info" %}
With **import connectivity mode**, adjusting the **Row to fetch per block** setting can help speed up the overall update time.

You can find this option under:

**ODBC > System DSN >&#x20;*****Your DataCamp Data Connector*****&#x20;> Configure > Advanced Options > Row to fetch per block.**

Try increasing the value gradually, by 10,000 at a time.
{% endhint %}

Click the **OK** button.

Power BI will now ask you how to Authenticate:

Choose the **Use Data Source Configuration** tab on the left and then click **Connect**.

<figure><img src="/files/EaK1AzgN0jmolGuY8XY8" alt=""><figcaption></figcaption></figure>

After a few moments, the Navigator panel will show your catalog, databases, and tables. Open the **AwsDataCatalog** node, wait for the data to load, and then open the data\_connector node. This will show you all the tables available in our Data Connector.

{% hint style="info" %}
Want to know what data all the tables contain? Learn more by exploring our [Data Model](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model).
{% endhint %}

Choose the tables you wish to use and click the **Load** button.

<figure><img src="/files/A1ZT47AB41s7CRpy1fCp" alt=""><figcaption></figcaption></figure>

This will take some time to complete, but after it is finished, you will have all the data from the Data Connector right at your fingertips in Power BI.

<figure><img src="/files/bEF1JweqtOGZxJxedVHS" alt=""><figcaption></figcaption></figure>

## Power BI Dashboard Template

The DataCamp Data Connector 2.0 Power BI Template is an out‑of‑the‑box, plug‑and‑play dashboard that sits on top of the Data Connector 2.0 data model and helps you go from connection to insights in minutes—no modeling required.

{% hint style="warning" %}
**Power BI Desktop:** This workflow assumes you’re using Power BI Desktop on Windows. Complete the previous Power BI [configuration](#set-up-an-odbc-data-source) steps before moving on.
{% endhint %}

{% hint style="warning" %}
**Power BI Service refresh** requires an **On‑premises data gateway**. To refresh in the Service (scheduled or on‑demand), install and configure a gateway and use the **Amazon Athena** connector with the same DSN you configure on Desktop. [AWS Documentation+2Microsoft Learn+2](https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc-and-power-bi.html?utm_source=chatgpt.com)
{% endhint %}

### Download the Power BI Template

Download the **DCDC 2.0 Power BI Template (.pbit)** from the Data Connector area of your [Enterprise reporting](https://app.datacamp.com/groups).

Login in Enterprise reporting > Reporting > Data Connector

<figure><img src="/files/9GFszbnWwRbdI4LJSwhT" alt=""><figcaption></figcaption></figure>

While you’re in **Reporting > Data Connector**, click **Your Credentials** to retrieve your credentials (Region, S3 bucket, Access Key, etc...). You’ll need them to configure the template on the first run.

### Setup the Power BI Template

Before you start:

1. Make sure that Data Connector 2.0 is [enabled](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/enable-data-connector-2.0) and collect your credentials.
2. Install the [Athena ODBC](#set-up-an-odbc-data-source) v1 driver on Windows.

Now you are ready to open the template and to proceed with the setup:

**Step 1:** Open the **DCDC 2.0 Power BI Template** .pbit file.

**Step 2:** On first run, the following dialog window will show and you have to prompt three parameters.

<figure><img src="/files/rzMUbF7sc2ZIL4c8cHlq" alt="" width="563"><figcaption></figcaption></figure>

* **pDSN**: The connection name you set in the **Simba Athena ODBC Driver DSN** setup (step 6.a). In our example: **“DataCamp Data Connector.”**
* **pCatalog:** Fixed value equal to **"AwsDataCatalog"**
* **pSchema:** `data_connector_123456`. Find the bucket number in your [**Data Connector 2.0 credentials**](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) under **S3 Bucket Name. Do not copy the full bucket name, you only need the bucket number** (e.g., `data_connector_123456`).

<figure><img src="/files/dFoBBSi9bNJIYzmGFojG" alt="" width="375"><figcaption></figcaption></figure>

**Step 3**: After you’ve entered all parameters, click **Load**.

<figure><img src="/files/sDSrNjtwuXazD0YQm3EN" alt="" width="563"><figcaption></figcaption></figure>

The template will initialize and **refresh** the visuals. For Import mode this may take a few minutes on first load. (You can tune refresh with the “Row to fetch per block” setting noted above.)

### How to use the Power BI Template

Start with the pre-built pages in the template (Snapshot, Engagement, Progress, Leaderboard). They’re wired to the Data Connector 2.0 data model and display your members’ learning activity.

In the top-right corner, use the **time** and **team** slicers to choose your period of interest and drill from Group → Team seamlessly. These slicers are available across all four sections.

**Dashboard Template Preview:**

<figure><img src="/files/wIPnhTb622VDOPShG8UP" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Keep the starter pages intact if you plan to build more.
{% endhint %}

Want to extend? Add a new page, bring in additional Data Connector 2.0 tables (facts, dimensions), and use the existing measures as patterns. If you need table‑by‑table detail, see [**Explore the data model**](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model).

### Sections explanation

* **Snapshot**: A configurable one-page KPI board for quick executive updates. Includes an adoption funnel and six KPI tiles with trend charts. Designed to be bookmark-screenshot-friendly.\
  Each tile includes a Year-over-Year (YoY) comparison for the selected period—shown both as an aggregate and as a trend over time (dark line).
* **Engagement**: Answers “Are people actually using the platform?” Track Monthly and Weekly Active Users to gauge activity and stickiness, compare new vs. returning users to understand adoption patterns, and analyze engagement by content type. Select the engagement metric of interest to focus the view.
* **Progress**: Dive deeper at the content level. Select a content type to visualize starts and completions over time, completion rate, and the top 10 most-started and most-completed items.
* **Leaderboard**: Showcase company achievements and key averages/rates, and identify your learning champions with the leaderboard table.
* **History:** A simple, all-time view that highlights cumulative metrics since your subscription began, designed to give an immediate read on achievements and learning delivered.

### How to export data

You can quickly export data from visuals for further analysis.

* **Power BI Desktop:** From any visual, select **More options (…) → Export data**. Desktop exports **summarized data only** to **.csv** (filters are respected).
* **Power BI Service:** From any visual, choose **More options (…) → Export data** and pick your granularity: **Summarized** or **Underlying.**

For a step-by-step walkthrough with screenshots, see DataCamp’s guide: [How to export Power BI data to Excel](https://www.datacamp.com/blog/how-to-export-power-bi-data-to-excel).

### Glossary

Not familiar with a term or unsure how to interpret a metric? Check our [**reporting glossary**](https://enterprise-docs.datacamp.com/understanding-reports-with-clarity-definitions) for clear and consistent definitions.

{% hint style="info" %}
In the template, hover the **(?) helper tooltip** on charts and KPI tiles for quick metric descriptions.
{% endhint %}

## Resources

This is a list of official resources related to Power BI and Athena.

* [Official Microsoft Power BI site](https://www.microsoft.com/en-us/power-platform/products/power-bi/)
* [Using the Amazon Athena Power BI connector](https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc-and-power-bi.html)
* [Connecting to Amazon Athena with ODBC](https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html#connect-with-odbc-driver-documentation)
* [Troubleshooting AWS Athena Connections](https://knowledge.alteryx.com/index/s/article/Troubleshooting-AWS-Athena-Connections-1583461556915)


# Tableau

DataCamp Data Connector makes it easy to analyze your data in Tableau. All you need to do is set up a connection using the Tableau Athena Connector and configure it using configure it using the [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) you can retrieve in the Groups tab.

Complete these two steps to view your learning data in Power BI.

1. [Install the ODBC driver](#install-the-odbc-driver)
2. [Set up the Athena connector in Tableau](#set-up-the-athena-connector-in-tableau)

### Install the ODBC driver

Download and install the Tableau Amazon Athena driver. You can download the official driver from the Tableau website: <https://www.tableau.com/support/drivers>

{% hint style="warning" %}
If you are having trouble getting the driver installed as described on the Tableau website, try placing the `.jar` file in the `~Users/{yourusername}/Library/Tableau/Drivers` where `{yourusername}` is the name of your profile on your workstation.
{% endhint %}

### Set up the Athena connector in Tableau

**Step 1:** Quit and re-open Tableau

**Step 2:** Set up the connection in Tableau

{% hint style="info" %}
First, make sure you have collected your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).
{% endhint %}

Under **Connect**, select **Amazon Athena** and enter the following data:

1. Server name: `athena.us-east-1.amazonaws.com`
2. Port: `443`
3. S3 Staging directory: `s3://{bucketname}/tmp-tableau` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your* [*credentials*](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)
4. AWS access Key ID: the **AWS Access Key ID** from your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)
5. AWS secret access key: the **AWS Secret Access Key** from your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)

You can leave the **Initial SQL** tab untouched

![](/files/M5yJXXcn5MpLpejdnipD)

Click the **Sign in** button

## Resources

* [Official Tableau website](https://www.tableau.com/)
* [Official Tableau Athena Connector support page](https://help.tableau.com/current/pro/desktop/en-us/examples_amazonathena.htm)


# Looker

DataCamp's Data Connector 2.0 makes it easy to analyze your data in Looker. All you need to do is set up a connection using the Looker Athena Connector and configure it using the [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) you can retrieve in the **Groups** tab.

### Set up the Athena connector in Looker

{% hint style="info" %}
First, make sure you have your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).
{% endhint %}

In the **Admin** section of Looker, select **Connections**, then **Add Connection**, and enter the following data:

1. Name: Specify the name of the connection. Free to choose (e.g., `DataCamp Data Connector`)
2. Dialect: **Amazon Athena**
3. Host: `athena.us-east-1.amazonaws.com`
4. Port: `443`
5. Database: Specify the default database that you would like modeled
6. Username: The **AWS Access Key ID** from your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)
7. Password: The **AWS Secret Access Key** from your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials)
8. Temp Database: `s3://{bucketname}/tmp/looker` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your credentials*

To save these settings, click **Connect.**

<figure><img src="/files/2cC0eVAPjEhnSKT4vFOo" alt=""><figcaption></figcaption></figure>

## Resources

* [Official Looker guide](https://cloud.google.com/looker/docs/intro?hl=en)
* [Official Amazon Athena Looker documentation](https://cloud.google.com/looker/docs/db-config-amazon-athena)


# DataLab

[DataLab](https://www.datacamp.com/datalab) is a cloud-based notebook built by DataCamp that allows you to experiment with code, analyze data, collaborate with others, and share insights with no installation required.

This page describes the steps to analyze Data Connector learning data with DataLab.

Complete these two steps to view your learning data in Power BI.

1. [Set up an Amazon Athena data connection](#set-up-an-amazon-athena-data-connection)
2. [Query your data](#query-your-data)

### Set up an Amazon Athena data connection

{% hint style="info" %}
First, make sure you have your [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).
{% endhint %}

Head over to the DataLab dashboard at <https://app.datacamp.com/datalab/>.

Click on **Data Sources** on the left-hand panel.

<div align="left"><figure><img src="/files/z46h0nsgKHDVwL147V1o" alt="" width="235"><figcaption></figcaption></figure></div>

Select **New Data Source**.

<figure><img src="/files/dq2TbmPb25C04HIMxwnY" alt=""><figcaption></figcaption></figure>

Select **Amazon Athena.**

<figure><img src="/files/tOmxekCsXJjybM5OcChG" alt=""><figcaption></figcaption></figure>

Enter the following data in the setup dialog.

* Name: Free to choose (e.g., `DataCamp Data Connector`)
* Description: optional; you can leave it blank
* Region: The **AWS Region** from your credentials
* Output Bucket: `s3://{bucketname}/tmp-datalab` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your credentials*
* Access Key: the **AWS Access Key ID** from your credentials
* Secret Key: the **AWS Secret Access Key** from your credentials
* Click **Connect**

<figure><img src="/files/vESdYFDhB2kiqraollt8" alt=""><figcaption></figcaption></figure>

### Query your data

* You can now access your organization's learning data with a SQL cell.
* Create a new SQL cell and select the Athena connection you just created in the Select data source dropdown in the top left corner of the cell:

<figure><img src="/files/4wrhbK1QB9LmcJVyKtSX" alt=""><figcaption></figcaption></figure>

* You can now write and run a SQL query through the Athena connection. See the [Sample Queries](/integrating-our-data-into-your-tools-via-data-connector-2.0/sample-queries) page for examples of typical reports you can build.
* You can browse all the available tables through the schema browser by clicking the ![](/files/dLeC1SXzdpyOCgsrNlxS)icon in the SQL cell.

## Resources

* [DataLab documentation](https://datalab-docs.datacamp.com/connect-to-data/athena)


# Python with Boto3

This page describes how to easily use the boto3 library in Python to analyze data from the Data Connector.

{% hint style="info" %}
Before you begin, please ensure that your credentials are correctly set up. How to do this is explained in the [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) article.
{% endhint %}

## Examples

### Get a list of all users

This script retrieves a list of all users from the Data Connector and stores it in a pandas dataframe.

```python
import pandas as pd
import boto3

S3_BUCKET_NAME = "<your bucket name here>"

# Create client, authentication is done through environment variables
s3_client = boto3.client('s3')

# Utility method to get a file and load it into a df
def getDataFrameFromS3(table):
    key = f'latest/{table}.csv'
    response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Key=key)
    return pd.read_csv(response['Body'])

# Get the dimension CSV file that contains all users
dim_user = getDataFrameFromS3('dim_user')
print(dim_user)
```

### Time spent in Learn per technology

Each content type at DataCamp has an associated [technology](https://enterprise-docs.datacamp.com/understanding-reports-with-clarity-definitions) (e.g., R, Python, SQL, Spark, etc.). With the code below, you can create a report with the time spent per technology.

```python
import pandas as pd
import boto3

S3_BUCKET_NAME = "<your bucket name here>"

# Create client, authentication is done through environment variables
s3_client = boto3.client('s3')

# Utility method to get a file and load it into a df
def getDataFrameFromS3(table):
    key = f'latest/{table}.csv'
    response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Key=key)
    return pd.read_csv(response['Body'])

# Get required data frames
fact_learn_events = getDataFrameFromS3('fact_learn_events')
dim_content = getDataFrameFromS3('dim_content')

# Merge the dataframes
result = fct_learn_events \
    .merge(dim_content, on='content_id', how="left") \
    [['technology', 'duration_engaged']]
    
# Filter for rows where duration_engaged is greater than zero
result_filtered = result[result['duration_engaged'] > 0]

# Turn duration_engaged into hours
result_filtered['duration_engaged'] = result_filtered['duration_engaged'] / 3600

# Calculate time spent per technology
result_grouped = result_filtered.groupby('technology')['duration_engaged'].sum()

print(result_grouped.sort_values(ascending=False))
```

## More examples?

Please review our [sample queries](/integrating-our-data-into-your-tools-via-data-connector-2.0/sample-queries) and queries that [recreate key reports in the Groups tab](/integrating-our-data-into-your-tools-via-data-connector-2.0/queries-to-recreate-key-reports-in-the-groups-tab).

Reach out to your customer success manager, and we are happy to help you get the data you need using Python or SQL.


# Downloading your data

An alternative way to incorporate DataCamp data into your data infrastructure is to download the raw data files. This is useful if you wish to load all your learning data into your own data lake.

This usually means you have a data lake that already contains data from other sources and want to include your DataCamp learning data, too.

* This section covers the following tools:
  * [S3 Browser (Windows)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/s3-browser-windows)
  * [Cyberduck (Mac or Windows)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/cyberduck-mac-or-windows)
  * [AWS CLI (Linux)](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data/aws-cli-linux)


# S3 Browser (Windows)

{% hint style="info" %}
This documentation was created for S3 Browser v12.2.9
{% endhint %}

**Step 1:** Open the S3 Browser app\
When you open the app for the first time, the Add new account wizard will open automatically; if it doesn't, you can add a new account from the **Account** menu.

**Step 2:** Configure a new account using the **Add new account** wizard

<div align="left"><img src="/files/EPwzafebfrarSeucLGdO" alt="Using the Add New Account wizard"></div>

{% hint style="info" %}
See the [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) page for instructions on where to find your credentials.
{% endhint %}

* **Display name:** an easy-to-remember name for this connection. *E.g.: DataCamp Data Connector*
* **Account Type**: Amazon S3 Storage
* **Access Key ID:** The **AWS Access Key ID** from the Data Connector Settings
* **Secret Access Key:** The **AWS Secret Access Key** from the Data Connector Settings
* Enable **Use secure transfer**
* Click **Add new account**

**Step 3:** S3 Browser will now try to connect to your S3 bucket but won’t have access to list all buckets. You will need to manually add an external bucket. The application will prompt you to add an External Bucket now. Click **Yes** on the following dialog:

<div align="left"><img src="/files/LJhY7imBjW8TFgj8Bg0r" alt=""></div>

Enter the **S3 Bucket Name** from the Data Connector Settings in the **Bucket name** field, and click **Add External bucket**.

**Step 4:** You have successfully connected S3 Browser to your S3 bucket. Visit the `csv` directory to view and download the CSV files.

<figure><img src="/files/4C2yurfvbPG6msjNbVx2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: Downloading your data can also be automated via a script. Most popular programming languages allow you to automatically read files from an S3 bucket and save them to your local drive, meaning you would no longer need to download the files manually.
{% endhint %}


# Cyberduck (Mac or Windows)

[Cyberduck](https://cyberduck.io/) is a cloud storage browser for Mac and Windows. You can download the application from the App Store or the Microsoft Store.

{% hint style="info" %}
This guide was created for Cyberduck 9.1.3
{% endhint %}

**Step 1:** Launch the Cyberduck app, and select **Open Connection**.

<figure><img src="/files/Zt02aO2cCqMwGUeGRXpO" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
See the [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) page for instructions on where to find your credentials.
{% endhint %}

**Step 2:** Select **Amazon S3.**

<figure><img src="/files/MVF2WkcKwLbnCDRSPnJ4" alt=""><figcaption></figcaption></figure>

**Step 3:** Configure the connectio&#x6E;**.**

<figure><img src="/files/GGQevCtnXjszgLzIfN9v" alt=""><figcaption></figcaption></figure>

* **Server:** `{bucketname}.s3.amazonaws.com`
* **Access Key ID:** The **AWS Access Key ID** from the Data Connector Settings
* **Secret Access Key:** The **AWS Secret Access Key** from the Data Connector Settings
* Click **Connect**

**Step 4:** You have successfully connected Cyberduck to your S3 bucket and can download the necessary files.


# AWS CLI (Linux)

This guide describes how to access your data through the AWS CLI. Below, you will find the steps you can follow to access your data [using the AWS Command Line Interface](https://aws.amazon.com/cli/)

**Step 1:** Install the Amazon AWS CLI using the instructions on this page: <https://aws.amazon.com/cli/>

**Step 2:** Once installed, you need to initialize your AWS configuration by typing the following command:

```
aws configure
```

This command will ask you for your `AWS Access Key ID`, `AWS Secret Access Key`, and `AWS Region` which you can all retrieve from [Your credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).

The `Default output format` option you can leave empty.

**Step 3:** Now you can retrieve a list of all files in your S3 bucket using the CLI.

To list all files, for example, use the following command:

```
aws s3 ls s3://your-bucket-name
```

Or use the following command to download a file to your local hard drive home directory:

```
aws s3 cp s3://your-bucket-name/filename.csv ~/filename.csv
```


# Troubleshooting Data Connector 2.0

This page covers common issues when **activating and connecting** to DataCamp’s Data Connector 2.0 and provides step-by-step solutions.

Use this guide if you:

* Have enabled Data Connector 2.0 in **Enterprise Reporting**
* Are having trouble **seeing data in S3** or **connecting** from tools like **Power BI or Tableau**

***

### Before You Start: Activation Checklist <a href="#before-you-start-activation-checklist" id="before-you-start-activation-checklist"></a>

Before debugging individual tools, always confirm the basics:

1. **Check Data Connector 2.0 activation**
   * Go to **Reporting → Data Connector** in your DataCamp admin page.
   * Confirm that:
     * The **Data Connector 2.0 tab** is visible.
     * The connector is **enabled** (toggle is on or status is “Active”).
   * If you don’t see the Data Connector section, contact your **Customer Success Manager (CSM)**.
2. **Wait for initial export**
   * After activation, allow **up to 24 hours** for:
     * The **S3 bucket** to populate
     * **Athena tables** to become available
3. **Verify credentials and region**
   * In DataCamp, go to **Reporting → Data Connector → View Details**.
   * Copy:
     * the **exact S3 Bucket Name**
     * the **AWS Region =** `us-east-1`
     * the **Access Key ID** and **Secret Access Key**
   * If credentials are regenerated, update all tools with the **new** key/secret.
4. **Involve the right people**
   * For connection issues, coordinate with your:
     * DataCamp Admin
     * IT/Network/Security team
     * Business Intelligence/Data team (Power BI, Tableau, Looker, etc...)
     * DataCamp Support (from DataCamp)

***

### Quick Links <a href="#quick-links" id="quick-links"></a>

* [ODBC Driver Installation & Configuration](#odbc-driver-installation--configuration)
* [SSL Certificate & Security Issues](#ssl-certificate--security-issues)
* [Network & Firewall Configuration](#network--firewall-configuration)
* [No Data or Missing Tables After Activation](#no-data-or-missing-tables-after-activation)
* [Configuration Errors (S3 Output Location)](#configuration-errors-s3-output-location)
* [Connection Timeout & Performance Issues (Power BI)](#connection-timeout--performance-issues-power-bi)
* [BI Tool–Specific Issues](#data-accuracy--metric-mismatches)
* [Still Having Issues?](#still-having-issues)

***

### ODBC Driver Installation & Configuration <a href="#odbc-driver-installation--configuration" id="odbc-driver-installation--configuration"></a>

**Problem:** Power BI or Tableau cannot find the Athena ODBC driver, or DSN setup fails.

**Solutions:**

1. **Check driver installation**
   * Download and install the **Amazon Athena ODBC v1 driver (64-bit)** for Power BI.
   * Confirm architecture: Power BI Desktop requires 64-bit.
2. **Check driver in ODBC Data Sources**
   * Open **ODBC Data Sources (64-bit)**.
   * Go to **Drivers** tab and verify "Simba Athena ODBC Driver (v1)" is present.
3. **Create System DSN (for Power BI)**
   * Use **System DSN** so Power BI can see it (not just User DSN).
4. **Tableau setup**
   * Download latest driver from Tableau, install `.jar` to correct folder, then restart Tableau.
5. **Check for version mismatch/conflicts**
   * Only run required ODBC driver version; remove any conflicting/older installs if possible.

**Resources:**

* AWS Athena ODBC: <https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html>
* Tableau Athena setup guide: <https://help.tableau.com/current/pro/desktop/en-us/examples_amazonathena.htm>

***

### SSL Certificate & Security Issues <a href="#ssl-certificate--security-issues" id="ssl-certificate--security-issues"></a>

**Problem:** You receive `[SSL: CERTIFICATE_VERIFY_FAILED]` or similar SSL/TLS errors.

**Solutions:**

1. **Check network and proxy configuration**
   * Are you behind a **corporate proxy, VPN, or SSL inspection** (e.g., Zscaler, Netskope)?
   * Test both with VPN on/off and with/without proxy.
   * If using TLS inspection, ask IT whether a corporate **root CA** is needed, or if AWS endpoints can be excluded from inspection.
2. **Whitelist AWS and DataCamp endpoints**
   * IT/Network should allow outbound HTTPS to:
     * `athena.us-east-1.amazonaws.com`
     * `*.s3.amazonaws.com`
   * Open both port **443** (HTTPS) and **444** (Athena streaming).
3. **Temporarily disable SSL verification (for diagnosis only)**
   * In Athena ODBC DSN settings, uncheck "verify SSL cert".
   * If this resolves the error, restore SSL and coordinate with IT for proper solution (certificate trust or endpoint bypass).

**Resource:** AWS SSL troubleshooting: <https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html#tshoot-certificate-verify-failed>

***

### Network & Firewall Configuration <a href="#network--firewall-configuration" id="network--firewall-configuration"></a>

**Problem:** You see connection refused/network timeout errors.

**Solutions:**

1. **Open outbound ports**
   * Allow **port 443** (HTTPS) and **port 444** (Athena streaming).
2. **Check VPN compatibility**
   * Test with VPN off (if allowed).
   * Ask IT for split tunneling or excluded hosts if VPN must be used.
3. **Verify endpoint access**
   * From the BI or client machine:
     * Try `curl https://athena.us-east-1.amazonaws.com`
     * If this fails, the issue is almost surely network/firewall/proxy.

**Resource:** AWS Athena JDBC/ODBC timeout troubleshooting: <https://aws.amazon.com/premiumsupport/knowledge-center/athena-connection-timeout-jdbc-odbc-driver/>

***

### No Data or Missing Tables After Activation <a href="#no-data-or-missing-tables-after-activation" id="no-data-or-missing-tables-after-activation"></a>

**Problem:** S3 bucket is empty or there are no tables in Athena.

**Solutions:**

1. **Allow 24 hours for first sync**
2. **Confirm exact S3 bucket name and AWS region** in DataCamp credentials.
3. **Verify Athena catalog/schema configuration**
   * Typically, use catalog `AwsDataCatalog` and schema `default`.
4. **Review table scope**
   * Not every UI metric/report is mapped 1:1 to a table. Use "Explore the Data Model" docs.
5. **If bucket is inaccessible after 24 hours** contact your CSM with activation details, org name, bucket name, and export timing.

***

### Configuration Errors (S3 Output Location) <a href="#configuration-errors-s3-output-location" id="configuration-errors-s3-output-location"></a>

**Problem:** Fails with S3 output/staging directory errors.

**Solutions:**

1. **S3 output location formats (tool-specific):**
   * Power BI: `s3://{bucketname}/tmp-powerbi`
   * Tableau: `s3://{bucketname}/tmp-tableau`
   * DataLab: `s3://{bucketname}/tmp-datalab`
   * Generic/others: `s3://{bucketname}/tmp`
2. **Always copy/paste the bucket name from DataCamp UI and avoid typos/leading or trailing spaces.**

**Example:**

```
S3 Bucket Name: data-connector-v2-12345-production
Correct for Power BI: s3://data-connector-v2-12345-production/tmp-powerbi
```

***

### Connection Timeout & Performance Issues (Power BI) <a href="#connection-timeout--performance-issues-power-bi" id="connection-timeout--performance-issues-power-bi"></a>

**Problem:** Power BI takes too long to load data or times out when querying tables.

### Recommended order of checks

1. **Use Import Mode (recommended in most cases)**
   * In **Power BI Desktop** when connecting to **Amazon Athena**, choose **Import** (not DirectQuery).
   * **Why:** Local import delivers better performance for reporting and dashboarding.
2. **Check query scope and filters**
   * Avoid unfiltered queries on large tables (e.g., `fact_learn_events`).
   * Start with a **limited date range** (like last 30–90 days) and only needed columns.
3. **Increase "Row to fetch per block" (ODBC setting)**
   * Open **ODBC Data Sources** on your machine.
   * Select your DSN, click **Configure → Advanced Options**.
   * Gradually **increase "Row to fetch per block"** (e.g., from 10,000 up to 30,000).
4. **Result Set Streaming (advanced)**
   * Athena ODBC can stream large datasets over port **444**.
   * Make sure **port 444** is open outbound.
   * As a troubleshooting step, try disabling **Result Set Streaming**:
     * If this resolves timeouts, re-enable after confirming streaming port/IAM configuration is correct.

**Resources:**

* AWS Athena Connection Timeout Troubleshooting: <https://aws.amazon.com/premiumsupport/knowledge-center/athena-connection-timeout-jdbc-odbc-driver/>
* Power BI DirectQuery Performance: <https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about>

***

### BI Tool–Specific Issues <a href="#data-accuracy--metric-mismatches" id="data-accuracy--metric-mismatches"></a>

### Power BI: Data Source Not Found

**Solutions:**

* Restart Power BI Desktop and retry connection
* System DSN (not user DSN), and DSN architecture must match Power BI install (64-bit)
* Update Power BI if AWS Athena connector is missing

### Tableau: Connection Test Fails

**Solutions:**

* Check all required fields (server: `athena.us-east-1.amazonaws.com`, port: 443, correct S3 staging dir)
* Copy/paste Access Key and Secret Access Key exactly from DataCamp UI
* Ensure correct `.jar` driver placement/version
* Restart Tableau after changing drivers

### DataLab: Athena Configuration Error

**Solutions:**

* S3 path must be `s3://{bucketname}/tmp-datalab`
* Consistent region setting (usually `us-east-1`)
* If it works in DataLab but not on another tool, check local driver/network setup

***

### Still Having Issues? <a href="#still-having-issues" id="still-having-issues"></a>

If you still have problems after working through this guide:

1. **Check AWS Service Health Dashboard** for Athena/S3 regional outages
2. **Test DataLab connection** (simplest baseline)
3. **Regenerate credentials** in DataCamp UI, update all configs
4. **Contact DataCamp Support**
   * Include: brief issue summary, tool and ODBC driver version, error messages/screenshots, troubleshooting steps already tried, whether issue affects all users or just one, and device specifics

***

**For further help, consult DataCamp documentation or contact DataCamp Support**


# Changelog

In this section, we track updates and changes to the data model.

### July 31, 2026

A new **`fact_ai_insights_disclosures`** fact table has been added to Data Connector 2.0. It contains high-confidence, non-sensitive topics that learners disclose and AI-tool mentions detected during AI Tutor conversations.

Use this table to analyze the topics and tools learners mention while using AI Tutor. Each row retains the first disclosure at the documented topic or tool grain while the learner was part of the group.

### July 20, 2026

A new **`ai_tutor_credit_usage_detail`** metric table has been added to Data Connector 2.0. This table contains each learner's AI Tutor credit usage, remaining credits, effective user limit, limit source, and current reset window.

Use this table to monitor AI Tutor credit consumption per user and identify users who have exceeded their current AI Tutor credit limit.

### July 09, 2026

A new nullable `last_login_at` timestamp has been added to the [`dim_user`](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/dimension-tables#dim_user) table. It contains the user's most recent DataCamp login time when available.

This field represents login recency and should not be used as a proxy for learning activity.

### July 06, 2026

The `dim_date` table has been expanded with additional calendar fields, including week, month, quarter, half-year, and year attributes, period start and end dates, weekday and weekend flags, US holiday identifiers, and business-day indicators.

This is an additive schema change: existing `dim_date` fields remain available.

### June 23, 2026

We've renamed the two course variants in the data model to match the rest of DataCamp: **Classic** is now **Datacamp**, and **AI Native** is now **AI Tutor**. This changes column names and the `course_variant_name` value, and is a **breaking change** for queries that reference the old names.

**Renamed columns**

* `dim_content.has_variant_classic` → `has_variant_datacamp`
* `dim_content.has_variant_ai_native` → `has_variant_ai_tutor`
* `group_detail.ai_native_hours_on_learn` → `ai_tutor_hours_on_learn`
* `group_detail.ai_native_hours_on_courses` → `ai_tutor_hours_on_courses`
* `group_detail.ai_native_xp_earned` → `ai_tutor_xp_earned`
* `group_detail.ai_native_courses_started` → `ai_tutor_courses_started`
* `group_detail.ai_native_courses_completed` → `ai_tutor_courses_completed`

**Changed value**

* `dim_course_variant.course_variant_name` now returns `datacamp` instead of `classic`, and `ai-tutor` instead of `ai-native`.

**Action required**

* Queries that select the renamed columns will error until they are updated to the new names.
* Queries that filter on `course_variant_name` (e.g. `WHERE course_variant_name = 'ai-native'`) will **return zero rows, with no error**. Update the value, or filter on the numeric `course_variant_id` instead — it is unchanged (`1` = datacamp, `2` = ai-tutor).

### June 18, 2026

A new column, `required_for_completion`, has been added to the [`bridge_track_content`](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/bridge-tables#bridge_track_content) table. It indicates whether a content item is required (`true`) or optional (`false`) for a learner to complete the track. Use this column to exclude optional content items and measure track progress more precisely.

### May 21, 2026

A new column, `track_description`, has been added to the `dim_track` table. It surfaces the long-form description an admin enters when creating or editing a custom track, and the public-catalog description for non-custom tracks. The existing `track_short_description` column remains unchanged, populated only for DataCamp catalog tracks.

### May 07, 2026

Four new event names have been added to the [`fact_certification_events`](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/fact-tables#fact_certification_events) table:

* `certification_project_registered`
* `certification_project_failed`,
* `certification_project_expired`,
* `certification_skill_assessment_registered`

and `certification_case_study_registered` coverage has been extended to every started case-study attempt.

Together these provide a complete `registered` → outcome funnel per attempt across all three component families (project, skill assessment, case study).

### April 09, 2026

Five new columns have been added to the **`group_detail`** metric table to surface activity on [AI-native course variants](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model/metrics-tables#group_detail):

* `ai_native_hours_on_learn` — Time spent on AI-native variant content
* `ai_native_hours_on_courses` — Time spent on AI-native course variant courses
* `ai_native_xp_earned` — XP earned from AI-native course variant content
* `ai_native_courses_started` — AI-native course variant courses initiated
* `ai_native_courses_completed` — AI-native course variant courses finished

These columns are **subsets** of the existing totals — they are already included in the corresponding `total_*` and `nb_*` columns. To isolate classic-only activity, subtract the AI-native value from the total.

### March 30, 2026

Two new columns, Courses (Classic) and Courses (AI Native), have been added to the Time in Learn export. These columns represent the time a learner spent in each variant.

### March 27, 2026

Two new columns, Courses (Classic) and Courses (AI Native), have been added to the Time in Learn report. These columns represent the time a learner spent in each variant.

### March 25, 2026

We've introduced the concept of **course variants** to support our new AI-native course format. A course can now exist as a **classic** variant (the traditional DataCamp course experience) or an **AI-native** variant (a new interactive learning format powered by AI). Both variants share the same course identity (`course_id` / `content_id`) and all common metadata.

**New table**

* **`dim_course_variant`** — A new dimension table containing variant-specific information such as the variant name, description, and duration details. See Dimension tables for the full schema.

**New columns**

* **`course_variant_id`** added to **`dim_content`** — Identifies the course variant for course and chapter content rows. `1` = classic, `2` = AI-native.
* **`course_variant_id`** added to **`fact_learn_events`** — Identifies which course variant a learning event is associated with. Populated for course and chapter events.

**Schema changes**

* **Breaking change:** **`chapter_id`** in **`dim_content`** has changed from **integer to string**. If your queries cast `chapter_id` to an integer or use integer comparisons, they will need to be updated.

**New content records**

* AI-native courses introduce new **chapter-level records** in `dim_content`. These AI-native chapters have their own `content_id` and `chapter_id` values. If you aggregate at the chapter level, be aware that you will now see both classic and AI-native chapters unless you filter by `course_variant_id`.\\

**Impact on existing queries**

* **Course completion queries:** A user can now complete both the classic and AI-native variant of the same course. If you count course completions, consider whether you want to count per variant or per course. Use `course_variant_id` to differentiate.
* **Chapter-level queries:** New AI-native chapters will appear alongside classic chapters. Filter by `course_variant_id` if you need to isolate one variant.
* **Queries using `chapter_id`:** Update any logic that treats `chapter_id` as an integer.

See Domain Gotchas for detailed guidance.

### February 2, 2026

We've expanded the possible values of `assessment_knowledge_level` in `fact_learn_events` from 3 to 5 levels:

* Novice (0-69)
* Lower Intermediate (70-100)
* Upper Intermediate (101-130)
* Lower Advanced (131-160)
* Upper Advanced (161-200)

### January 15, 2026

We've added a new `assignment_unassigned` event to `fact_learn_events` to better track the user–assignment lifecycle.

This event is triggered when an Admin deletes an assignment after creating it.

### December 15, 2025

We've updated the Data Connector model to capture the new XP awarded for certification and skill assessment completions.

* **Certifications (**`certification_granted` event in `fact_certification_events`)
  * Career Certification pass: 10,000 XP
  * Fundamentals Certification pass: 2,000 XP
* **Skill Assessments (**`assessment_engaged` event in `fact_learn_events`)
  * Assessment completion: 100 XP
    * Note: this award is given for every completion (no per-user limit).
  * Score > 50th percentile: 500 XP
  * Score > 75th percentile: 1,000 XP

{% hint style="info" %}
Each XP award can only be earned **once per user per certification** and **assessment**, unless otherwise noted.
{% endhint %}

* The `group_detail` metric table has been extended to include the new XP events and:
  * `certification_started`
  * `certification_completed`
* We have added URL fields to key dimension tables so you can link directly to content from your reports and dashboards:
  * `dim_content` – now includes a URL link to the content item
  * `dim_track` – now includes a URL link to the track
  * `dim_certification` – now includes a URL link to the certification

### December 2, 2025

We've expanded the `dim_content` table to better represent non-course learning resources and competitions.

**What's new**

* **New resource types added to `dim_content`:**\
  Free online resources are now included as content (code-alongs, cheat sheets, case studies, data sheets, ebooks, infographics, podcasts, tools, webinars, whitepapers)
* **New `is_resource` flag:**\
  A new Boolean column `is_resource` has been added to `dim_content` to distinguish these resources from other content types (e.g., courses, tracks, assessments).
* **Competitions in `dim_content`:**\
  Competitions are now also represented in the `dim_content` table as a dedicated content type, allowing you to report on and filter them alongside other learning assets.

### October 2, 2025

We've released the **DataCamp** **Data Connector 2.0 Power BI Template** — a plug-and-play dashboard that lets you go from connection to insights in minutes.

* **What's included:** Pre-built pages for **Snapshot**, **Engagement**, **Progress**, and **Leaderboard**, wired to the Data Connector 2.0 model for consistent KPIs and analysis.
* **Where to get it:** **Group Hub → Reporting → Data Connector**. Download the `.pbit` file and open it in Power BI Desktop.
* **Setup highlights:** Create an **Athena ODBC DSN** on Windows and connect via the built-in **Amazon Athena** connector in Power BI. See our Microsoft Power BI guide for step-by-step DSN fields and connection prompts. [enterprise-docs.datacamp.com](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi)

Download the template now to turn your Data Connector 2.0 data into insights in minutes, unlock richer analyses and faster decisions with zero modeling needed.

### September 17, 2025

We've updated the data model to capture license and invite interactions. The `fact_permission_event` table now records these events (e.g., `user_license_allocated`, `user_license_revoked`, `invite_sent`, `invite_claimed`, `invite_withdrawn`). This enables company-level analysis of DataCamp adoption.

### August 21, 2025

We've fixed an issue in the data model by removing `course_engagement` events with content\_id = `ex0`. These events did not represent exercise-level engagement and are no longer included, ensuring that engagement metrics remain consistent and exercise-granular.

### August 20, 2025

We've enhanced the data model to include course difficulty levels. A new field, `course_difficulty_level`, has been added to the `dim_content` table.

### August 19, 2025

We've updated the data model to support the source of the DataLab workbook. The `fact_datalab_events` table now includes the `workbook_source` and `workbook_class` fields.

The `workbook_source` field contains the source of the workbook, with the following possible values: *project, certification, competition, course,* or *other*.

When a workbook source includes one of the following values — *project, certification, competition,* or *course,* it is marked as **embedded**.

### July 10, 2025

A new `dim_assignment` table has been added to the data model to support assignment-level analysis and reporting. Additionally, four assignment-related events—`assignment_assigned`, `assignment_completed`, `assignment_completed_late`, and `assignment_missed`—have been integrated into the `fact_learn_events` table.

### July 2, 2025

Courses in `dim_content` can now contain decimal values for `time_duration_in_hours`. This change is meant to support upcoming courses that are expected to take less than one hour to complete.

### June 5, 2025

We've updated the data model to support custom assessments. The `dim_content` table now includes a new boolean field: `assessment_is_custom`. This field indicates whether an assessment is custom (`true`) or standard (`false`).

If your group uses custom assessments, you'll now see corresponding rows reflected in this table.

We have also added a `last_sso_nameid` column to the `bridge_user_group` table. This field contains the last SSO NameID of the user in the group. Some groups that authenticate with SSO use this field to include custom identification data for their users.

### May 28, 2025

We've updated the underlying data in the data model (note: this is not a schema change) to improve the accuracy of engagement metrics:

* **Filtered course activity**: We now exclude `course_engagement` events associated with courses that are not in one of the three expected states: *Live*, *Soft Launched*, or *Archived*. Previously, some engagement data from courses in other states may have been included. This change may slightly reduce reported course durations. This does **not** affect XP calculations.
* **Filtered assessment activity**: We now exclude `assessment_engaged` events for assessments that are not in the *public* state. Previously, engagement data for non-public assessments was included. This change may slightly reduce assessment duration metrics. This does **not** affect XP calculations.

### May 22, 2025

We've enhanced the data model to include the description and short description for courses and chapters. New fields, `description` and `short_description` has been added to the `dim_content` table.

### April 22, 2025

We've enhanced the data model to include the estimated time required to complete courses and projects. A new field `time_needed_in_hours` has been added to the `dim_content` table. This field represents the expected duration (in hours) to complete a given piece of content and is currently populated only for courses and projects.

### April 17, 2025

We've added a `course_is_skipped` column to `fact_learn_events` . This column will contain a boolean (true/false) for `course_completed` events, indicating whether the course was skipped. A skipped course is still treated as a completed course. For cases when the course was skipped, the `occurred_at` timestamp for the course completion event will reflect the time at which the course was skipped.

### April 16, 2025

We've updated the data model to support custom certifications. The `dim_certification` table now includes a new boolean field: `certification_is_custom`. This field indicates whether a certification is custom (`true`) or standard (`false`).

If your group uses custom certifications, you'll now see corresponding rows reflected in this table.

### March 31, 2025

Launched Data Connector 2.0!!

* With Data Connector 2.0, we've significantly improved the data model, making it simpler, more efficient, and aligned with the rest of our reporting.

  * Simplified data model – Fewer tables (29 → 13) for easier querying
  * Data alignment with **Groups** tab reporting - Data Connector 2.0 now uses the same source as the rest of our reporting, ensuring consistency across all analytics and no discrepancies.
  * Includes mobile data - Now includes learner data done via the mobile app
  * Pre-aggregated metrics – New pre-aggregated metric tables to speed up reporting
  * Easier querying – Significantly fewer complex joins for common reports

  For more info on the differences, check out [Migrating from Data Connector (1.0)](/integrating-our-data-into-your-tools-via-data-connector-2.0/migrating-from-data-connector-1.0)


# Migrating from Data Connector 1.0

If you are migrating from the previous version of Data Connector, this section is for you.

### Motivation

We are constantly improving our Enterprise reporting to gain insights and make tracking your users' progress on our platform even more straightforward.

The main change in Data Connector 2.0 is the data model. It is organized around core fact, dimension, and bridge tables, with metric tables for common reporting use cases.

This structure makes the data easier to query, adds mobile usage data, and makes it easier to build dashboards using your organization's BI tools.

Additionally, by moving to this improved data model, Data Connector now uses the same data as the rest of our Enterprise reporting. This allows for faster iteration and ensures that every report matches everywhere.

### What is changing?

#### Data Model

In version 1.0, we had a robust data model allowing a lot of granularity and detail. The downside is that it had a steeper learning curve.

We have simplified the model, going from this:

<figure><img src="/files/XDxjKjOFntQ0mbl4Mxe0" alt=""><figcaption><p>Data Connector 1.0 Data Model</p></figcaption></figure>

To the model shown in the [Data Connector 2.0 ERD](/integrating-our-data-into-your-tools-via-data-connector-2.0/explore-the-data-model#data-connectors-erd).

Finding the correct table for your queries is now quicker and easier. Data Connector 2.0 exposes the core event model through fact, dimension, and bridge tables, and provides metric tables for common reporting use cases.

#### Improvements

Data Connector 2.0 now exposes 16 core fact, dimension, and bridge tables, plus 4 metric tables for common reporting use cases. It also includes mobile usage data and uses the same reporting source as the rest of Enterprise reporting.

<table><thead><tr><th></th><th align="center">Data Connector 1.0</th><th align="center" valign="middle">Data Connector 2.0</th></tr></thead><tbody><tr><td>Core fact, dimension, and bridge tables</td><td align="center">29 mart tables</td><td align="center" valign="middle">16 tables</td></tr><tr><td>Metric tables</td><td align="center">0</td><td align="center" valign="middle">4</td></tr><tr><td>Mobile data</td><td align="center">No</td><td align="center" valign="middle">Yes</td></tr><tr><td>Common reporting queries</td><td align="center">Usually require multiple joins</td><td align="center" valign="middle">Often use one metric table or one fact table</td></tr><tr><td>Enterprise reporting consistency</td><td align="center">No</td><td align="center" valign="middle">Yes</td></tr></tbody></table>

### Sample queries (1.0 vs. 2.0)

Comparing the SQL code required to answer the same question on both data models illustrates why we decided to change.

For example, let's calculate the total time in Learn content (assessments, courses, practices, and projects) between January 15 and February 14, 2025.

On Data Connector 1.0, you needed to do this:

```sql
WITH time_per_type AS (
        SELECT sum(time_spent) AS total_time_spent
        FROM data_connector_1234.exercise_fact
        WHERE date_id BETWEEN 20250115 AND 20250214

        UNION ALL

        SELECT sum(time_spent) AS total_time_spent
        FROM data_connector_1234.practice_fact
        WHERE date_id BETWEEN 20250115 AND 20250214

        UNION ALL

        SELECT sum(time_spent) AS total_time_spent
        FROM data_connector_1234.project_fact
        WHERE date_id BETWEEN 20250115 AND 20250214

        UNION ALL

        SELECT sum(time_spent) AS total_time_spent
        FROM data_connector_1234.assessment_fact
        WHERE date_id BETWEEN 20250115 AND 20250214
)

SELECT sum(total_time_spent) AS time_spent_seconds
FROM time_per_type
```

The granularity built into the model made it harder to answer more general questions that are frequently asked.

With Data Connector 2.0's model, the same question can be answered with the following query:

```sql
SELECT sum(duration_engaged) AS time_spent_seconds
FROM data_connector_1234.fact_learn_events
WHERE occurred_at BETWEEN TIMESTAMP '2025-01-15 00:00:00' AND TIMESTAMP '2025-02-14 23:59:59'
    AND event_name IN (
        'course_engagement',
        'practice_engagement',
        'project_engagement',
        'assessment_engaged'
    )
```

### What do I need to do to switch?

Data Connector 2.0 still uses AWS S3 buckets to hold your organization's data, so connecting to the new version is straightforward.

For more details, please refer to our [Getting started with Data Connector](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0) and [Using Data Connector](https://enterprise-docs.datacamp.com/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0) sections.


# FAQ

## Groups tab

### How often are the reports in the Groups tab updated?

Most reports are updated daily. Each report shows a **"Last updated at"** time as a small clock chip — hover over it to see the exact date and time. Pages with several sections show a separate time for each section, since each one refreshes independently. See [Data Freshness & Reporting Update Schedule](/optimizing-key-performance-indicators-via-the-groups-tab/data-freshness-and-reporting-update-schedule) for the full schedule.

<figure><img src="/files/Iv6nAuNFZNDVfNkYQQVC" alt=""><figcaption><p>Each section shows its own "Last updated at" time.</p></figcaption></figure>

A small number of our reports that deal with group membership are updated in real-time. These are:

* Leaderboard
* Members Section
* Team History Export
* License History Export
* Assignment Completions

***

## **Data Connector 2.0**

### **Can I integrate Data Connector directly with my BI tools, like PowerBI, Tableau, or Looker?**

Yes! Check out our documentation on [Microsoft PowerBI](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/microsoft-power-bi), [Tableau](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/tableau), and [Looker](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/integrating-with-your-bi-tools/looker)

### **Who has access to Data Connector 2.0?**

DataCamp Data Connector can only be enabled by group admins or DataCamp employees. Anyone you share the credentials with can access the data through Data Connector.

Learn how to store your credentials to secure your learning data: [Storing your Credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/storing-your-credentials).

### **What is Data Connector 2.0, and is it a fit for us?**

Data Connector allows DataCamp enterprise plan admins to access their raw learning data, including additional data not readily available in the Groups tab. By enabling this functionality, you will no longer need to manually log into the DataCamp platform and export the learning data. This feature is fit for companies with robust analytics and business intelligence requirements.

### **Which kinds of companies are successful with the Data Connector 2.0?**

Companies that manually export their learning data and spend significant time manipulating it to get different views (metrics over time, department level, etc.). These companies have a good understanding of the KPIs and learning progress data they want to see.

### **What can I achieve with the Data Connector 2.0?**

* Understand the impact of learning and development efforts, communicate progress, diagnose bottlenecks, drive decision-making, and predict development needs.
* Access most of your raw learning progress data, including additional data not currently available in the Groups tab.
* Create a variety of visualizations: trends over time, bar charts, etc.
* Slice and dice data with various filters, such as department, office, recruiter, etc.

### **What are some of the limitations of the Data Connector 2.0?**

This is not for activity tracking or hourly data; it is not for instant analytics—data is refreshed every 24 hours.

Data Connector works best when your organization has users dedicated to creating reports for the whole team, preferably Data Analysts.

### **How often is the data updated?**

The data is synced daily (including weekends). Your organization can connect your in-house BI tool and pull your data from DataCamp.

Data is typically updated between 1 AM and 7 AM UTC.

### **Can I access the files through my own S3 bucket?**

Currently, we only support data transfer via DataCamp Amazon S3. We provide you with [secure credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) to access your learning data.

### **Are my credentials stored securely?**

Your secret password is encrypted and stored securely on the AWS System Managers Parameters Store. DataCamp does not store this information in any database. It is only displayed upon request. All admins within your group will see the same [credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials).

### **Can different admins create their own sets of AWS credentials?**

No, the credentials are created based on the group ID. Therefore, all admins will access the same credentials regardless of who sets up the initial configuration.

### **Is the data in Data Connector 2.0 backed up?**

We do not create backups of DataCamp's Data Connector 2.0. You can, however, download the raw data files and back them up yourself. Learn how to download data [here](/integrating-our-data-into-your-tools-via-data-connector-2.0/using-data-connector-2.0/downloading-your-data).

### **How do I enable Data Connector 2.0?**

You can enable DataCamp's Data Connector 2.0 via the Groups tab or your Customer Success Manager. Learn how to enable Data Connector 2.0 [here](https://github.com/datacamp-engineering/enterprise-docs/blob/main/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0).

### **What happens when Data Connector 2.0 is disabled?**

Disabling Data Connector 2.0 will prevent future data exports, but all other settings will remain.

This will not delete your S3 bucket or erase the credentials you have configured, so you can use the same credentials and bucket if you choose to re-enable this feature.


# Data Connector 1.0 - Documentation

Integrate learning insights with your own data.

{% hint style="danger" %}
**The following documentation is for legacy users of Data Connector 1.0. Please refer to the current documentation on Data Connector** [**here**](https://github.com/datacamp-engineering/enterprise-docs/blob/main/integrating-our-data-into-your-tools-via-data-connector-2.0)**.**
{% endhint %}

The DataCamp Data Connector provides easy access to your group's learning data as raw data files via an Amazon S3 bucket or directly queryable from your BI tools using Amazon Athena.

Learn more about [downloading the raw data files](https://github.com/datacamp-engineering/enterprise-docs/blob/main/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-downloading-data) or [setting up an Athena connection](https://github.com/datacamp-engineering/enterprise-docs/blob/main/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data) in your BI or SQL tools.

### What data is included in the export?

We aim to expose all possible data related to our learning products through the Data Connector.

Please see the [Data Model](/data-connector-1.0-documentation/data-connector-1.0-explore-data-model/data-connector-1.0-data-model) page for a complete list of the available data.


# \[Data Connector 1.0] Explore Data Model

Learn more about the data we expose through the Data Connector 1.0 by exploring the [Data Model](/data-connector-1.0-documentation/data-connector-1.0-explore-data-model/data-connector-1.0-data-model).


# \[Data Connector 1.0] Data Model

The data model for the data connector 1.0 provides data on activity for users in a group across different content types. The currently supported content types are:

* Assessments
* Assignments
* Certification
* Courses
* Practice
* Projects
* Tracks
* DataLab (formerly Workspace)

### The Data Connector's 1.0 Data Model

The diagram below shows the relationships between the tables that make up the Data Connector's 1.0 data model:

<figure><img src="/files/XDxjKjOFntQ0mbl4Mxe0" alt=""><figcaption></figcaption></figure>

### How to work with the data?

The data available from the Data Connector 1.0 is modeled using a dimensional model. This means there are fact, dimension, and bridge tables available.

{% tabs %}
{% tab title="Facts" %}
Facts are the measurements/metrics or facts from your user activity on DataCamp.

`course_fact` for exampl,e contains measures like XP and time\_spent on courses by your users.

`assessment_fact` contains measures like score and percentile for the assessment scores your users have registered on DataCamp.
{% endtab %}

{% tab title="Dimensions" %}
Dimension provides the context surrounding the fact tables. In simple terms, they give who, what, where of a fact. In other words, a dimension is a window to view information in the facts.

The `course_fact` table can for example be joined with the `course_dim` table to find out more information about the courses (like title, technology, instructor, ...) or with `user_dim` to get information on the users (like email, name, registration date, etc ...)
{% endtab %}

{% tab title="Bridges" %}
Bridge tables are used to connect fact and/or dimension tables together. Bridge tables are also referred to as "join tables" in classic SQL.

The `user_team_bridge` table for example can be used to connect a user to the teams they are member of. In this case a bridge table is needed because a single user can be member of multiple teams at the same time.
{% endtab %}
{% endtabs %}

You can join the fact tables with the dimension tables to summarize XP and time spent across technology, topic, etc.

The data model also provides dimension tables at the user level `user_dim`, `team_dim`, `group_dim`, and bridge tables `user_team_bridge` to facilitate analysis at the team or user level.

For example, you can aggregate the `xp` gained and `time_spent` by week across `technology` and `team` with the following query.

{% tabs %}
{% tab title="SQL" %}

```sql
SELECT team_id,
       week_start_date,
       technology,
       SUM(xp) AS xp,
       SUM(time_spent)/3600 AS time_spent_hours
 FROM course_fact
       INNER JOIN course_dim USING(course_id)
       INNER JOIN date_dim USING(date_id)
       INNER JOIN user_team_bridge USING(user_id)
       INNER JOIN team_dim USING(team_id)
 GROUP BY 1, 2, 3
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Warning! The Data Connector's 1.0 fact tables only include:<br>

* learning activity for the dates on which a user was part of the group.
* learning activity for the dates on which the group had an active subscription.
* learning activity performed by users with all license types, including basic.
* learning activity performed in the DataCamp desktop app.

Data Connector 1.0 **does not include time spent on mobile,** this could result in slight differences from other sources of reporting such as exports or our Group Hub.

We fixed this issue in Data Connector 2.0! Please see the [Migrating from Data Connector 1.0](/integrating-our-data-into-your-tools-via-data-connector-2.0/migrating-from-data-connector-1.0) section for more information on migration and what has changed.
{% endhint %}

For example, consider user A, who joined group 1234 on Jan 1st, started a course on Jan 2nd, left the group on Jan 3rd while continuing to work on the course, rejoined the group on Jan 4th, and completed the course on Jan 5th.

In this case, the fact tables for group 1234 will not contain data for User A for January 3rd (even though the user continued working on the course).

<figure><img src="/files/fzUwRjNXKIXrfOcjjSBn" alt=""><figcaption></figcaption></figure>

## Assessments

{% hint style="warning" %}
The Data Connector 1.0 includes **certification** and **private (test-out)** assessments, which differ from standard assessments.

Certification assessments evaluate your knowledge within the Certification process. Private (test-out) assessments are used to skip content within a track if you pass a certain threshold.\
\
Reports in the Group Hub do not include certification and private (test-out) assessments. As a result, the reports in the Group hub may show a slight difference in numbers compared to those reported by the Data Connector.
{% endhint %}

### Assessment Dim

`assessment_dim`: The assessment dimension provides descriptive data about assessments.

| column\_name   | column\_description                              |
| -------------- | ------------------------------------------------ |
| assessment\_id | The unique id of the assessment.                 |
| title          | The title of the assessment.                     |
| slug           | The slug of The assessment.                      |
| technology     | The assessment technology (e.g., Python, R, SQL) |
| id             | \[DEPRECATED] Use assessment\_id instead.        |

### Assessment Fact

`assessment_fact`: The assessment fact table provides data about the users’ assessment results: score, percentile obtained, and time spent on each assessment.

| column\_name   | column\_description                                                                                                                                                                              |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| user\_id       | The unique id of the user id. References user\_dim.id                                                                                                                                            |
| assessment\_id | The unique id of the assessment. References assessment\_dim.id                                                                                                                                   |
| date\_id       | The identifier of the date when the user worked on the assessment References dim\_date.id                                                                                                        |
| started\_at    | The timestamp when the user started the assessment (as registered by the DataCamp application)                                                                                                   |
| completed\_at  | The timestamp when the user completed the assessment (as registered by the DataCamp application). It is NULL when the user did not complete the assessment.                                      |
| score          | The user score for the assessment.                                                                                                                                                               |
| score\_group   | The user score group for the assessment. A score of < 70 is “Novice”, 70 - 100 as “Intermediate Lower”, 100 - 130 as “Intermediate”, 130 - 160 as “Intermediate Upper”, and > 160 as “Advanced”. |
| percentile     | The percentile the user belongs in.                                                                                                                                                              |
| time\_spent    | The time (in seconds) the user spent on the assessment.                                                                                                                                          |

## Assignments

### Assignment Dim

`assignment_dim`: The assignment dimension table provides data about a specific assignment.

| column\_name       | column\_description                                                                                                  |
| ------------------ | -------------------------------------------------------------------------------------------------------------------- |
| group\_id          | The unique identifier for the group.                                                                                 |
| assignment\_id     | The unique identifier for the assignment.                                                                            |
| created\_by\_id    | The user\_id of the user who created the assignment. References user\_dim.user\_id.                                  |
| assignment\_type   | The type of assignment (chapter / course / project / assessment / customtrack / xp)                                  |
| assignment\_title  | The title of the content item assigned. It is NULL for assignment\_type = ‘xp’, where no content is assigned.        |
| assignment\_status | The status of the assignemnt (archived / active).                                                                    |
| assignee\_type     | The type of assignee (user / team / group).                                                                          |
| assignment\_xp     | The XP achieved by completing the assignment.                                                                        |
| technology         | The technology of the associated content item. It is NULL for assignment\_type = ‘xp’, where no content is assigned. |
| topic              | The topic of the associated content item. It is NULL for assignment\_type = ‘xp’, where no content is assigned.      |
| due\_at            | The timestamp when the assignment is due.                                                                            |
| created\_at        | The timestamp when the assignment was created.                                                                       |
| updated\_at        | The timestamp when the assignment was updated.                                                                       |
| deleted\_at        | The timestamp when the assignment was deleted.                                                                       |

### Assignment Fact

`assignment_fact`: The assignment fact table provides data about the users’ progress on each assignment.

| column\_name       | column\_description                                                                             |
| ------------------ | ----------------------------------------------------------------------------------------------- |
| group\_id          | The unique identifier of the group.                                                             |
| user\_id           | The unique identifier of the user. References user\_dim.user\_id                                |
| assignment\_id     | The unique identifier of the assignment. References assignment\_dim.assignment\_id.             |
| is\_completed      | A boolean indicating if the user completed the assignment.                                      |
| completion\_status | The status of completion of the assignment. It can be completed / late / in\_progress / missed. |
| assigned\_at       | The timestamp when the assignment was created.                                                  |
| due\_at            | The timestamp when the assignment is due.                                                       |
| completed\_at      | The timestamp when the user completed the assignment.                                           |
| email\_sent\_at    | The timestamp when an email was sent to the user.                                               |
| reminder\_sent\_at | The timestamp when a reminder was sent to the user.                                             |

## Certifications

### Certification Dim

`certification_dim`: The certification dimension provides data about a specific certification. Certification ID 1 and 2 are the so-called v1 iterations of certifications. From June 2022 onwards, we switched to a process where an official certification registration was needed, and this registration would time out after 30 days.

| column\_name           | column\_description                        |
| ---------------------- | ------------------------------------------ |
| certification\_id      | A unique identifier for the certification. |
| certification\_name    | The name of the certification.             |
| certification\_version | The version of the certification.          |

### Certification Fact

`certification_fact`: The certification fact table provides data about the users’ progress through different stages of a certification.

| column\_name                      | column\_description                                                                                                             |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| group\_id                         | The unique identifier of the group.                                                                                             |
| user\_certification\_id           | The unique identifier of a user attempting a certification. A user can have more than one attempt at obtaining a certification. |
| user\_id                          | The unique identifier of the user. References user\_dim.user\_id                                                                |
| certification\_id                 | The unique identifier of the certification. References certification\_dim.certification\_id.                                    |
| registered\_at                    | The timestamp when the user registered for the certification attempt.                                                           |
| expired\_at                       | The timestamp when the user certification attempt (will) expire.                                                                |
| assessments\_passed\_at           | (v1 only) The timestamp when the user passed the assessments.                                                                   |
| coding\_challenge\_passed\_at     | (v1 only) The timestamp when the user passed the coding challenge(s).                                                           |
| first\_exam\_started\_at          | (v2 only) The timestamp when the user started their first certification exam in an attempt.                                     |
| first\_exam\_completed\_at        | (v2 only) The timestamp when the user completed their first certification exam in an attempt.                                   |
| exam\_last\_passed\_at            | (v2 only) The timestamp when the user passed their last certification exam.                                                     |
| case\_study\_ready\_at            | The timestamp when the user passed all stages prior to the practical exam.                                                      |
| first\_case\_study\_submitted\_at | The timestamp when the first practical exam was submitted for grading.                                                          |
| last\_case\_study\_submitted\_at  | The timestamp for then the last practical exam was submitted for grading.                                                       |
| certificate\_granted\_at          | The date at which the certificate was granted by the admin.                                                                     |
| is\_passed\_assessments           | An indicator whether user passed all timed assessments.                                                                         |
| is\_passed\_challenges            | An indicator whether the user passed all coding challenges.                                                                     |
| is\_passed\_exams                 | An indicator whether the user passed all certification exams.                                                                   |

## Courses

### Exercise Dim

`exercise_dim`: The exercise dimension provides descriptive data about a specific exercise. Because the model considers users’ progress on all exercises (i.e., even exercises that are no longer available), there is a specific row with the id = -1. This row is used in the exercise fact table to refer to a deleted exercise.

| column\_name               | column\_description                                                                                                  |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| exercise\_id               | The unique id of the exercise id.                                                                                    |
| title                      | The title of the exercise.                                                                                           |
| type                       | The type of exercise type (e.g., NormalExercise, VideoExercise, MultipleChoiceExercise, …)                           |
| number                     | The number of the exercise in the chapter, accounting for subexercises. This can be used to sort exercises in order. |
| xp                         | The maximum number of XP a user can get by completing the exercise.                                                  |
| technology                 | The course technology (e.g., Tableau, SQL, Python, R, …)                                                             |
| topic                      | The course topic (e.g., Data visualization, Programming, Machine Learning, …)                                        |
| course\_title              | The course title the exercise belongs to.                                                                            |
| course\_slug               | The course slug the exercise belongs to                                                                              |
| course\_xp                 | The maximum number of XP a user can get by completing the course the exercise belongs to.                            |
| course\_description        | The course description the exercise belongs to.                                                                      |
| course\_short\_description | A shorter version of the course description the exercise belongs to.                                                 |
| course\_launched\_date     | Date at which the course went live.                                                                                  |
| chapter\_title             | The chapter title the exercise belongs to.                                                                           |
| chapter\_slug              | The chapter slug the exercise belongs to.                                                                            |
| chapter\_xp                | The maximum number of XP a user can get by completing the chapter the exercise belongs to.                           |
| chapter\_nb\_exercises     | The number of exercises in the chapter the exercise belongs to.                                                      |
| id                         | \[DEPRECATED] Use exercise\_id instead.                                                                              |

### Exercise Fact

`exercise_fact`: The exercise fact table provides data about the users’ progress: XP gained and time spent on each exercise. The table provides data for exercises that can be no longer available (and deleted from our database). In this case, the exercise\_id value is set to -1 and links to a “deleted exercise” row in the `exercise_dim` table.Fact table for exercise content. It provides engagement and xp measurements on exercise.

| column\_name  | column\_description                                                                                 |
| ------------- | --------------------------------------------------------------------------------------------------- |
| user\_id      | The unique user id. Reference to user\_dim.id.                                                      |
| exercise\_id  | The unique exercise\_id. Reference to exercise\_dim.id.                                             |
| date\_id      | The date id. Reference to date\_dim.id.                                                             |
| started\_at   | The timestamp at which the user started the exercise (as registered by the DataCamp application).   |
| completed\_at | The timestamp at which the user completed the exercise (as registered by the DataCamp application). |
| time\_spent   | How much time (in seconds) the user spent on the exercise?                                          |
| xp            | How many XP did the user gain by completing the exercise?                                           |

### Chapter Dim

`chapter_dim`: The chapter dimension provides descriptive data about a specific chapter. Because the model considers users’ progress on all chapters (i.e., even chapters that are no longer available), there is a specific row with the id = -1. This row is used in the chapter fact table to refer to a deleted chapter.

| column\_name               | column\_description                                                                      |
| -------------------------- | ---------------------------------------------------------------------------------------- |
| chapter\_id                | The unique id of the chapter id.                                                         |
| title                      | The title of the chapter.                                                                |
| slug                       | The slug of the chapter.                                                                 |
| xp                         | The maximum number of XP a user can get by completing the chapter.                       |
| technology                 | The course technology (e.g., Tableau, SQL, Python, R, …).                                |
| topic                      | The course topic (e.g., Data visualization, Programming, Machine Learning, …).           |
| nb\_exercises              | The number of exercises in the chapter.                                                  |
| course\_title              | The title of the course the chapter belongs to.                                          |
| course\_slug               | The slug of the course the chapter belongs to.                                           |
| course\_xp                 | The maximum number of XP a user can get by completing the course the chapter belongs to. |
| course\_description        | The description of the course the chapter belongs to.                                    |
| course\_short\_description | A shorter description of the course the chapter belongs to.                              |
| course\_launched\_date     | The date on which the course went live.                                                  |
| id                         | \[DEPRECATED] Use chapter\_id instead.                                                   |

### Chapter Fact

`chapter_fact`: The chapter fact table provides data about the users’ progress: XP gained and time spent on each chapter. The table provides data for chapters that can be no longer available (and deleted from our database). In this case, the chapter\_id value is set to -1 and links to a “deleted chapter” row in the chapter\_dim table.

| column\_name  | column\_description                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------- |
| user\_id      | The unique id of the user. References to user\_dim.user\_id.                                   |
| chapter\_id   | The unique id of the chapter. References to chapter\_dim.chapter\_id.                          |
| date\_id      | The date on which the user worked on the chapter. References to dim\_date.id                   |
| started\_at   | The timestamp when the user started the chapter (as registered by the DataCamp application).   |
| completed\_at | The timestamp when the user completed the chapter (as registered by the DataCamp application). |
| time\_spent   | The time (in seconds) the user spent on the chapter.                                           |
| xp            | The XP the user gained by working on the chapter.                                              |

### Course Dim

`course_dim`: The course dimension provides descriptive data about a specific course. Because the model considers users’ progress on all courses (i.e., even courses that are no longer available), there is a specific row with the id = -1. This row is used in the course fact table to refer to a deleted course.

| column\_name       | column\_description                                                            |
| ------------------ | ------------------------------------------------------------------------------ |
| course\_id         | The unique id of the course.                                                   |
| title              | The title of the course.                                                       |
| technology         | The course technology (e.g., Tableau, SQL, Python, R, …).                      |
| topic              | The course topic (e.g., Data visualization, Programming, Machine Learning, …). |
| xp                 | The maximum number of XP a user can get by following the course.               |
| nb\_hours\_needed  | Time needed in hours to complete the course.                                   |
| slug               | The slug of the course                                                         |
| description        | A description of the course.                                                   |
| short\_description | A short description of the course.                                             |
| launched\_date     | The date on which the course went live.                                        |
| id                 | \[DEPRECATED] Use course\_id instead.                                          |

### Course Fact

`course_fact`: The course fact table provides data about the users’ progress: XP gained and time spent on each course. The table provides data for courses that can be no longer available (and deleted from our database). In this case, the course value is set to -1 and links to a “deleted course” row in the course\_dim table.

| column\_name  | column\_description                                                                                                                                    |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| user\_id      | The unique id of the user id. References user\_dim.user\_id                                                                                            |
| course\_id    | The unique id of the course. References course\_dim.id                                                                                                 |
| date\_id      | The unique id of the date on which the user worked on the course. References to dim\_date.id                                                           |
| started\_at   | The timestamp when the user started the course (as registered by the DataCamp application).                                                            |
| completed\_at | The timestamp when the user started the course (as registered by the DataCamp application). It is NULL when the user has NOT completed the course yet. |
| time\_spent   | The time (in seconds) the user spent on the course.                                                                                                    |
| xp            | The XP the user gained by working on the course.                                                                                                       |

## Practice

### Practice Dim

`practice_dim`: List of all practices

| column\_name | column\_description                                   |
| ------------ | ----------------------------------------------------- |
| practice\_id | The practice id (internal mobile\_app.pools id) \[PK] |
| title        | The practice name                                     |
| status       | The practice status (HIDDEN, LIVE)                    |
| technology   | The practice’s technology type                        |
| xp           | Xp gained by completing the practice                  |
| id           | \[DEPRECATED] Use practice\_id instead.               |

### Practice Fact

`practice_fact`: Fact table for practice content. It provides engagement and xp measurements on projects. This table includes practices (aka challenges) after practice replaced challenges.

| column\_name  | column\_description                                                                                       |
| ------------- | --------------------------------------------------------------------------------------------------------- |
| user\_id      | The user id (internal id) \[PK], \[FK to user\_dim.id]                                                    |
| practice\_id  | The practice id the user started (internal mobile\_app pools id). \[PK], \[FK to practice\_dim.id]        |
| date\_id      | The date at which the user worked on the practice \[PK], \[FK to dim\_date.id]                            |
| started\_at   | The date at which the user started the practice                                                           |
| completed\_at | The date at which the user completed the practice. It is NULL when the user did not complete the practice |
| is\_mobile    | Whether the user did the practice on mobile or in the browser                                             |
| time\_spent   | How much time (in seconds) the user spent on the practice                                                 |
| xp            | How many XP did the user gain by completing the practice                                                  |

## Projects

{% hint style="warning" %}
The Data Connector includes **certification** projects, which differ from standard projects.

Certification projects are used exclusively during the Certification process.\
\
Reports in the Group Hub do not include certification projects. As a result, the reports in the Group hub may show a slight difference in numbers compared to those reported by the Data Connector.
{% endhint %}

### Project Dim

`project_dim`: The project dimension provides descriptive data about a specific project.

| column\_name       | column\_description                                                 |
| ------------------ | ------------------------------------------------------------------- |
| project\_id        | The unique id of the project.                                       |
| title              | The title of the course.                                            |
| technology         | The course technology (R, Python, SQL)                              |
| xp                 | The maxmimum number of XP a user can get by completing the project. |
| nb\_hours\_needed  | The number of hours needed to complete the project.                 |
| is\_guided         | A boolean indicating whether the project is guided or not.          |
| is\_certification  | A boolean indicating whether the project is used for certification. |
| description        | A description of the project.                                       |
| short\_description | A short description of the project.                                 |
| id                 | \[DEPRECATED] Use project\_id instead.                              |

### Project Fact

`project_fact`: The project fact table provides data about the users’ project progress: time spent and XP gained.

| column\_name  | column\_description                                                                                                                                        |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user\_id      | The unique id of the user. References user\_dim.user\_id                                                                                                   |
| project\_id   | The unique id of the project. References project\_dim.project\_id                                                                                          |
| date\_id      | The id of the date on which the user worked on the project. References date\_dim.date\_id                                                                  |
| started\_at   | The timestamp when the user started the project (as registered by the DataCamp application).                                                               |
| completed\_at | The timestamp when the user completed the project (as registered by the DataCamp application). It is NULL when the user has NOT completed the project yet. |
| time\_spent   | The time (in seconds) the user spent on the project.                                                                                                       |
| xp            | The XP the user gained by working on the project.                                                                                                          |

## Tracks

### Track Content Dim

**`track_content_dim`**: List of content in all live tracks. This table has one row per track\_version and content item. It currently only includes courses and projects. Note that a content item can belong to multiple tracks, and different versions of a track might contain different content items.

| column\_name       | column\_description                                            |
| ------------------ | -------------------------------------------------------------- |
| track\_version\_id | The id of the track version.                                   |
| track\_id          | The id of the track.                                           |
| content\_id        | The id of the content, a concatenation of content type and id. |
| content\_type      | The content type (course / project).                           |
| content\_title     | The title of the content.                                      |
| position           | The position of the content in the track version.              |
| xp                 | The total xp earned on completion of content.                  |

### Track Content Fact

`track_content_fact`: Fact table for track content.

| column\_name       | column\_description                                                                      |
| ------------------ | ---------------------------------------------------------------------------------------- |
| group\_id          | The id of the group.                                                                     |
| user\_id           | The id of the user.                                                                      |
| track\_version\_id | The id of the track version.                                                             |
| content\_id        | The id of the content, a concatenation of content type and id.                           |
| date\_id           | The unique id of the date on which the enrolled in the track. References to dim\_date.id |
| started\_at        | The timestamp when the user enrolled in the track.                                       |
| completed\_at      | The timestamp when the user completed the track.                                         |
| xp                 | The xp gained by completing the content.                                                 |
| nb\_seconds        | The total number of seconds spent on the content.                                        |

### Track Dim

`track_dim`: List of all versions of live tracks, along with their title, technology, and descriptions. This table has one row for every track version, for tracks that are live.

| column\_name         | column\_description                                          |
| -------------------- | ------------------------------------------------------------ |
| track\_version\_id   | The id of the track version.                                 |
| track\_id            | The id of the track.                                         |
| version\_number      | The version of the track.                                    |
| title                | The title concatenated with subtitle of the track version.   |
| technology           | The technology of the track.                                 |
| category             | The category of the track.                                   |
| short\_description   | A short description of the track                             |
| published\_live\_at  | The timestamp for when the track version was published live. |
| archived\_at         | The timestamp for when the track version was archived.       |
| is\_current\_version | A boolean indicating if this is the current version.         |
| is\_custom           | A boolean indicating if this is a custom track.              |
| nb\_courses          | The number of courses in the track version.                  |
| nb\_projects         | The number of projects in the track version.                 |
| xp                   | The total xp gained on completion of the track.              |

### Track Fact

`track_fact`: Fact table for tracks.

| column\_name          | column\_description                                                                      |
| --------------------- | ---------------------------------------------------------------------------------------- |
| group\_id             | The id of the group.                                                                     |
| user\_id              | The id of the user.                                                                      |
| track\_version\_id    | The id of the track version.                                                             |
| date\_id              | The unique id of the date on which the enrolled in the track. References to dim\_date.id |
| started\_at           | The timestamp when the user enrolled in the track.                                       |
| completed\_at         | The timestamp when the user completed the track.                                         |
| is\_currently\_active | A boolean indicating if the user is currently active in the track                        |

## DataLab

***Note:** In March of 2024, **DataCamp Workspace was renamed DataLab**. **Individual workspaces are now called workbooks**. We have kept the column names in the previous format to prevent any problems with existing connections but have updated other references where appropriate.*

### Publication Fact

`publication_fact`: The publication fact table provides data about the users’ DataLab publications: number of viewers and time spent viewing by date and viewer type (creator / viewer).

| column\_name  | column\_description                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------- |
| group\_id     | The unique identifier of the group.                                                                |
| creator\_id   | The unique identifier of the user who created the DataLab workbook. References user\_dim.user\_id. |
| workspace\_id | The unique identifier of the DataLab Workbook. References workspace\_dim.workspace\_id             |
| viewed\_at    | The date on which the DataLab publication was viewed.                                              |
| nb\_viewers   | The number of unique viewers who viewed the publication.                                           |
| nb\_seconds   | The number of seconds spent viewing the publication.                                               |
| viewer\_type  | The type of viewer (creator / viewer)                                                              |

### DataLab Dim

`workspace_dim`: The DataLab dimension table provides descriptive data about a specific DataLab workbook.

| column\_name     | column\_description                                                                                |
| ---------------- | -------------------------------------------------------------------------------------------------- |
| workspace\_id    | The unique identifier of the DataLab workbook.                                                     |
| workspace\_title | The title of the workbook.                                                                         |
| technology       | The language of the workbook (R / Python)                                                          |
| owner\_type      | Whether the owner is individual or group.                                                          |
| category         | The category of the source template. - base: - dataset - recipe - playbook - project - boilerplate |
| key              | The template key (NULL for non-template types).                                                    |
| is\_featured     | A boolean indicating if the workbook is featured on the profile.                                   |
| group\_id        | The unique identifier of the group, the workbook creator belonged to.                              |

### DataLab Workbook Fact

`workspace_fact`: The workbook fact table provides data about the workbook created by users.

| column\_name                       | column\_description                                                        |
| ---------------------------------- | -------------------------------------------------------------------------- |
| creator\_id                        | The user id of the creator of the workbook. References user\_dim.user\_id. |
| workspace\_id                      | The id of the workspace. References workspace\_dim.workspace\_id.          |
| nb\_megabytes                      | The size of files in the workbook measured in megabytes.                   |
| nb\_attempts\_to\_publish          | The number of times the workbook was published.                            |
| nb\_times\_published\_successfully | The number of times the workbook was published successfully.               |
| nb\_upvotes                        | The number of upvotes received.                                            |
| nb\_shares                         | The number of times the workbook was shared.                               |
| created\_at                        | The timestamp for when the workbook is created.                            |
| updated\_at                        | The timstamp for when the workbook is updated.                             |
| first\_edited\_at                  | The timestamp for when the workbook was first edited.                      |
| last\_edited\_at                   | The timestamp for when the workbook was last edited.                       |
| first\_published\_at               | The timestamp for when the workbook was first published.                   |
| last\_published\_at                | The timestamp for when the workbook was last edited.                       |
| first\_integration\_added\_at      | The timestamp for when the first integration was added to the workbook.    |
| last\_integration\_added\_at       | The timestamp for when the last integration was added to the workbook.     |
| first\_upvoted\_at                 | The timestamp for when the first upvote was received.                      |
| last\_upvoted\_at                  | The timestamp for when the last upvote was received.                       |
| group\_id                          | The id of the group owner of the workbook.                                 |

### Workspace Visit Fact

`workspace_visit_fact`: The workspace (workbook) visit fact table provides data on user visits to workbooks.

| column\_name  | column\_description                                                        |
| ------------- | -------------------------------------------------------------------------- |
| visitor\_id   | The user id of the visitor to the workbook. References user\_dim.user\_id. |
| workspace\_id | The id of the workbook. References workspace\_dim.workspace\_id.           |
| visited\_at   | The date of the visit, granular to the day level.                          |
| nb\_seconds   | The duration of the visit in seconds.                                      |
| group\_id     | The id of the group.                                                       |

## User Teams

### Team Dim

`team_dim`: The team dimension provides descriptive data about teams.

| column\_name  | column\_description                 |
| ------------- | ----------------------------------- |
| team\_id      | The unique identifier of the team   |
| name          | The team name                       |
| slug          | The team slug                       |
| created\_date | The team’s creation date            |
| updated\_date | The team’s updated date             |
| deleted\_date | The team’s deleted date             |
| id            | \[DEPRECATED] Use team\_id instead. |

### User Dim

`user_dim`: List of all enterprise users

| column\_name                  | column\_description                                                                               |
| ----------------------------- | ------------------------------------------------------------------------------------------------- |
| user\_id                      | The user id (internal id) \[PK]                                                                   |
| first\_name                   | The user first name                                                                               |
| last\_name                    | The user last name                                                                                |
| email                         | The user email                                                                                    |
| slug                          | The slug to the user profile                                                                      |
| registered\_at                | When the user registered                                                                          |
| deleted\_at                   | When the user was deleted                                                                         |
| last\_visit\_at               | When the user visited (browsed) the plarform for the last time                                    |
| last\_time\_spent\_at         | When the user spent time on the platform (campus, challenges, projects, mobile) for the last time |
| onboarding\_completed\_at     | When the user completed their onboarding                                                          |
| first\_content\_completed\_at | When the user completed their first content                                                       |
| id                            | \[DEPRECATED] Use user\_id instead                                                                |

### User Team Bridge

`user_team_bridge`: Bridge table to link users to their teams

| column\_name       | column\_description                    |
| ------------------ | -------------------------------------- |
| user\_id           | The user id (internal id) \[PK]        |
| team\_id           | The team id (internal id) \[PK]        |
| joined\_team\_date | Date at which the user joined the team |
| left\_team\_date   | Date at which the user left the team   |

## Others

### XP Fact

`xp_fact`: This fact table provides information on XP gained by a user across different content modalities.

| column\_name  | column\_description                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------- |
| group\_id     | The unique identifier of the group. (references dim\_groups.group\_id)                             |
| user\_id      | The unique identifier of the user. (References dim\_users.user\_id)                                |
| event         | The event for which XP was gained ( course\_exercise\_completed, alpa\_onboarding\_completed etc.) |
| created\_date | The date on which the XP was gained                                                                |
| xp            | The number of XP gained.                                                                           |


# \[Data Connector 1.0] Changelog

## 2023-05-26

Updated the data model for `certification_dim` and `certification_fact`. This is a significant update to bring both tables in line with the current state of the certification product.

The following fields have been deprecated:

* `certification_dim`: `created_at`, `updated_at`
* `certification_fact`: `started_at`, `assessments_completed_at`, `challenge_started_at`, `challenge_completed_at`, `case_study_started_at`, `case_study_completed_at`

The following fields have been added:

* `certification_fact`: `registered_at`, `expired_at`, `assessments_passed_at`, `coding_challenge_passed_at`, `first_exam_started_at`, `first_exam_completed_at`, `exam_last_passed_at`, `case_study_ready_at`, `first_case_study_submitted_at`, `last_case_study_submitted_at`, `is_passed_exams`

The following fields have been renamed:

* `certification_dim`: `certificate_id` to `certification_id`
* `certification_fact:` `certificate_id` to `certification_id`

## 2023-05-16

Added new data model for `workspace_visit_fact`, containing four fields (`visitor_id`, `workspace_id`, `visited_at`, and `nb_seconds`). Also added additional fields in `workspace_dim` (`owner_type`) and `workspace_fact` (`nb_shares`, `nb_viewers`).

## 2022-02-24

Added new data models for `assessments`, `certification`, and `workspaces`.


# \[Data Connector 1.0] Example queries

This page contains a number of example queries that can help you get started analyzing the data available via the Data Connector 1.0 with SQL via AWS Athena.

{% hint style="warning" %}
All example queries reference a database when referring to tables. For example when querying the dim\_user table, the query references the table as `data-connector-1234.dim_user`.

This database reference is unique per customer so make sure to replace this with the name of your database. To find the name of your database, you can use the bucket name and remove the `-production` reference at the end.

For example:

* Bucket name: `data-connector-1234-production`
* Database name: `data-connector-1234`
  {% endhint %}

## Get All Active Users

This query returns a list of all users that have gained XP in the last 7 days.

```sql
SELECT user_id, u.email, MAX(xp.created_date) AS xp_date
FROM data_connector_1234.xp_fact AS xp
LEFT JOIN data_connector_1234.user_dim AS u USING(user_id)
WHERE xp.created_date >= date_add('day', -7, CURRENT_DATE)
GROUP BY user_id, u.email
ORDER BY xp_date DESC
```

## All users

This query returns a list of all users who are currently in your group.

```sql
SELECT user_id, registered_at, email, last_visit_at
FROM data_connector_1234.user_dim AS u
WHERE deleted_at IS NULL
ORDER BY registered_at
```

{% hint style="info" %}
**Removed users**

Please notice the deleted\_at filter, if you leave this out the query will also return the users that have been in your group but have since been removed.

The data of these removed users cuts off at the moment they left your group. If they continued learning afterwards on their own terms or subscription, this data will not be available via the Data Connector 1.0.
{% endhint %}

## Time spent per user

The Data Connector 1.0 contains detailed information on where your users are spending their time learning.

{% hint style="info" %}
Time-spent data is limited to the following content types: Courses, Practices and Projects.

Assessments, Workspace, Certification and other products are not included in these numbers!
{% endhint %}

```sql
WITH time_spent_per_user AS (
	SELECT SUM(time_spent) AS total_time_spent, user_id, 'exercises' AS time_spent_type
	FROM data_connector_1234.exercise_fact
	GROUP BY user_id
​
	UNION
​
	SELECT SUM(time_spent) AS total_time_spent, user_id, 'practice' AS time_spent_type
	FROM data_connector_1234.practice_fact
	GROUP BY user_id
​
	UNION
​
	SELECT SUM(time_spent) AS total_time_spent, user_id, 'project' AS time_spent_type
	FROM data_connector_1234.project_fact
	GROUP BY user_id
)
​
SELECT user_id, email, SUM(total_time_spent) AS time_spent_seconds
FROM time_spent_per_user
LEFT JOIN data_connector_1234.user_dim USING(user_id)
GROUP BY user_id, email
ORDER BY user_id
```

## Time spent per team

Similar to time per user, we can also aggregate time spent totals per team.

{% hint style="info" %}
**On team membership and scope**

* Keep in mind this only show the XP gained by the users currently in the respective team, this means once someone leaves a team, the team's XP will go down.
* A single user can be member of multiple teams which means their XP will be essentially double-dipped into several team buckets. Keep this in mind as adding up these team-XP values won't add up to the total XP gained across all users.

*If you want time\_spent to remain allocated to the team, even if a user has left the team, you can use the `user_team_bridge` table which has `joined_team_date` & `left_team_date` columns you can use to calculate the period of time the user was part of a team.*
{% endhint %}

```sql
WITH team_data AS (
	SELECT user_id, team_id, name
	FROM data_connector_1234.team_dim
	INNER JOIN data_connector_1234.user_team_bridge USING(team_id)
	WHERE deleted_date IS NULL AND left_team_date IS NULL
	ORDER BY user_id
), 
time_spent_data AS (
	SELECT SUM(time_spent) AS total_time_spent, user_id
	FROM data_connector_1234.exercise_fact
	GROUP BY user_id

	UNION 

	SELECT SUM(time_spent) AS total_time_spent, user_id
	FROM data_connector_1234.practice_fact
	GROUP BY user_id

	UNION

	SELECT SUM(time_spent) AS total_time_spent, user_id
	FROM data_connector_1234.project_fact
	GROUP BY user_id
)

SELECT team_id, name, SUM(total_time_spent) AS time_spent_seconds
FROM time_spent_data
INNER JOIN team_data USING(user_id)
GROUP BY team_id, name
ORDER BY name
```

## Time spent per technology

Another way of looking at time spent is by technology or topic. Each content type at DataCamp has an associated technology or topic, using these dimension tables combined with the fact tables we can get information on which technologies learners are spending most of their time.

{% hint style="info" %}
In order to get these numbers per topic instead of technology, you can swap out the technology column from the fact tables with the topic column.
{% endhint %}

```sql
with time_spent_data AS (
	SELECT SUM(time_spent) AS total_time_spent, technology
	FROM data_connector_1234.exercise_fact
	LEFT JOIN data_connector_1234.exercise_dim USING(exercise_id)
	WHERE technology IS NOT NULL
	GROUP BY technology

	UNION 

	SELECT SUM(time_spent) AS total_time_spent, technology
	FROM data_connector_1234.practice_fact
	LEFT JOIN data_connector_1234.practice_dim USING(practice_id)
	WHERE technology IS NOT NULL
	GROUP BY technology

	UNION 

	SELECT SUM(time_spent) AS total_time_spent, technology
	FROM data_connector_1234.project_fact
	LEFT JOIN data_connector_1234.project_dim USING(project_id)
	WHERE technology IS NOT NULL
	GROUP BY technology
)

SELECT SUM(total_time_spent) AS total_time_spent_seconds, technology
FROM time_spent_data 
GROUP BY technology
ORDER BY technology
```

## Completed assessments

This query gives you all complete assessments along with their user, score and percentile.

```sql
SELECT user_id, email, assessment_id, title, score, score_group, percentile
FROM data_connector_1234.assessment_fact
LEFT JOIN data_connector_1234.assessment_dim USING (assessment_id)
LEFT JOIN data_connector_1234.user_dim AS u USING(user_id)
WHERE completed_at IS NOT NULL AND title IS NOT NULL
ORDER BY completed_at ASC
```

## Completed courses by user

This query returns all courses that have been completed by users in your group. For this query it is important to understand that the `course_fact` table contains multiple entries per user/course, this table essentially contains sessions the user learned in the respective course. For each of the sessions there is a time\_spent and XP value associated, indicating how long the user learned and how much XP they gained doing so. Once the course is completed every record for that user/course will have it's `completed_at` date set. Using this knowledge we can now query all completed courses by filtering on distinct `course_id` and `completed_at` values.

```sql
SELECT DISTINCT(course_id), title, user_id, email, completed_at
FROM data_connector_1234.course_fact AS f
LEFT JOIN data_connector_1234.user_dim USING(user_id)
LEFT JOIN data_connector_1234.course_dim AS c USING(course_id)
WHERE completed_at IS NOT NULL
ORDER BY email ASC, completed_at DESC
```

## XP earned by user

This simple query sums up the total XP for users and decorates it with user data by joining the `user_dim` table.

```sql
SELECT SUM(xp) AS total_xp, user_id, email
FROM data_connector_1234.xp_fact
LEFT JOIN data_connector_1234.user_dim USING(user_id)
GROUP BY user_id, email
ORDER BY total_xp DESC
```


# \[Data Connector 1.0] Getting started

Here are the articles in this section:

{% content-ref url="/pages/sYL3KEGXiGcl1vGwFuFD" %}
[\[Data Connector 1.0\] Enabling the Data Connector](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-enabling-the-data-connector)
{% endcontent-ref %}

{% content-ref url="/pages/yLXL527NKIjLsGfRuF02" %}
[\[Data Connector 1.0\] Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials)
{% endcontent-ref %}

{% content-ref url="/pages/baiR5cO01dn7mrdIEoKW" %}
[\[Data Connector 1.0\] Storing your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-storing-your-credentials)
{% endcontent-ref %}


# \[Data Connector 1.0] Enabling the Data Connector

Enable the Data Connector 1.0 to export your learning data to Amazon S3.

{% hint style="danger" %}
Data Connector 2.0 is now here! For more details, please check out the [Getting Started with Data Connector 2.0](https://github.com/datacamp-engineering/enterprise-docs/blob/main/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0) section.\
\
We are no longer enabling new connections to Data Connector 1.0.
{% endhint %}


# \[Data Connector 1.0] Your Credentials

Access your Data Connector credentials to load data from the Data Connector.

**Step 1:** Navigate to the Reporting section (on the left-hand panel) and select the **Data Connector** tab at the top of the page.

<figure><img src="/files/bLCG2EfJSd4YQKwa5SsA" alt=""><figcaption></figcaption></figure>

**Step 2:** Click **View Details**.

{% hint style="danger" %}
The first modal will show you your Data Connector 2.0 credentials. To see your Data Connector 1.0 credentials please click on **View Data Connector 1.0 details.**\
\
We highly encourage to consider migrating to Data Connector 2.0. For more details please see the [Migrating from Data Connector 1.0](/integrating-our-data-into-your-tools-via-data-connector-2.0/migrating-from-data-connector-1.0) section
{% endhint %}

<figure><img src="/files/vqyW14Z9sq4Ei1z9xqvi" alt=""><figcaption></figcaption></figure>

**Step 3:** View your credentials in the **View Data Connector 1.0 Details** dialog.

<figure><img src="/files/FOhqGFFuumJLejHiu77E" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="226.34945131434415">Value</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><strong>AWS Region</strong></td><td>This is the location in the world where the Amazon data center cluster is located. That is the place where your data is stored.</td><td><code>us-east-1</code></td></tr><tr><td><strong>S3 Bucket Name</strong></td><td>This is the name of the storage resource containing your data</td><td><code>data-connector-12345-production</code></td></tr><tr><td><strong>Access Key</strong></td><td>This is a username for you to access the S3 bucket. It consists of 20 upper case letters</td><td><code>QOXGBQHVDLYJPCFFKOAE</code></td></tr><tr><td><strong>Secret Password</strong></td><td>This is a password for you to access the S3 bucket. It consists of 40 alphanumeric characters.</td><td><code>HUUOTPJNTJKNLWIYCKPQPDDOXAISQSTRSVDXARUD</code></td></tr></tbody></table>

{% hint style="warning" %}
If you are using an Amazon Athena library you might be required to enter a **staging or output directory**. This is a special directory in the S3 bucket that is writable by the Athena library and is used to store output files for your queries.

Use the following value for your output directory

<mark style="color:orange;">`s3://{YOUR_S3_BUCKET_NAME}/tmp-tableau/athena/`</mark>
{% endhint %}


# \[Data Connector 1.0] Storing your Credentials

Storing your Amazon S3 credentials to access data in the Data Connector.

Your credentials should all be treated as sensitive information as they allow access to your learning data, which includes personally identifiable information. That means that for security reasons, rather than including the credentials in your application code, it is better to store them in a secure way (such as environment variables). This reduces the risk of the credentials accidentally being viewed by someone else or checked into an online code repository.

In order for our utility packages dcdcpy and dcdcr to connect to the Data Connector 1.0 you'll need to store the following environment variables. Check the [Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials) article to find these credentials.

```
AWS_BUCKET=data-connector-123456-production 
AWS_ACCESS_KEY_ID=XGTWTIPVHZXSOZFGDOAL 
AWS_SECRET_ACCESS_KEY="UbCtK9sUDmWXB5/cRDwwckoB6PYGhE/vIdkhg3oV"
AWS_DEFAULT_REGION=us-east-1
```

{% hint style="info" %}
Here are guides to set environment variables on different platforms.

* [Windows](https://www.computerhope.com/issues/ch000549.htm)
* [MacOS or Linux](https://www.doppler.com/blog/how-to-set-environment-variables-in-linux-and-mac)
  {% endhint %}


# \[Data Connector 1.0] Using the Data Connector

Analyze and visualize data the way you want.

The Data Connector 1.0 exports files in CSV format to an S3 bucket. You can use these files in two ways, depending on your needs and the way your organization approaches reporting.

### Analyzing your data <a href="#analyzing-your-data" id="analyzing-your-data"></a>

You can report on your data using your own BI tools or other reporting tools using an ODBC connection. Most tools require you to install the Amazon Athena ODBC driver to do this or have integrated plugins. We have guides on how to complete this connection for [DataLab](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-datalab), [Tableau](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-tableau) and [Microsoft PowerBI](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-microsoft-power-bi).

### Downloading your data <a href="#downloading-your-data" id="downloading-your-data"></a>

Alternatively, you can download the raw data files. This is useful if you wish to load all your learning data into your own data lake. This usually means you have a data lake that already contains data from other sources and you wish to include your DataCamp learning data too.

You can either manually download the files using tools like [S3 Browser (Windows)](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-downloading-data/data-connector-1.0-s3-browser-windows), [3Hub (Mac)](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-downloading-data/data-connector-1.0-3hub-mac) or [AWS CLI (Linux)](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-downloading-data/data-connector-1.0-aws-cli-linux), or you can choose to programmatically download it.


# \[Data Connector 1.0] Analyzing data

Here are the articles in this section:

{% content-ref url="/pages/WytJmjXAyKIewxyYLoNx" %}
[\[Data Connector 1.0\] DataLab](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-datalab)
{% endcontent-ref %}

{% content-ref url="/pages/ScB0zRC49bCJbSQ9L4bn" %}
[\[Data Connector 1.0\] Microsoft Power BI](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-microsoft-power-bi)
{% endcontent-ref %}

{% content-ref url="/pages/ct2MPcYC1rrH9AKGUunx" %}
[\[Data Connector 1.0\] Tableau](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-tableau)
{% endcontent-ref %}


# \[Data Connector 1.0] DataLab

[DataLab](https://www.datacamp.com/datalab) is a cloud-based notebook built by DataCamp that allows you to experiment with code, analyze data, collaborate with others, and share insights with no installation required.

This page describes the steps to seamlessly analyze Data Connector 1.0 learning data with DataLab with zero setup.

* Before starting, make sure that:
  * You are an admin in the group whose data you wish to analyze.
  * The Data Connector is enabled as described [here](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-enabling-the-data-connector).
* Head over to the datalab dashboard at <https://app.datacamp.com/datalab/>.
* Check the account context dropdown to ensure you're in the context whose data you wish to analyze. If you want to analyze data from your organization, make sure your organization context is selected here and not your personal context.\
  ![](/files/7OnZWl31jY0LVR5KovGu)
* Click "New Workbook":\
  ![](/files/mEsypXeUymilNvxGPlya)
* A new workbook with an empty notebook is created, where you can start your analysis:<br>

  <figure><img src="/files/BC0PudXhEhpgxBzlnLPm" alt=""><figcaption></figcaption></figure>
* Create a new SQL cell, and select ***enterprise-custom-reporting-athena*** as the data source:

  <figure><img src="/files/lMpM8JH383ZXDhQ5xQBX" alt=""><figcaption></figcaption></figure>
* You can now write and run a SQL query to fetch the learning data you need through the Athena connection. For example, we can check the total XP for each user in your group. See [Example queries](/data-connector-1.0-documentation/data-connector-1.0-explore-data-model/data-connector-1.0-example-queries) for more examples of SQL queries you can write.

  <figure><img src="/files/GJ9SnJOTJCGq1PJdnclh" alt=""><figcaption></figcaption></figure>

You can browse all the available tables through the schema browser, which you can access from the "Databases" tab on the left-hand side or by clicking the ![](/files/6GW4VW209mPPNfSBl5oW) icon on the SQL cell.


# \[Data Connector 1.0] Microsoft Power BI

With the DataCamp Data Connector 1.0 it's easy to get started analyzing your data in Microsoft Power BI. All you need to do is set up a connection using the PowerBI Athena Connector and configure it using the credentials you can retrieve via the DataCamp Group hub.

{% hint style="info" %}
This guide assumes you are using Power BI desktop on Windows
{% endhint %}

Complete these two steps to view your learning data in Power BI.

1. Set up an ODBC Data Source
2. Configuring the connection in Power BI

## Set up an OCBC Data Source

First, you'll need to install the necessary drivers and configure a Data Source in windows.

### Step 1: Download and install the ODBC driver

Go to <https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html> and download & install the v1 driver for your operating system\
(Make sure you remember which version (32 or 64 bit) you chose!)

### Step 2: Configure your ODBC Data Source

{% hint style="info" %}
Make sure you have collected your credentials as described on the [Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials) page.
{% endhint %}

1. Open the "ODBC Data Sources" application on your windows machine (chose the version that aligns with the driver you installed! Either 32 or 64 bit)
2. Select the "Drivers" tab and verify there is a "Simba Athena ODBC Driver" entry in the list, if there isn't you haven't installed the driver properly.
3. Select the "System DNS" tab
4. Click the "Add" button
5. Select "Simba Athena ODBC driver" as Data Source
6. The "Simba Athena ODBC Driver DNS Setup" dialog will now open.\
   Enter the following data on the "Simba Setup" dialog:
   1. Data Source Name: Free to choose (eg: DataCamp Data Connector)\
      \&#xNAN;*Choose an easy name here, you'll need this to set up your connection in Power BI*
   2. Description: optional, you can leave it blank
   3. AWS Region: the **Region** from your credentials
   4. Catalog: AwsDataCatalog
   5. Schema: default
   6. Workgroup: primary
   7. Metadata Retrieval Method: Auto
   8. S3 Output location: `s3://{bucketname}/tmp-powerbi` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your credentials*
   9. Encryption Options: NOT\_SET
   10. Endpoint Override: empty
   11. Streaming Endpoint Override: empty
7. Click "Authentication Options" (don't close the dialog yet!)
   1. Authentication Type: IAM Credentials
   2. Username: the **Access Key** from your credentials
   3. Password: the **Secret Password** from your credentials
   4. Click the "OK" button
8. Click "Test"
9. If everything is configured properly, this should result in a "SUCCESS" message.
10. Click "OK"

The list of items under the "System DSN" tab should now contain your newly created Data Source.

You can close the ODBC application now and start Power BI.

🎉 Your Data Source is successfully set up! On to the next part.

## Set up the Power BI Athena Connector

{% hint style="warning" %}
Make sure you restart Power BI if you had it running before you set up your Data Source.
{% endhint %}

In Power BI Desktop click on the "Get Data" button on the Home ribbon.

The dialog that appears shows you all available Data Sources, use the search field to find the "Amazon Athena" option and click the "connect" button.

<div align="left"><img src="/files/bbIUsVFqNVew3TLkqgee" alt=""></div>

In the "Amazon Athena" dialog that appears enter the name of the ODBC connection, you created before. (Our example uses "DataCamp Data Connector")

<div align="left"><img src="/files/qjiMRn2JlnrYhnoNsB2H" alt=""></div>

Choose which Connectivity mode you want to use:

* **Import** loads the data into your local instance of Power BI, meaning you'll have a snapshot of the data locally. This is the most performant option.
* **DirectQuery** will query the live service meaning you'll have the most up-to-date data every day without the need to import it again. This is the slower option.

Click the "OK" button.

Power BI now will ask you how to Authenticate\
Choose "Use Data Source Configuration" here and click "Connect"

<div align="left"><img src="/files/IxgzNvMRzBL7YDNqUyCc" alt=""></div>

After a few moments, the Navigator panel will appear, showing your catalog, databases, and tables. Open the "AwsDataCatalog" node, wait for the data to load, and then open the data\_connector node. This will show you all the tables available in our Data Connector.

{% hint style="info" %}
Want to know what data all the tables contain? Learn more by exploring our Data Model in the [Data Model](/data-connector-1.0-documentation/data-connector-1.0-explore-data-model/data-connector-1.0-data-model) article!
{% endhint %}

Choose the tables you wish to use and click the "Load" button.

![](/files/eLN5GPXBSiNzyTJy1pEk)

This will take some time to complete, but after it is finished, you now have all the data from the Data Connector 1.0, right at your fingertips in Power BI.

![](/files/YDCitP70VSbRfeDce5vk)

## Resources

This is a list of official resources related to Power BI and Athena

{% embed url="<https://www.microsoft.com/en-us/power-platform/products/power-bi/>" %}
Offical Microsoft Power Bi website
{% endembed %}

{% embed url="<https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc-and-power-bi.html>" %}
Amazon guide to set up Amazon Athena in Power BI
{% endembed %}

{% embed url="<https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html#connect-with-odbc-driver-documentation>" %}
OBDC setup guide for Windows
{% endembed %}


# \[Data Connector 1.0] Tableau

Connect your learning data to Tableau to analyze your data and create reports.

With the DataCamp Data Connector it's super easy to get started analyzing your data in Tableau. All you need to do is set up a connection using the Tableau Athena Connector and configure it using the credentials you can retrieve via the DataCamp Group hub.

Below is an easy step-by-step guide to set up the connection and start analyzing your Learning dat&#x61;**.**

## Step 1: Install the ODBC driver

Download and install the Tableau Amazon Athena driver.\
You can download the official driver from the Tableau website: <https://www.tableau.com/support/drivers>

{% hint style="warning" %}
If you are having trouble getting the driver installed as described on the Tableau website, try placing the `.jar` file in the `~Users/{yourusername}/Library/Tableau/Drivers` where `{yourusername}` is the name of your profile on your workstation.
{% endhint %}

## Step 2: Setup Athena connector in Tableau

**Step 1:** Quit and re-open Tableau

**Step 2:** Set up the connection in Tableau

{% hint style="info" %}
First make sure you have collected your credentials as described in our [Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials) page.
{% endhint %}

Under "Connect", select "Amazon Athena" and enter the following data:

1. Server name: `athena.us-east-1.amazonaws.com`
2. Port: `443`
3. S3 Staging directory: `s3://{bucketname}/tmp-tableau` → *replace* `{bucketname}` *with the **S3 Bucket Name** from your credentials*
4. AWS access Key ID: the **Access Key** from your credentials
5. AWS secret access key: the **Secret Password** from your credentials

You can leave the "Initial SQL" tab untouched

![](/files/M5yJXXcn5MpLpejdnipD)

Click the "Sign in" button

## Resources

{% embed url="<https://www.tableau.com/>" %}
Official Tableau website
{% endembed %}

{% embed url="<https://help.tableau.com/current/pro/desktop/en-us/examples_amazonathena.htm>" %}
Official Tableau Amazon Athena Connector support page
{% endembed %}


# \[Data Connector 1.0] Downloading data

View or download data from the Data Connector.

The Data Connector outputs files to an Amazon S3 bucket. You can download these raw data files manually using desktop tools on Windows or Mac or set up an automated process using any programming language that can access S3 buckets. Below are step by step guides for several popular options.

If you prefer to directly query your data, we have several options too, check our [Analyzing Data](https://github.com/datacamp-engineering/enterprise-docs/blob/main/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data) article for more information.


# \[Data Connector 1.0] S3 Browser (Windows)

S3 Browser is a freeware Windows client for Amazon S3 and Amazon CloudFront. Below you will a step-by-step guide on how to access your data using S3 Browser. You can download S3 Browers on their official website: [www.s3browser.com](https://www.s3browser.com)

{% hint style="info" %}
This documentation was created for S3 Browser v9.9
{% endhint %}

**Step 1:** Open the S3 Browser app\
When you open the app for the first time the "Add new account" wizard will open automatically, if it doesn't you can add a new account from the "account" menu.

**Step 2:** Configure a new account using the “Add new account” wizard

<div align="left"><img src="/files/EPwzafebfrarSeucLGdO" alt="Using the &#x22;Add New Account&#x22; wizard"></div>

{% hint style="info" %}
See the [Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials) page for instructions where to find your credentials
{% endhint %}

* **Display name:** an easy-to-remember name for this connection. *Eg: DataCamp Data Connector*
* **Account Type**: Amazon S3 Storage
* **Access Key ID:** The “Access Key” from the Data Connector Settings
* **Secret Access Key:** The “Secret Password” from the Data Connector Settings
* Enable “Use secure transfer”
* Click “Add new account”

**Step 3:** S3 Browser will now try to connect to your S3 bucket but won’t have access to list all buckets. You will need to manually add an External Bucket. The application will prompt you to add an External Bucket now. Click “Yes” on the following dialog

<div align="left"><img src="/files/LJhY7imBjW8TFgj8Bg0r" alt=""></div>

Enter the “S3 Bucket Name” from the Data Connector Settings in the “Bucket name” field, and click “Add External bucket”.

**Step 4:** You have now successfully connected S3 Browser to your S3 bucket.

![](/files/ZBCVmdoMQQyXCqamrIKg)

{% hint style="info" %}
**Note**: Downloading your data can also be automated via a script. Most popular programming languages allow you to automatically read files from an S3 bucket and save them to your local drive, meaning you no longer need to manually download the files.
{% endhint %}


# \[Data Connector 1.0] 3Hub (Mac)

[3Hub](https://apps.apple.com/us/app/3hub/id427515976) is an Amazon S3 client for Mac OS X. You can download the application from the App Store on your Mac OS X powered device.

{% hint style="info" %}
This guide was created for 3Hub version 1.09
{% endhint %}

**Step 1:** Launch the 3Hub app, make sure the "S3" tab is selected in the toolbar. Here you can enter your credentials.

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWaMDKBDksTxfWZVCnAo6%2Fuploads%2FRm4nhurLXDrarEqbZLmL%2FScreenshot%202021-12-08%20at%2009.05.16.png?alt=media&#x26;token=ff4f2d1c-15ae-40c6-937a-485daae7994e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
See the [Your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-your-credentials) page for instructions where to find your credentials
{% endhint %}

* **Access Key ID:** The “Access Key” from the Data Connector Settings
* **Secret Access Key:** The “Secret Password” from the Data Connector Settings
* Enable “Secure (HTTPS)”
* Click “Connect”

**Step 2:** You have now successfully connected S3 Browser to your S3 bucket and can download the files you need.


# \[Data Connector 1.0] AWS CLI (Linux)

This guide describes how to access your data through the AWS CLI. Below you will see the steps we followed to access your data [using AWS Command Line Interface](https://aws.amazon.com/cli/)

**Step 1:** Install the Amazon AWS CLI using the instructions on this page: <https://aws.amazon.com/cli/>

**Step 2:** Once installed you need to initialize your AWS configuration by typing the following command:

```
aws configure
```

This command will ask you for your `Access Key ID`, `Secret Access Key`, and `Default region` which you can all retrieve from the Data Connector settings page on the Groups hub.

See our [Your Credentials](/integrating-our-data-into-your-tools-via-data-connector-2.0/getting-started-with-data-connector-2.0/your-credentials) page for instructions how to retrieve these settings.

The `Default output format` option you can leave empty.

**Step 3:** Now you can use the CLI to retrieve a list of all files in your S3 bucket.

To list all files you can for example us the following command

```
aws s3 ls s3://your-bucket-name
```

Or use the following command to download a file to your local hard drive home directory

```
aws s3 cp s3://your-bucket-name/filename.csv ~/filename.csv
```

{% hint style="info" %}
See the [S3 CLI reference pages](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/index.html) for documentation on all the S3 commands you can use
{% endhint %}


# \[Data Connector 1.0] Data Connector FAQ

Frequently asked questions about the DataCamp Data Connector

## **Can I directly integrate the Data Connector with my BI tool, like PowerBI or Tableau?**

Yes! Check out our documentation on [Tableau](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-tableau) and [Microsoft Power BI](/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-analyzing-data/data-connector-1.0-microsoft-power-bi)

## **Who has access to the Data Connector?**

DataCamp Data Connector can only be enabled by group admins or DataCamp employees. Anyone you share the credentials with can access the data through the Data Connector. Learn more how to safely store your credentials to keep your learning data secure: [Storing your Credentials](/data-connector-1.0-documentation/data-connector-1.0-getting-started/data-connector-1.0-storing-your-credentials)

## **What is the Data Connector and is it a fit for us?**

The Data Connector allows DataCamp business plan admins to access their raw learning data, including some additional data that is not easily available in the Group Hub. By enabling this functionality, you will no longer need to manually log into the DataCamp platform and manually export the learning data. This feature is fit for companies with robust analytics and business intelligence requirements.

## **Which kinds of companies are successful with the Data Connector?**

This will be most beneficial to companies who manually export their learning data and spend a significant time manipulating it to get different views (metrics over time, department level, etc.). These companies have a good understanding of the KPIs and learning progress data they want to see.

## **What can I achieve with the Data Connector?**

* Understand the impact of learning and development efforts, communicate progress, diagnose bottlenecks, drive decision-making, and predict development needs.
* Access most of your raw learning progress data, including some additional data that is not currently available in the Enterprise app.
* Create a variety of visualizations: trends over time, pie charts, bar graphs, etc.
* Slice and dice data with a variety of filters, for example, department, office, recruiter, etc.

## **What are some of the limitations of the BI Connector?**

* Not for activity tracking or tracking hourly data; not for instant analytics—data is refreshed every 24 hours.
* The Data Connector works best when your organization has users dedicated to creating reports for the whole team and are preferably are Data Analysts.

## **How often is the data updated?**

The data is synced to Amazon S3 daily (including weekends). Your organization can connect your in-house BI tool to Amazon S3 to pull your data from DataCamp. Data is typically updated between 1 AM and 7 AM UTC.

## **Can I access the files through my own S3 bucket?**

Currently, we only support data transfer via DataCamp Amazon S3. We will provide you with secure credentials to access your learning data.

## **Are my credentials stored securely?**

Your secret password is encrypted and stored securely on AWS SSM params store. DataCamp does not store this information in any database. It is only displayed upon request. All admins within your group will see the same credentials.

## **Can different admins create their own set of AWS credentials?**

No, the credentials are created based on the group ID. Therefore, all admins will have access to the same credentials regardless of who sets up the initial configuration.

## **Is the data in the Data Connector backed up?**

We do not create backups of the DataCamp Data Connector. You can however download the raw data files and back them up yourself. Learn how to in the [Downloading data](https://github.com/datacamp-engineering/enterprise-docs/blob/main/data-connector-1.0-documentation/data-connector-1.0-using-the-data-connector/data-connector-1.0-downloading-data) articles.

## **How do I enable the Data Connector?**

You can enable the DataCamp Data Connector either via the Group Hub or through your Customer Success Manager, if you have an Enterprise, Usage, or Unlimited DataCamp.

## **What happens when the Data Connector is disabled?**

Disabling the Data Connector will disable future data exports, but all other settings will remain. This will not delete your S3 bucket or erase the credentials you have configured, so you can use the same credentials and bucket if you choose to re-enable this feature.<br>


# \[Data Connector 1.0] Deprecating dcdcpy and dcdcr

Starting January 1st 2024 DataCamp will no longer support or maintain the [dcdcpy](https://github.com/datacamp/dcdcpy) or [dcdcr](https://github.com/datacamp/dcdcpr) utility packages for the Data Connector. Being available since the launch of the Data Connector over 2 years ago, we have come to the conclusion that maintaining these pages offer no real value over using the open-source alternatives they are built upon.

Therefore we are officially deprecating both dcdcpy and dcdcr. Both packages will remain available but will issue a warning when installing or using the package.


