I am connected the API of Airtable to Power BI but at the time of displaying the data it only shows me 100 records when the base has more than 1000 records.
The Airtable API uses the concept of pagination.
The response will contain an offset if there are more than 100 records. Include this offset in the next request’s parameters
How can I add these parameters?
If you are using the REST API you need to pass another parameter “offset”
I am using REST API. With what value should I pass the “offset” parameter?
The “offset” value is returned in the response of your first call to the Airtable API under the key “offset”
Take the above returned “offset” value and pass it in your new request.
This is what you want - API Offset Parameter
Reloading the data source sending as an offset parameter and still showing 100 records. The image I send is using POSTMAN to return the json.
In the screenshot shown, there is no value shown for the offset parameter, therefore, the API will default to the first 100 records. It is responding exactly how it should.
@Bill.French That the point, what is the parameter that the offset must pass?
As mentioned by @Andrew_Johnson1 above, the offset value is returned by the first request (which has no offset). Each ensuing request must contain the offset value returned by the recent [previous] successful response.
I understand that, what happens is that the visualization of the data I am working with Power BI. If I was working with NodeJs I understand the recommendations but this is not the case.
- The URL of my database is https://api.airtable.com/v0/Base/Table?api_key=My_Key, when integrating the source of the data in Power BI it only shows me 100 records in Power BI.
I’m, almost certain PowerBI doesn’t have the internal capacity to automatically understand and perform the multiple requests into Airtable required to get all of the data you want to visualize. As such, you are responsible for creating a middle-ware process that does know how to iterate across all the record sets that the Airtable API is capable of exposing.
There are a few ways to do this - I would check out the Zapier/PowerBI integration recipe.
I wasn’t suggesting you needed to use NodeJS - simply demonstrating how it is done using the Airtable API was my intent recommended this article.
My fault for not seeing this at the outset - I scanned the threads quickly and when I read this I assumed you were building middleware integration code to use with PowerBI. I should have asked for deeper details.
PowerBI is a wonderful data visualization platform and I have used it often for many clients including this one featured by Microsoft a few years ago when PowerBI started supporting real-time streams. As you can see, I have deep expertise using PowerBI’s API and Azure streaming protocol, so if you need professional help, give me a shout.
Great article Oscar!
That’s the middleware you needed and it’s ideal that you did this in PowerBI script - simplifies the moving parts probably fast as well.
I have almost got there. I wrote out the code from the screenshot in the Medium article as below, replacing the [APP_ID] [TABLE_ID] [KEY_ID] with the appropriate entries, but PowerBI coughed at the last line:
let Pagination = List.Skip(List.Generate( () => [Last_Key = "init", Counter=0], // Start Value each [Last_Key] <> null, // Condition under which the next execution will happen each [ Last_Key = try if [Counter]<1 then "" else [Quelle][Value][offset] otherwise null, // determine the LastKey for the next execution Quelle= try if [Counter]<1 then Json.Document(Web.Contents("https://api.airtable.com/v0/[APP_ID]/[TABLE_ID]", [Headers=[Authorization="Bearer [KEY_ID]"]])) else Json.Document(Web.Contents("https://api.airtable.com/v0/AIRTABLE_BASEID/TABLE_NAME&offset="&[WebCall][Value][offset] , [Headers=[Authorization="Bearer key????????????"]])),// retrieve results per call Counter = [Counter]+1 // internal counter ], each [Quelle] ),1), #"ConvertedTable"= Table.FromList(Pagination, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in #"Tipo cambiado"
I closed with the Spanish translation of “tipo cambiado” which is “type changed” and got this error . . .