QAD and Tableau integration
QAD runs manufacturing, procurement, and finance. Tableau builds the dashboards and visualizations on top of that data. This connection moves QAD finance and procurement records into Tableau as published data sources so analysts can chart spend, payables, and supplier activity without exporting files by hand. ml-connector reads the records from QAD on a schedule, shapes them into Tableau data sources, and triggers an extract refresh so the dashboards stay current. Tableau owns no transactional records, so the flow runs one way, from QAD into Tableau.
What moves between them
All data moves in one direction, from QAD into Tableau. ml-connector reads supplier invoices, purchase orders, AP payments, GL accounts, suppliers, and goods receipts from QAD, shapes each entity into a Tableau data source, and publishes it into the target project on the site. Cost center and GL account values travel as columns on the relevant data sources so reports can slice spend by dimension. Tableau owns no transactional records and its data sources are republished rather than edited row by row, so ml-connector never writes financial data back to QAD and instead refreshes the content it has already published.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address, and uses the JWT or OAuth2 bearer token to read business documents. On the Tableau side it signs in with the Personal Access Token Name and Secret, captures both the session token and the site LUID from the response, passes the LUID in every endpoint path, and signs in again when a call returns 401, since the session token expires after 240 minutes. The PAT is tied to a user account and stops working if that user is deactivated, so a dedicated service account is used. Because QAD cloud has no inbound webhook and the connector should not depend on Tableau pushing source data, it polls QAD on a cron schedule, transforms each entity, and publishes the data sources with overwrite set to true, since publishing twice otherwise creates duplicates and the REST API has no idempotency key. After publishing it triggers an extract refresh, which returns a job ID, and polls the job until it reports success or failure. Where Tableau webhooks are enabled, it can consume datasource-refresh-succeeded and datasource-refresh-failed events to confirm the load, mitigating the missing signature with a secret token in the destination URL. On HTTP 429 from rate-limited refresh tasks it backs off and retries with jitter. Every record carries a full audit trail and can be replayed if a publish or refresh fails.
A real-world example
A mid-sized contract manufacturer runs QAD Adaptive ERP for production, purchasing, and accounts payable, and the finance team builds its monthly spend and payables dashboards in Tableau. Before the integration an analyst exported supplier invoice and purchase order data from QAD into spreadsheets each cycle, cleaned it by hand, and published it to Tableau, which left the dashboards a week behind and prone to copy-paste errors. With QAD and Tableau connected, ml-connector publishes the latest invoices, purchase orders, and payments as data sources on a daily schedule and refreshes the extracts. The dashboards now reflect current QAD data, and the manual export and republish step is gone.
What you can do
- Publish QAD supplier invoices, purchase orders, payments, and GL accounts into Tableau as refreshable data sources on a schedule.
- Carry QAD cost center and GL account values as columns so Tableau reports can slice spend by dimension.
- Authenticate QAD with its tenant-specific token and Tableau with a Personal Access Token, storing the site LUID for every call.
- Publish with overwrite to avoid duplicate data sources, then trigger an extract refresh and poll the job to completion.
- Optionally consume Tableau refresh webhooks to confirm loads, with retries and a full audit trail with replay on every record.
Questions
- Which direction does data move between QAD and Tableau?
- Data moves one way, from QAD into Tableau. Tableau is a visualization layer and owns no transactional finance records, so ml-connector reads invoices, purchase orders, payments, and GL accounts from QAD and publishes them into Tableau as data sources. Nothing is written back from Tableau into QAD.
- How does ml-connector handle Tableau authentication and session expiry?
- ml-connector signs in with a Personal Access Token and stores both the returned session token and the site LUID, which nearly every Tableau endpoint requires in its path. The session token expires after 240 minutes by default, so the connector catches 401 responses and signs in again to refresh it. Because a PAT is tied to a user account and breaks if that user is deactivated, a dedicated service account is used.
- Does ml-connector rely on Tableau webhooks to move data?
- No. QAD cloud has no webhook for third-party connectors, so ml-connector polls QAD on a schedule and publishes data sources into Tableau rather than waiting for an event. Tableau can send outbound webhooks such as datasource-refresh-succeeded, which the connector can optionally consume to confirm a load, but these carry no signature, so a secret token in the destination URL is used as mitigation.
Related integrations
More QAD integrations
Other systems that connect to Tableau
Connect QAD and Tableau
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started