ml-connector
Sage 300Tableau

Sage 300 and Tableau integration

Sage 300 runs your on-premise finance and operations. Tableau builds dashboards on top of your data. Connecting the two keeps your financial analytics live without manual exports. New vendors, purchase orders, and general ledger balances in Sage 300 feed into Tableau data sources on a schedule you control, so your executive dashboards always reflect the current state of your ERP. Sage 300 administrators can also keep Tableau users, permissions, and extract schedules in sync without re-provisioning by hand.

How Sage 300 works

Sage 300 is an on-premise ERP system that runs on Windows IIS with a SQL Server backend, serving mid-market businesses with accounts payable, accounts receivable, general ledger, purchase orders, order entry, and inventory control. It exposes entities such as vendors, invoices, GL accounts, purchase orders, and items through REST and OData APIs with JSON and XML support. Authentication uses HTTP Basic Authentication with uppercase username and password in the Authorization header on every request. Sage 300 has no webhooks or change-data-capture, so polling is the only sync method. The API user must be created in Administrative Services with the Web API security group; the built-in Admin user does not have API privileges. Large volumes of calls can trigger IIS AppPool timeouts depending on configuration.

How Tableau works

Tableau is a business intelligence platform offering REST APIs for workbook, data source, user, project, and permission management. It operates in two deployment models: Tableau Cloud (SaaS) with a hosted base URL, and Tableau Server (self-hosted) on customer infrastructure. Authentication uses Personal Access Token (PAT) with a session token exchange, Connected App with JWT, or username and password credentials. The session token is valid for 240 minutes by default and can be configured per Server. Tableau Cloud PATs expire after 15 days of non-use, while Server PATs expire after one year. Tableau publishes 24 webhook event types including datasource and workbook refresh events, but the webhooks do not carry HMAC signatures, so ml-connector validates the request via a secret token in the URL. Views in Tableau are read-only derived objects and cannot be written to; they can only be exported as CSV, image, or PDF.

What moves between them

Master data and transaction summaries flow from Sage 300 into Tableau. Vendors, customers, GL accounts, and inventory items from Sage 300 are read via polling and sent to Tableau as data sources; transaction batches such as purchase orders and invoice summaries are synced on a daily or weekly cadence to refresh Tableau extracts and dashboards. Reference data such as account segments and vendor groups are also sent to keep financial dimensions aligned. Tableau user and group changes can optionally flow back into Sage 300 access control lists, though this is read-mostly in the Tableau direction.

How ml-connector handles it

ml-connector stores the Sage 300 credentials encrypted and authenticates every call with the required uppercase HTTP Basic Authorization header on the customer's self-hosted Sage 300 instance. It polls the Sage 300 API using OData date/time filters and pagination to fetch incremental updates since the last sync, avoiding full table reads. Each Sage 300 record is transformed into a Tableau data source row or refresh payload and posted via the Tableau REST API using the PAT-based session token. ml-connector tracks the Tableau session token expiry and re-authenticates when the 240-minute default window closes. Because Sage 300 has no webhooks, polling runs on a fixed schedule tied to your finance cycle, typically daily for transaction data and weekly for master data refreshes. Sage 300's requirement for uppercase credentials is handled at the point of storage so ml-connector sends them correctly on every request. All records carry a full audit trail of when they were read and synced, so failed refreshes can be replayed if a Tableau extract fails to refresh.

A real-world example

A mid-size manufacturing company runs Sage 300 on-premise for all purchasing, payable, and general ledger operations and uses Tableau Cloud for executive dashboards on cash, vendor spending, and cost center allocation. Before the integration, the finance team manually exported vendor master data and monthly GL trial balances from Sage 300 each period and uploaded them to Tableau data sources for analysis. With Sage 300 and Tableau connected, vendors and GL balances flow automatically from Sage 300 into Tableau on a daily cycle, so dashboards refresh without manual intervention and spending analysis is always current. Month-end reporting is faster because the data is already in Tableau and ready to analyze.

What you can do

  • Sync GL accounts, segments, structures, and balances from Sage 300 to Tableau on a daily schedule so financial dashboards stay current.
  • Push vendor master data, customer master data, and inventory items from Sage 300 into Tableau data sources for spending and inventory analysis.
  • Map Sage 300 accounts and cost structures to Tableau dimensions and filters so financial reports drill down correctly.
  • Authenticate Sage 300 with required HTTP Basic Authentication and uppercase credentials, and Tableau with Personal Access Token session exchange.
  • Poll Sage 300 on a finance-calendar schedule with incremental filters and OData pagination, retrying on IIS timeouts and maintaining a full audit trail.

Questions

How does ml-connector handle Sage 300's requirement for uppercase usernames and passwords?
ml-connector stores the credentials encrypted and enforces uppercase on both username and password at the point of authentication, so the HTTP Basic Authorization header is sent correctly on every request to the Sage 300 API. If credentials are not uppercase in the system, they are converted before sending.
Can ml-connector work with Sage 300 running on customer infrastructure?
Yes. Sage 300 runs on-premise with Windows IIS, so the customer must expose their IIS server over HTTPS and provide ml-connector with the full base URL, server hostname, and their API user credentials. ml-connector connects directly to the customer's self-hosted instance.
What happens if Tableau's session token expires during a sync?
Tableau session tokens default to 240 minutes and ml-connector tracks the expiry time, re-authenticating with a new PAT exchange when the token is about to expire. If a token expires during a large sync, ml-connector retries the remaining requests with a fresh session token so data is not lost.

Related integrations

Connect Sage 300 and Tableau

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

Get started