Connect Power BI or Excel to the OData feed
If your PMO has Power BI dashboards or Excel workbooks that read Project
Online’s /ProjectData feed, that feed returns 410 Gone once Project Online
retires on 30 September 2026. Onplana serves a read-only OData v4 feed at
/api/odata with the same entity sets and the same column names, so an
existing dashboard is re-pointed rather than rebuilt.
Create a reporting token
Section titled “Create a reporting token”The credential is a personal access token with the Reporting feed (OData) scope. Nothing else is granted: a reporting token cannot change a task, list members, or connect an agent.
-
Open Settings, then Developer, then API tokens.
-
Choose New token, name it for the dashboard that will use it, and tick Reporting feed (OData) only.
-
Copy the token once. It is shown a single time. If it is lost, revoke it here and create another.
Connect Power BI
Section titled “Connect Power BI”-
Download the starter connection file onplana-projectdata.pbids and open it in Power BI Desktop, or choose Get Data, then OData feed, and enter
https://api.onplana.com/api/odata. -
When Power BI asks how to sign in, pick Basic. Enter anything as the user name and paste the token as the password. Set the level to the feed URL so the credential applies to every entity set.
-
Pick the entity sets you need. Most Project Online reports use Projects, Tasks, Assignments and Resources; timesheet reports add TimesheetLines.
-
Load. Relationships join on the same keys as before:
Tasks.ProjectIdtoProjects.ProjectId,Assignments.TaskIdtoTasks.TaskId, andAssignments.ResourceIdtoResources.ResourceId.
For a scheduled refresh in the Power BI service, add the feed as a data source with Basic authentication and the same token as the password.
Connect Excel
Section titled “Connect Excel”Choose Data, then Get Data, then From Other Sources, then From OData Feed. Enter the feed URL, choose Basic, and paste the token as the password.
What the feed contains
Section titled “What the feed contains”| Entity set | What it is | Key |
|---|---|---|
| Projects | One row per project, with owner, dates, progress, budget and currency | ProjectId |
| Tasks | One row per task, with dates, work, percent complete, costs and the parent task | TaskId |
| Assignments | One row per assigned task: the resource, the work and the actual hours logged | AssignmentId |
| Resources | Organization members | ResourceId |
| TimesheetLines | One row per timesheet entry, with the day, hours, status and whether the project is billable | TimesheetLineId |
| CustomFieldValues | One row per custom field value on a project or task | CustomFieldValueId |
| TaskBaselines | One row per task per saved baseline, with the baselined dates, work and cost | TaskBaselineId |
Columns follow the ProjectData prefixes: ProjectName, ProjectStartDate,
TaskFinishDate, TaskPercentCompleted, ResourceName, TimeByDay,
ActualWork. TaskPriority uses Project Online’s 0 to 1000 scale, with 500
as medium. The full list, with types, is in the feed’s $metadata document.
Paging and filters
Section titled “Paging and filters”The feed is server-paged. A page holds up to 500 rows by default and 1,000 at
most; a full page carries @odata.nextLink, and Power BI follows it
automatically. Ask for a total with $count=true.
$filter accepts one clause of the form Property eq 'value' on the
key-like columns of each set, for example
/api/odata/Tasks?$filter=ProjectId eq 'cm...'. Anything the feed cannot
honour, such as $expand or $apply, is refused with a clear error rather
than quietly returning more rows than you asked for.
Related
Section titled “Related”- Export compliance evidence uses the same token mechanism with the auditor scope.
- The migration checklist item OData feeds and downstream consumers in the Project Online estate assessment now points here.
Was this helpful?
Thanks for your feedback!