ml-connector
Sage X3Tableau

Sage X3 and Tableau integration

Sage X3 holds your financial records, procurement history, inventory levels, and manufacturing data. Tableau turns that data into dashboards and visualizations. Connecting the two lets your finance, operations, and executive teams see up-to-date reports without manual data export and import. ml-connector polls Sage X3 on a cadence you define, detects what has changed, and pushes those updates into Tableau data sources, then refreshes the extracts so every dashboard sees the latest numbers.

How Sage X3 works

Sage X3 exposes suppliers, customers, purchase orders, sales invoices, general ledger accounts, general ledger entries, products, and supplier bill invoices through REST and GraphQL APIs. The REST api1 endpoint uses HTTP Basic Authentication or OAuth2 JWT bearer tokens, while the newer GraphQL Xtrem endpoint requires OAuth2 client credentials through a Connected Application. Each customer runs X3 on a unique server URL and port with a custom folder and application path, so there is no shared base URL. Access tokens expire in 5 minutes and refresh tokens in 30 days. Sage X3 has no native webhooks or push notifications, so ml-connector must poll the updatedDate and modifiedDateTime fields on records to detect changes since the last sync.

How Tableau works

Tableau operates in two deployment models: Tableau Cloud (SaaS at online.tableau.com) and Tableau Server (self-hosted). Both expose data sources, workbooks, views, projects, users, schedules, and permissions through REST APIs. Authentication uses Personal Access Tokens (PAT), Connected Apps with JWT, or username and password; PAT tokens expire after 15 days of non-use on Cloud and 1 year on Server. Tableau sends webhooks on 24 event types (datasource refresh, workbook updates, user changes) but has no HMAC signature verification, so ml-connector secures webhook endpoints with secret tokens in the URL. Views are read-only derived objects; Tableau accepts data pushes only to data sources, not views.

What moves between them

Data flows from Sage X3 into Tableau data sources. Financial records (GL accounts, GL entries, invoices), procurement data (purchase orders, supplier bills), inventory, and customer master records are polled from X3, transformed into a format matching the Tableau data source schema, and uploaded via REST API. Tableau then refreshes the affected extract on a schedule you define so dashboards and reports see the current data. The flow is one-way from X3 to Tableau; Tableau views are read-only and do not write back to X3.

How ml-connector handles it

ml-connector stores Sage X3 credentials (server URL, port, folder, application name, and auth tokens) encrypted and refreshes the 5-minute X3 access tokens before they expire. It polls X3 using the REST api1 or GraphQL Xtrem endpoint per your configuration, checking the updatedDate and modifiedDateTime fields to fetch only records that have changed since the last poll. The records are mapped to the Tableau data source columns (financial, procurement, or inventory dimensions per your data model), and ml-connector uploads them via Tableau REST API using a Personal Access Token or Connected App JWT. Since Tableau does not sign webhooks, ml-connector verifies refresh completions by polling the Tableau Jobs endpoint and tracks which records have been successfully pushed. On-premise Sage X3 instances with custom URLs and ports are fully supported; the only requirement is that the X3 REST or GraphQL endpoint is reachable from ml-connector. If X3 token refresh fails, ml-connector retries with exponential backoff and alerts you; if a Tableau upload fails, the batch is queued for replay.

A real-world example

A mid-sized distributor uses Sage X3 for procurement, inventory, and general ledger, and Tableau Cloud for executive dashboards and operations reports. Before the integration, the finance team exported purchase order and supplier invoice data from X3 every morning and loaded it manually into Tableau, a 30-minute task prone to mistakes and stale data. Sales and operations managers saw 1-day-old reports because of the manual cycle. With Sage X3 and Tableau connected, new purchase orders and invoices flow into Tableau every 2 hours, extracts refresh automatically, and dashboards show procurement and spend trends within minutes of X3 posting. The finance team eliminated the manual load step and now spends that time on analysis rather than data movement.

What you can do

  • Poll Sage X3 for new and updated financial, procurement, and inventory records on a schedule you set.
  • Automatically refresh Tableau data sources and extracts after each load so dashboards see current data.
  • Map Sage X3 general ledger accounts, GL entries, and invoice line items to Tableau dimension and fact tables.
  • Handle X3 API token refresh and Tableau PAT expiry so credentials stay valid without manual intervention.
  • Track data lineage in the audit log so you know when each Tableau data source was last refreshed from X3 and if any records failed to load.

Questions

Does Sage X3 support webhooks so ml-connector can push data to Tableau immediately after a change?
No. Sage X3 has no native webhooks or event push system, so ml-connector polls X3 on a cadence you define, checking the updatedDate and modifiedDateTime fields to find records that changed since the last sync. This means Tableau refreshes happen every 2 to 24 hours depending on your polling schedule, not in real time.
Which Sage X3 APIs does ml-connector use, and what authentication is required?
ml-connector supports both the REST api1 endpoint (using HTTP Basic Authentication or OAuth2) and the newer GraphQL Xtrem endpoint (OAuth2 client credentials via Connected Application). Since Sage X3 has no central hostname, you provide your customer-specific server URL, port, and folder path. ml-connector handles the 5-minute access token expiry and 30-day refresh token rotation automatically.
Can Tableau views be populated with data from Sage X3, or only data sources?
Only data sources. Tableau views are read-only derived objects that cannot be directly written to. ml-connector pushes data into Tableau data sources (fact and dimension tables), and Tableau views query those data sources to render dashboards and reports.

Related integrations

Connect Sage X3 and Tableau

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

Get started