QAD and Microsoft Power BI integration
QAD runs manufacturing, procurement, and finance. Microsoft Power BI builds the reports and dashboards on top of that data. This connection moves QAD finance and procurement records into Microsoft Power BI so analysts can chart spend, payables, and supplier activity without exporting spreadsheets. ml-connector reads the records from QAD on a schedule, maps them to Power BI table schemas, and pushes the rows into a named workspace. Power BI does not own transactional records, so the flow runs one way, from QAD into Power BI.
What moves between them
All data moves in one direction, from QAD into Microsoft Power BI. ml-connector reads supplier invoices, purchase orders, AP payments, GL accounts, suppliers, and goods receipts from QAD, maps each entity to a Power BI table, and pushes the rows into a push dataset in the target workspace. Cost center and GL account values travel as columns on the relevant tables so reports can slice spend by dimension. Power BI owns no transactional records and the push datasets are append-only, so ml-connector never writes financial data back to QAD and instead manages the rows it has already sent.
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 Power BI side it runs the Microsoft Entra client credentials grant, requests the analysis.windows.net Power BI scope, and refreshes the bearer token when a call returns 401. It resolves the workspace name to a GUID at configuration time, since every call is addressed by group ID rather than display name, and confirms the service principal has been added to that workspace as Member or Admin. Because Power BI has no inbound webhook, the connector polls QAD on a cron schedule, transforms each entity to the matching table schema, and POSTs rows in batches that respect the push dataset limits of 10,000 rows per request and 120 requests per minute per dataset. Push datasets are append-only with no idempotency key, so ml-connector deletes the table rows and re-posts the current set, or tracks a watermark and sends only net-new records, to avoid duplicates. After loading, it can trigger a dataset refresh. On HTTP 429 it honors the Retry-After header and backs off with jitter. Every record carries a full audit trail and can be replayed if a push 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 board reports in Microsoft Power BI. Before the integration an analyst exported supplier invoice and purchase order data from QAD into spreadsheets each cycle, cleaned it by hand, and imported it into Power BI, which left the dashboards a week behind and prone to copy-paste errors. With QAD and Microsoft Power BI connected, ml-connector pushes the latest invoices, purchase orders, and payments into the reporting workspace on a daily schedule and refreshes the dataset. The spend and payables dashboards now reflect current QAD data, and the manual export and cleanup step is gone.
What you can do
- Push QAD supplier invoices, purchase orders, payments, and GL accounts into Microsoft Power BI push dataset tables on a schedule.
- Carry QAD cost center and GL account values as columns so Power BI reports can slice spend by dimension.
- Authenticate QAD with its tenant-specific token and Microsoft Power BI with a Microsoft Entra service principal on the correct scope.
- Resolve the target workspace name to its GUID and respect Power BI push limits with batched, throttle-aware row loads.
- Avoid duplicate rows with full-replace or watermark loading, trigger dataset refreshes, and keep a full audit trail with replay.
Questions
- Which direction does data move between QAD and Microsoft Power BI?
- Data moves one way, from QAD into Microsoft Power BI. Power BI is a reporting layer and does not own transactional finance records, so ml-connector reads invoices, purchase orders, payments, and GL accounts from QAD and pushes them into Power BI push datasets. Nothing is written back from Power BI into QAD.
- Does Microsoft Power BI send webhooks when data changes?
- No. Power BI has no outbound webhook for connector use, and the email-based refresh and subscription features are not HTTP callbacks. Because of this, ml-connector polls QAD on a cron schedule, pushes rows into Power BI, and optionally triggers a dataset refresh rather than waiting for an event from Power BI.
- How does ml-connector avoid duplicate rows in Microsoft Power BI?
- Power BI push datasets are append-only and have no idempotency key, so every POST adds new rows. ml-connector either deletes the existing table rows and re-posts the current set, or tracks a watermark and sends only net-new records from QAD. This keeps the Power BI tables in step with QAD without piling up duplicates across runs.
Related integrations
More QAD integrations
Other systems that connect to Microsoft Power BI
Connect QAD and Microsoft Power BI
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started