ml-connector
PlexMicrosoft Power BI

Plex and Microsoft Power BI integration

Plex runs manufacturing and finance for discrete manufacturers, capturing production schedules, inventory movements, supplier performance, and cost allocations. Microsoft Power BI turns data into dashboards and reports your operations team lives in. Connecting the two lets you build live Power BI reports on Plex production and procurement data without exporting flat files or re-keying numbers. Orders, inventory, suppliers, and GL transactions flow from Plex into Power BI on a schedule you control, and the Power BI service principal handles the OAuth2 handshake so no credentials live in reports.

How Plex works

Plex exposes sales orders, purchase orders, suppliers, invoices, parts, inventory, containers, GL accounts, and payments through a REST API secured with OAuth2 client credentials. Plex publishes no native webhooks, so records are read by polling on a configurable interval, filtering by modified_date or created_date. Legacy SOAP XML Web Services are available with Basic auth and a company code (PCN), and scheduled SFTP flat-file DataSources extracts can pull bulk historical data. Role-based permissions are enforced in Plex, so the integration user must have the correct role assigned or API calls return 403 or empty results.

How Microsoft Power BI works

Microsoft Power BI accepts data via REST API into push datasets, where you define a table schema with column names and datatypes before posting rows. Every API call requires OAuth2 client credentials (service principal), and tokens expire after one hour and must be refreshed. The service principal must be added as a Member or Admin on each Power BI workspace it needs to access, and developer settings must be enabled in the Power BI Admin portal. Power BI is a reporting destination only - it does not push events outbound or support webhooks to external systems.

What moves between them

The main flow runs from Plex into Power BI. ml-connector polls Plex for updated sales orders, purchase orders, inventory, suppliers, and GL transactions on a schedule you set (5 to 15 minutes typical). Each record is transformed to match a Power BI push dataset table schema and posted to Power BI via REST API. The connector does not write back to Plex - all flows are read from Plex and write to Power BI. Reporting is read-only in Power BI, so analysts can visualize the latest Plex data without touching source records.

How ml-connector handles it

ml-connector stores both sets of credentials encrypted and requests an OAuth2 token from Plex (https://accounts.plex.com/oauth2/token) with client credentials before each poll cycle. Tokens expire and are refreshed on demand. For Power BI, the service principal (also OAuth2 client credentials) is authenticated against Microsoft Entra ID once at setup, and the access token is passed as a Bearer header on every POST to the Power BI REST API. You define Power BI push dataset schemas in advance (table name, columns, datatypes), and ml-connector maps Plex entities to those schemas - for example, Plex sales orders map to a Power BI SalesOrders table with OrderID, CustomerName, OrderDate, and Amount columns. Role-based permissions in Plex are respected - if the integration user lacks access to a Plex role, the API returns 403 and ml-connector surfaces the error. Power BI tokens expire every hour and are automatically refreshed. Because Plex offers no idempotency key support on the REST API, ml-connector uses unique external reference fields (such as Plex's internal entity IDs) to detect duplicate pushes and avoid re-posting the same record to Power BI.

A real-world example

A mid-sized discrete manufacturer (500+ employees, 3 plants) runs Plex for production scheduling, procurement, and job costing, and uses Power BI for daily operations dashboards. Before the integration, the operations team exported Plex sales orders and inventory reports by hand once per shift and loaded them into Excel pivot tables, then refreshed Power BI manually at day-end. Supply chain managers had no visibility into supplier invoice aging or open purchase orders without logging into Plex. With Plex and Power BI connected, sales order and inventory data refresh every 10 minutes in Power BI, and supplier performance (invoice aging, order-to-receipt cycle time) is a live dashboard that the procurement team watches throughout the day. Manual exports are gone, and the operations team spots bottlenecks in real time instead of in a daily report.

What you can do

  • Push Plex sales orders, purchase orders, and open inventory into Power BI datasets on a polling schedule you set.
  • Sync Plex suppliers, parts, and GL accounts as reference data so Power BI reports can join transaction data to master data.
  • Transform Plex records to match Power BI table schemas (columns, datatypes) before posting, so reports and dashboards consume clean, structured data.
  • Authenticate Plex with OAuth2 client credentials and Power BI with a service principal, with automatic token refresh when credentials expire.
  • Detect duplicate records using Plex entity IDs so the same sales order never appears twice in Power BI, even if polling retries.

Questions

Which direction does data move between Plex and Power BI?
Data flows one direction: from Plex into Power BI. ml-connector polls Plex sales orders, purchase orders, inventory, suppliers, and GL transactions, transforms them to match your Power BI dataset schemas, and posts the rows to Power BI. Power BI is a reporting destination, not a source system, so ml-connector does not write back to Plex.
Does Plex require any special setup for polling if we use SOAP or SFTP instead of REST?
Plex SOAP Web Services require Basic auth with username, password, and a company code (PCN). Stored procedures available in SOAP vary by customer configuration, and their idempotency is not guaranteed - you must test each datasource for duplicate behavior. For bulk historical loads, Plex DataSources can export to scheduled SFTP flat files that ml-connector can import separately.
How does ml-connector handle Power BI's hourly token expiry and Plex role-based permissions?
ml-connector requests a fresh OAuth2 token from both Plex and Power BI (Microsoft Entra ID) at the start of each poll cycle and caches it until it expires. If Plex returns 403 because the integration user lacks a required role, ml-connector surfaces the error so you can grant the role in Plex. For Power BI, the service principal must be a Member or Admin on each workspace, and developer settings must be enabled in the Power BI Admin portal before the integration can post datasets.

Related integrations

Connect Plex and Microsoft Power BI

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

Get started