lettenantname="<domain>",// eg: "domain.sharepoint.com"sitename="<site>",// eg: "SiteName"; if a subsite use "Site/SubSite"listname="<list>",// eg: "ListName"siteurl="https://"&tenantname&"/sites/"&sitename,// use ... /sites/<your site name>/<your subsite name> if applicable itemcount=Json.Document(Web.Contents(siteurl,[RelativePath="_api/web/lists/GetByTitle('"&listname&"')/items?$select=ID&$orderby=ID%20desc&$top=1",Headers=[Accept="application/json"]]))[value]{0}[ID],StartIDs=List.Numbers(0,Number.RoundUp(itemcount/5000),5000),ConvertToTable=Table.FromList(StartIDs,Splitter.SplitByNothing(),null,null,ExtraValues.Error),Add_EndIDs=Table.AddColumn(ConvertToTable,"Addition",each[Column1]+4999,typenumber),RenamedColumns=Table.RenameColumns(Add_EndIDs,{{"Column1","StartID"},{"Addition","EndID"}}),#"Changed Type"=Table.TransformColumnTypes(RenamedColumns,{{"StartID",typetext},{"EndID",typetext}}),//Comment in only one of the fieldselect lines below, defining your select and expand columns using the example syntax shown // fieldselect = "&$top=5000", // all fields with no expansion // fieldselect = "&$top=5000&$select=ID,Title,Date,PersonColumn,ChoiceColumn,LookupColumn", // list desired fields (no expansion) -No Spaces! fieldselect="&$top=5000&$select=ID,Title,Date,PersonColumn/LastName,PersonColumn/FirstName,ChoiceColumn,LookupColumn/Title,LookupColumn/Project,LookupColumn/ProjectStatus&$expand=PersonColumn,LookupColumn",//expand list fields - No Spaces! GetData=Table.AddColumn(#"Changed Type","Items",eachJson.Document(Web.Contents(siteurl,[RelativePath="_api/web/lists/GetByTitle('"&listname&"')/items?$filter=(ID ge "&[StartID]&") and (ID le "&[EndID]&")"&fieldselect,Headers=[Accept="application/json"]]))[value]),#"Removed Other Columns"=Table.SelectColumns(GetData,{"Items"}),#"Expanded Items"=Table.ExpandListColumn(#"Removed Other Columns","Items")in#"Expanded Items"
Option 2: Elegant, but sequential requests (slower)¶
lettenantname="<domain>",// eg: "domain.sharepoint.com"sitename="<site>",// eg: "SiteName"; if a subsite use "Site/SubSite"listname="<list>",// eg: "ListName"siteurl="https://"&tenantname&"/sites/"&sitename,// use ... /sites/<your site name>/<your subsite name> if applicable //Comment in only one of the fieldselect lines below, defining your select and expand columns using the example syntax shown // fieldselect = "&$top=5000", // all fields with no expansion // fieldselect = "&$top=5000&$select=ID,Title,Date,PersonColumn,ChoiceColumn,LookupColumn", // list desired fields (no expansion) -No Spaces! fieldselect="&$top=5000&$select=ID,Title,Date,PersonColumn/LastName,PersonColumn/FirstName,ChoiceColumn,LookupColumn/Title,LookupColumn/Project,LookupColumn/ProjectStatus&$expand=PersonColumn,LookupColumn",//expand list fields - No Spaces! InitialWebCall=Json.Document(Web.Contents(siteurl,[RelativePath="_api/web/lists/GetByTitle('"&listname&"')/items?$skipToken=Paged=TRUE"&fieldselect,Headers=[Accept="application/json"]])),datalist=List.Generate(()=>InitialWebCall,eachList.Count([value])>0,eachtryJson.Document(Web.Contents(siteurl,[RelativePath="_api"&Text.AfterDelimiter([odata.nextLink],"_api"),Headers=[Accept="application/json"]]))otherwise[value={}],each[value]),#"Converted to Table"=Table.FromList(datalist,Splitter.SplitByNothing(),null,null,ExtraValues.Error),#"Expanded Column1"=Table.ExpandListColumn(#"Converted to Table","Column1")in#"Expanded Column1"