Skip to content

Instantly share code, notes, and snippets.

@MarkTiedemann
Last active March 5, 2024 23:43
Show Gist options
  • Save MarkTiedemann/f667c75cc3d054b9b2bce25ea08bc631 to your computer and use it in GitHub Desktop.
Save MarkTiedemann/f667c75cc3d054b9b2bce25ea08bc631 to your computer and use it in GitHub Desktop.
Power Query Pagination Example
let
BaseUrl = "https://fake-odata-api.com/v1/Entities?",
Token = "F4K3-T0K3N-D0NT-U5E-L0L",
EntitiesPerPage = 1000,
GetJson = (Url) =>
let Options = [Headers=[ #"Authorization" = "Bearer " & Token ]],
RawData = Web.Contents(Url, Options),
Json = Json.Document(RawData)
in Json,
GetEntityCount = () =>
let Url = BaseUrl & "$count=true&$top=0",
Json = GetJson(Url),
Count = Json[#"@odata.count"]
in Count,
GetPage = (Index) =>
let Skip = "$skip=" & Text.From(Index * EntitiesPerPage),
Top = "$top=" & Text.From(EntitiesPerPage),
Url = BaseUrl & Skip & "&" & Top,
Json = GetJson(Url),
Value = Json[#"value"]
in Value,
EntityCount = List.Max({ EntitiesPerPage, GetEntityCount() }),
PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),
PageIndices = { 0 .. PageCount - 1 },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table
@cxmais
Copy link

cxmais commented Nov 29, 2022

Please, I Need a Help,

How I can will create an pagination for a top and skip only? Because, don't return the others pages, and the request from Postman, don't show the pages numbers. The code return only 1000 register per page.

This is my code in Power BI:

(top as text) =>
let
request = Json.Document(
Web.Contents(#"URL - Tickets" &
"&$top=" & top,
[Headers=[#"Content-Type"="application/json"]
]
)
)
in request

Observation: I don't have experience in programation.

Best Resgards

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment