Forum Discussion
Anonymous access
- 10 years ago
I had the same issue and logged a support ticket with Microsoft because I wanted to build my own Google Analytics queries (include filters, segments, etc).
Here's the answer I got from the support team:
This is not possible due to constraints with the way Web.Contents stores credentials. They are stored based upon the URL value passed, and there can only be one URL per Dataset. In this case, you're trying to short-circuit a typical oAuth2 flow (one URL) and call the API (another URL). I made an attempt at using RelativePath to 'trick' the service, but stills require that the root of those two endpoints returned a valid HTTP 200 response to indicate connection success. In this case, https://www.googleapis.com returns a 404. Unfortunately, therefore it is not possible as an uploaded PBIX file. I suggest creating a new issue describing what data you would want to see in the Google Analytics content pack (https://app.powerbi.com/groups/me/getdata/services/google-analytics) and we can see about adding it to the model.The only workaround for me so far, is to execute the query elsewhere (for me it's Google Spreadsheet) and connect PBI to that as a data source.
I had the same issue and logged a support ticket with Microsoft because I wanted to build my own Google Analytics queries (include filters, segments, etc).
Here's the answer I got from the support team:
This is not possible due to constraints with the way Web.Contents stores credentials. They are stored based upon the URL value passed, and there can only be one URL per Dataset. In this case, you're trying to short-circuit a typical oAuth2 flow (one URL) and call the API (another URL). I made an attempt at using RelativePath to 'trick' the service, but stills require that the root of those two endpoints returned a valid HTTP 200 response to indicate connection success. In this case, https://www.googleapis.com returns a 404. Unfortunately, therefore it is not possible as an uploaded PBIX file. I suggest creating a new issue describing what data you would want to see in the Google Analytics content pack (https://app.powerbi.com/groups/me/getdata/services/google-analytics) and we can see about adding it to the model.
The only workaround for me so far, is to execute the query elsewhere (for me it's Google Spreadsheet) and connect PBI to that as a data source.
Well that's actually fixed it for me, so thanks!
I've modified my json call to:
Source = Json.Document(Web.Contents("https://myapi.com", [Headers=[#"X-API-Key"="Some_GUID"],
RelativePath="/api/method"])),which now allows it to authenticate properly. In this case I'm lucky that the root url of the api works with anonymous access.
Duncan
- Anonymous4 years agoNot applicable
5 years later this is still useful. Thank you so much 🙂
- dstramilov10 years agoHelper II
DuncanP,
I am trying to solve the same issue, but still getting error, do you mind to write a bit more how you solved this problem please.
Dmitry
- DuncanP10 years agoAdvocate II
Hi Dmitry
Can you post your code and the issue you're having?
Duncan
- dstramilov10 years agoHelper II
I was able to fix it using your method.
let authKey = "{""Username"":""USERNAME"",""Password"":""PASSWORDGOESHERE"",""LocationID"":""LOCATIONIFNEEDED""}", url = "https://APILINKGOESHERE.com", // Uses the authentication/token method to obtain a token GetJson = Web.Contents(url, [ Headers = [#"Content-Type"="application/json"], Content = Text.ToBinary(authKey), RelativePath="/Authentication/AuthorizeUser" ] ) in GetJsonSo thank DuncanP you for your idea!
- sahilhira1629 years agoHelper I
Hi DuncanP
My current JSON call is :
Source = Web.Contents("complete url (not just root url)", [Headers=[#"Authorization"="API Key"]]),
convertToJson = Json.Document(Source),
data = convertToJson[data]Data at my URL path is already in JSON format.
Can you elaborate what changes should I make and add to my relative path parameter.??
Sorry if this is too basic, I am new to Power BI.
Regards,
Sahil- DuncanP9 years agoAdvocate II
Hi sahilhira162
All you should need to do, is modify the first line to:
Source = Web.Contents("Root URL", [Headers=[#"Authorization"="API Key"], RelativePath="/Rest of URL"]),I ran into a similar version of this issue the other day, where I could get Power BI Desktop to pull the data in, but couldn't get auto-refresh to work online. It's a common enough problem with the way that Power Query does its authentication, meaning that sometimes you need to use the base URL and add the relative path. Chris Webb has more on the relative path usage in his blog.
Duncan
- gilbertendaya5 years agoHelper IV
Hi DuncanP sahilhira162 hope you're both well.
I would like to ask for assistance on this.
I was able to get the token and tried to pass to other API with Authorization header.
But I'm having this error---> "We couldn't authenticate with the credentials provided.Please try again"
Please advise.
- yakkalipavan8 years agoRegular Visitor
Hello DuncanP, I am facing the similar issue. I have done all the workarounds that you suggested. but still the issue is persisted.
let AuthKey = "Basic mykey", url="https://tfs.mnsu.edu/tfs/ITS%20AppDev/Test%20Agile%20Project/_apis/wit/wiql?api-version=1.0", body="{ ""query"": ""Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' and [System.AreaPath]='Test Agile Project'"" }", Source = Json.Document(Web.Contents(url,[ Headers = [#"Authorization"= AuthKey , #"Content-Type"= "application/json"], Content = Text.ToBinary(body) ] )) in Sourceand the eeror i am getting is
can you please help what is wrong with this setup
- sahilhira1628 years agoHelper I
- yakkalipavan8 years agoRegular Visitor
Thank you very much for the quick reply sahilhira162.
Yes I tried changing the relative path as well. Still the same error.
let AuthKey = "Basic Y2FtcHVzL2RmMjU1MGZpOmpsZWU0cmp5eWl1Mmh4bm4zeml5eHcydHZ3NWx1NHVqcm5kbDRoZm56d29uN3pjYml1dnE=", url="https://tfs.mnsu.edu", body="{ ""query"": ""Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' and [System.AreaPath]='Test Agile Project'"" }", Source = Json.Document(Web.Contents(url,[ Headers = [#"Authorization"= AuthKey , #"Content-Type"= "application/json"], Content = Text.ToBinary(body), RelativePath="tfs/ITS%20AppDev/Test%20Agile%20Project/_apis/wit/wiql?api-version=1.0" ] )) in SourceThanks
Yakkalipavan