Deltek and Tableau integration
Deltek runs project accounting and finance for services firms and government contractors. Tableau builds the dashboards finance and operations teams watch. Connecting the two means the projects, invoices, journal entries, and GL balances that live in Deltek reach the data layer a Tableau data source reads, and the extract behind each dashboard refreshes once new data lands instead of on a fixed timer. Tableau holds no vendors, invoices, or GL accounts of its own, so the flow runs one way: Deltek is the system of record and Tableau is the reporting surface. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.
What moves between them
The flow runs one way, from Deltek into the Tableau reporting pipeline. On the cadence you set, ml-connector reads Deltek projects, firms, employees, AP and AR invoices, journal entries, cash receipts, and GL accounts and writes them into the database or extract that a Tableau data source is built on, then triggers an extract refresh so the workbooks rebuild on the new figures. Reference data such as GL accounts and organizations is read from Deltek so each dashboard measure maps to a real account. Tableau has no finance entities to write back, so ml-connector never pushes records into Tableau as ERP data; it only lands data for the data source and orchestrates the refresh.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Deltek side it accepts the full tenant URL per customer, since Deltek publishes no shared base address, requests an OAuth2 password-grant token, and refreshes the bearer token when a call returns 401, and it spaces requests with conservative backoff because Deltek publishes no rate limit. Deltek finance records map to the columns of the Tableau data source, so a Deltek invoice or journal line becomes a row the workbook reads rather than a Tableau object, and the API user is given full field visibility so fee and amount fields do not return as zero. On the Tableau side it signs in with a Personal Access Token, captures the session token and site LUID, and re-authenticates on a 401 since the session expires after 240 minutes. After data lands it publishes or updates the data source with overwrite set to true to avoid a duplicate, calls the refresh endpoint, and polls the returned job until it reports Success or Failed. Because Deltek cloud webhooks are workflow-only and carry no signature, ml-connector polls Deltek rather than relying on a push, and since Deltek has no idempotency key it checks for an existing record by number before writing. Tableau webhooks also carry no signature, so it verifies a secret token in the destination URL rather than an HMAC. Tableau throttles extract refreshes with HTTP 429, so refreshes back off and retry. Every record carries a full audit trail and can be replayed if a refresh or a downstream call fails.
A real-world example
A professional services firm of about 400 people runs Deltek Vantagepoint for project accounting, billing, and AP, and its leadership team watches utilization and project margin in a set of Tableau dashboards. Before the integration, an analyst exported project, billing, and labor data from Vantagepoint into spreadsheets each week, reshaped it by hand, and republished the Tableau extract, so the dashboards were always several days behind and month-end reporting meant a scramble of manual pulls. With Deltek and Tableau connected, new invoices and journal entries land in the data source within the polling window and the extract refreshes on its own, so the dashboards track current project and GL figures. The analyst stops exporting spreadsheets, and the leadership view reflects what Deltek posted earlier the same day.
What you can do
- Read Deltek projects, AP and AR invoices, journal entries, cash receipts, and GL accounts into the data source behind your Tableau dashboards.
- Trigger a Tableau extract refresh after new Deltek data lands and poll the async job to confirm it succeeded.
- Map Deltek GL accounts and organizations so each Tableau measure resolves to a real account.
- Authenticate Deltek with its OAuth2 password-grant token and Tableau with a Personal Access Token and site LUID.
- Poll Deltek because its webhooks are workflow-only, with retries, a full audit trail, and error replay on every record.
Questions
- Which direction does data move between Deltek and Tableau?
- Data moves one way, from Deltek into the Tableau reporting pipeline. ml-connector reads projects, invoices, journal entries, and GL accounts from Deltek, lands them where a Tableau data source reads them, and refreshes the extract. Tableau has no native vendor, invoice, or GL objects, so ml-connector never writes ERP records back into Tableau.
- How does the integration keep Tableau dashboards current instead of waiting on a fixed schedule?
- After it lands new Deltek data, ml-connector publishes or updates the data source and calls the Tableau extract refresh endpoint, then polls the async job it returns until the status is Success or Failed. It also subscribes to Tableau datasource-refresh-succeeded and datasource-refresh-failed webhooks, so a failed refresh surfaces as an alert rather than a silently stale dashboard. Refreshes fire when data actually changes, not only on a fixed timer.
- Does Deltek push changes, or does ml-connector poll for them?
- Polling is the default. Deltek Vantagepoint only offers workflow-triggered callbacks with no signature header rather than a general event bus, so they are not safe as the sole trigger. ml-connector polls each Deltek entity on a schedule you set with paged requests, and because Deltek has no idempotency key it checks for an existing record by number before writing to avoid duplicates.
Related integrations
More Deltek integrations
Other systems that connect to Tableau
Connect Deltek and Tableau
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started