Don't miss your chance to take the Fabric Data Engineer (DP-600) exam for FREE! Find out how by attending the DP-600 session on April 23rd (pacific time), live or on-demand.
Learn moreNext up in the FabCon + SQLCon recap series: The roadmap for Microsoft SQL and Maximizing Developer experiences in Fabric. All sessions are available on-demand after the live show. Register now
Hello everyone,
I'm experiencing some challenges with connecting to a REST API in Power BI, and I would greatly appreciate any guidance or suggestions.
Power BI Desktop: I can successfully fetch data from the API, but the loading time is excessively long (over 10 minutes).
Power BI Service: The data fetching does not work at all. I get this error:
Error message: DataSource.Error: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ;Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. The exception was raised by the IDbCommand interface.
Some background information:
I have 3 queries:
- get_token: to get the token for the API Authentication (as a function)
let
GetAccessToken = () =>
let
url = "<>",
headers = [
#"Content-Type" = "application/x-www-form-urlencoded",
#"Authorization" = "Basic Og=="
],
body = [
grant_type = "password",
client_id = "<>",
client_secret = "<>",
username = "<>",
password = "<>"
],
// Convert the form data into a URL-encoded string
content = Text.ToBinary(Uri.BuildQueryString(body)),
// Make the POST request
response = Web.Contents(url, [
Headers = headers,
Content = content
]),
// Parse the JSON response
jsonResponse = Json.Document(response),
// Extract the access token
accessToken = jsonResponse[access_token]
in
accessToken
in
GetAccessToken
- get_data: with the token getting the data but crypted base64:
let
GetData = (token as text) =>
let
// Define the GraphQL API URL
url = "<>",
// Set up the headers, including the Authorization with the Bearer token
headers = [
#"Content-Type" = "application/json",
#"Authorization" = "Bearer " & token,
#"User-Id" = "<>"
],
// Define the GraphQL query in the body
body = "{""query"":""query getCustomerEvaluationData { customerEvaluationData { file { id content } generatedAt } }""}",
// Make the POST request to the GraphQL API
response = Web.Contents(url, [
Headers = headers,
Content = Text.ToBinary(body)
]),
// Parse the JSON response
jsonResponse = Json.Document(response),
// Extract the relevant data (if required, you can navigate deeper into the response)
customerEvaluationData = jsonResponse[data][customerEvaluationData],
file = customerEvaluationData[file],
// Extract the Base64 content
base64Content = file[content],
// Decode the Base64 content to binary
binaryContent = Binary.FromText(base64Content, BinaryEncoding.Base64)
in
binaryContent
in
GetData
- get_excel: using the queries above to get the Excel:
let
// Call the get_token function to get the access token
token = get_token(),
// Call the get_data function to get the binary content of the file
binaryContent = get_data(token),
// Load the binary content as an Excel workbook
excelWorkbook = Excel.Workbook(binaryContent, null, true)
in
excelWorkbook
Is there a limit for Power BI Service thatit can not handle a 22 MB Excel WorkbookAPI fetch? or are my codes wrong? what can i do? (I need power bi service for scheduled refreshes).
Many Thanks for you help!
Is that API endpoint maybe throttling your requests?
Try binaryContent = Binary.Buffer(get_data(token))
Thank you for the quick response, unfortunately I get the same error using binary.buffer
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
| User | Count |
|---|---|
| 11 | |
| 11 | |
| 9 | |
| 8 | |
| 8 |
| User | Count |
|---|---|
| 30 | |
| 29 | |
| 20 | |
| 15 | |
| 15 |