ml-connector
DeltekMicrosoft Power BI

Deltek and Microsoft Power BI integration

Deltek Vantagepoint holds your project, accounting, and firm data. Microsoft Power BI is where your team builds reports and dashboards. This connection reads finance and project records from Deltek and pushes them into Power BI as dataset rows, so reports always reflect current ERP data without manual exports. ml-connector handles the very different authentication on each side and moves the data on a schedule you set. Because Power BI is a reporting destination and not a source of truth, the flow runs one way, from Deltek into Power BI.

How Deltek works

Deltek Vantagepoint exposes a REST API on a tenant-specific deltekfirst.com URL with no shared hostname. Hub APIs cover firms, contacts, employees, projects, and opportunities, while accounting transaction APIs cover AP invoices, AR invoices, journal entries, cash receipts, expense reports, and payments, plus GL accounts and organizations through configuration endpoints. Authentication is OAuth2 password grant, and the Allow Password Grant Type setting must be enabled on the tenant. Vantagepoint supports workflow-triggered webhooks but has no general event bus, and there is no documented idempotency header, so finance records are read by paged polling and checked for duplicates by the caller.

How Microsoft Power BI works

Microsoft Power BI exposes a REST API at api.powerbi.com scoped to a workspace GUID. For an ERP feed the connector creates a push dataset, defines table schemas such as Invoices, PurchaseOrders, Payments, and GLAccounts, and POSTs rows to each table. Power BI authenticates with a Microsoft Entra service principal using the client_credentials grant and the analysis.windows.net/powerbi/api/.default scope, and the principal must be added as a member or admin on the target workspace. Power BI sends no outbound webhooks to the connector, so the integration is push-only with optional dataset refresh triggers.

What moves between them

Data moves one way, from Deltek into Microsoft Power BI. ml-connector polls Deltek Vantagepoint for AP invoices, AR invoices, journal entries, payments, projects, firms, and GL accounts, maps each entity to a Power BI push dataset table, and POSTs the rows. The cadence is a cron schedule you choose, commonly hourly or daily, so dashboards stay close to current without overrunning Power BI push limits. GL postings and project data are read from Deltek and never written back, since Power BI is a read-only analytics layer that owns no transactional records.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Deltek side it accepts the full tenant URL per customer, requests an OAuth2 password-grant token, and refreshes it when a call returns 401. On the Power BI side it requests a service principal token with the powerbi/api/.default scope, since the Microsoft Graph scope returns 401, and resolves the workspace name to a GUID before any call. Each Deltek entity maps to a Power BI table whose columns match the Deltek key fields, for example invoice number, vendor, amount, GL account, and project. Because neither system offers a usable webhook for this flow, ml-connector polls Deltek pages on a schedule and pushes net-new rows tracked by a watermark, or deletes and re-posts a table for a full refresh, which avoids the duplicate rows that result from append-only pushes. It respects the Power BI push limits of 10,000 rows per request and 120 POST requests per minute per dataset, and honors HTTP 429 Retry-After with exponential backoff on both sides. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A 300-person architecture and engineering firm runs Deltek Vantagepoint for projects, billing, and accounting, and its leadership team lives in Microsoft Power BI dashboards. Before the integration, an analyst exported AR invoices, project budgets, and GL balances from Deltek into spreadsheets each week and refreshed the Power BI files by hand, so the dashboards were always a few days stale and broke whenever a column moved. With Deltek and Microsoft Power BI connected, invoice, project, and ledger rows push into Power BI tables on a daily schedule, allocated by project and GL account. Partners open project profitability and cash dashboards that match the ERP, and the weekly export step is gone.

What you can do

  • Push Deltek AP invoices, AR invoices, journal entries, and payments into Microsoft Power BI dataset tables on a schedule.
  • Feed Deltek project, firm, and GL account data into Power BI so dashboards reflect current ERP records.
  • Map each Deltek entity and its key fields to a matching Power BI push dataset table and columns.
  • Bridge the Deltek tenant OAuth2 token and the Microsoft Entra service principal credential on every run.
  • Track a watermark to push only net-new rows, with full-refresh replace, audit trail, and error replay.

Questions

Which direction does data move between Deltek and Microsoft Power BI?
Data moves one way, from Deltek into Microsoft Power BI. Power BI is a reporting and analytics destination that owns no transactional finance records, so ml-connector reads invoices, journal entries, projects, and GL accounts from Deltek and pushes them into Power BI tables. Nothing is written back from Power BI into Deltek.
Does this integration use webhooks or scheduled polling?
It uses scheduled polling and push. Power BI sends no outbound webhooks to the connector, and Deltek Vantagepoint only offers workflow-triggered callbacks rather than a general event bus. ml-connector polls Deltek on a cron schedule you set, then POSTs the rows into Power BI push dataset tables, optionally triggering a dataset refresh.
How does ml-connector avoid duplicate rows in Power BI?
Power BI push dataset rows are append-only with no idempotency key, so repeated pushes would stack duplicates. ml-connector tracks a watermark and pushes only net-new Deltek records, or deletes all rows in a table and re-posts the full set for a clean replace. It also respects the Power BI limits of 10,000 rows per request and 120 POST requests per minute per dataset.

Related integrations

Connect Deltek and Microsoft Power BI

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started