Power BI on SharePoint performance checklist

Eleven checks for a Power BI SharePoint list refresh timeout or a failing scheduled refresh, with the Microsoft limit behind each and the fix.

Download this page as a PDF

The report was fine in spring. Now the scheduled refresh fails about one morning in three, the error mentions credentials or a timeout, and the person who built the model wants to know whether it is Power BI, SharePoint or them. Usually it is the SharePoint List connector meeting one of several published limits. Run the checks below in order before changing anything, because the first few cost nothing to check.

The limits are Microsoft’s own, from Microsoft Learn, checked on 22 October 2026. The background on why the connector slows down is in Why Power BI refreshes on SharePoint lists slow down.

Power BI SharePoint list refresh timeout checks

Start with how long a refresh takes in Power BI Desktop, because the service limits are all measured against duration. Time it again a month later and you can see the trend. A refresh that times out in the service usually fails one of the first three checks below, even when the error text talks about credentials.

#CheckLimitWhat to do
1Refresh duration in DesktopTwo hours on shared capacity, five hours on PremiumIf you are near the limit, the list will cross it as it grows
2Refresh longer than about an hourThe Entra ID OAuth token for SharePoint Online lasts about an hourA long load can fail with a credentials error that is really a duration problem
3Several reports reading the same listEach one pages the list separatelyShare one semantic model, or read from a copy

Check 2 catches a lot of people out. The error says the credentials are wrong, someone re-enters them, and the next refresh fails the same way because the load still runs past the token’s life.

List shape checks for lookups and large lists

#CheckLimitWhat to do
4Connector implementation, 1.0 or 2.0They use different APIsNote which one the query uses before comparing timings
5Lookup and person columns in the default viewThe v2.0 connector allows 12 join operations per queryCreate a default view with fewer lookup columns
6Items in the listThe 5,000-item list view thresholdFilter on an indexed column, or stop reading the list directly
7URL length, if you read the list as an OData feedAbout 2,100 charactersShorten the $select, or use the list connector

Lookup and person columns are joins on SharePoint’s side, so a list with more than a dozen of them fails on the v2.0 connector before row count becomes the issue. The workaround Microsoft gives is a trimmed default view, which then has to stay trimmed as people add columns. Our post on what breaks past 5,000 items explains where an indexed filter helps a large list and where it stops helping.

Power BI schedule refresh on a SharePoint Online list

Setting up a schedule refresh for a SharePoint Online list needs no gateway, because the list is a cloud source and its credentials sit in the semantic model settings, unless the same query also reads an on-premises source. The checks below are about what happens after the schedule is set, when it starts to fail or stops running.

#CheckLimitWhat to do
8Refresh slots per dayEight on shared capacity, 48 on Premium, PPU or Fabric capacityMatch the slots to how fresh the report needs to be
9Consecutive failuresThe schedule is deactivated after four in a rowRe-enable it in the semantic model settings after fixing the cause
10InactivityThe schedule pauses after two months with no report viewsOpen a report, then re-enable the schedule
11Who receives failure emailsThe semantic model owner by defaultMake sure that owner still works here

Checks 9 and 11 together explain most “it stopped updating weeks ago and nobody noticed” stories. The schedule switched itself off and the email went to someone who had left.

What changes when Power BI reads a replica

If checks 1, 2, 5 or 6 are the problem, tuning the connector buys time but the list keeps growing. The longer fix is to stop Power BI reading SharePoint at all. SPSync replicates the list into SQL Server, Postgres or another database and keeps it current on a schedule you set, every five minutes by default. Power BI then connects with its database connector, by import or DirectQuery.

CheckOn the list connectorOn the replica
Refresh durationGrows with rows and lookup columnsReads a table; after the first load SPSync fetches only what changed
Token expiry during loadPossible on a long loadThe SharePoint token is no longer involved
12-join limitApplies to the queryLookups are {col}_id and {col}_value columns on the row
5,000-item thresholdApplies to unindexed queriesSQL has no list view threshold
Deleted itemsGone from the next refreshKept with sp_deleted_at set

SPSync can also generate a reporting view per list, v_{prefix}_{list}, which joins person columns to the shared sp_users table and leaves deleted rows out. Point the model at the view and the merge steps in Power Query go away. Behind the schedule, a reconcile re-checks every item weekly by default, which doubles as QA and as recovery after an outage.

SharePoint list to SQL Server for a faster Power BI report walks through the setup with DirectQuery. Seven steps from a SharePoint list to a SQL Server table covers the database side.

Book a call

Book a call to talk through your use case, see further walkthroughs or demos, and set up a trial in your own environment.