Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hi all,
I'm trying to call one of these two endpoints using Python, but running into 401 Unauthorized without any details from the API response.
https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/execute-queries-in-group
https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/execute-queries
Below is my code in Python, for full transparency versions used: Python 3.12.9, requests 2.32.2, msal 1.31.1
# internal imports
import configuration_details
# external imports
import json
import msal # microsoft authentication library
import requests
(
authority_url,
azure_ad_client_id,
azure_ad_client_secret,
) = configuration_details.retrieve_pbi_details()
authentication_context = msal.ConfidentialClientApplication(
client_id=azure_ad_client_id,
client_credential=azure_ad_client_secret,
authority=authority_url,
validate_authority=True,
)
token = authentication_context.acquire_token_for_client(
scopes=["https://analysis.windows.net/powerbi/api/.default"]
)
access_token = token.get("access_token")
data = json.dumps({"queries": [{"query": "EVALUATE VALUES(Worklogs)"}]})
response = requests.post(
data=data,
url="https://api.powerbi.com/v1.0/myorg/groups/a365faf8-a136-48b7-96f0-2368934a9328/datasets/7284eead-fb8b-4fbf-9532-0c7df5dcd409/executeQueries",
headers={
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
},
timeout=60
)
The response is 401 with content `{'code': 'PowerBINotAuthorizedException', 'parameters': {}, 'details': [], 'exceptionCulprit': 1}`
Checked:
- Workspace ID and dataset ID are correct
- Service principal related to client ID had admin rights on the workspace
- Client secret is correct
- Other similar API calls work with the same code, for example GET
Solved! Go to Solution.
I resolved the issue myself. For anyone else running into this: the issue was the semantic model having row-level security enabled. It seems you cannot use service principals in this case.
It is sparsely mentioned in the Power BI API endpoint limitations section, but would appreciate a clear API response from the API itself:
To use Service Principals, make sure the admin tenant setting Allow service principals to use Power BI APIs under Developer settings is enabled. However, regardless of the admin tenant setting, Service Principals aren't supported for datasets with RLS per RLS limitations or datasets with SSO enabled.
I resolved the issue myself. For anyone else running into this: the issue was the semantic model having row-level security enabled. It seems you cannot use service principals in this case.
It is sparsely mentioned in the Power BI API endpoint limitations section, but would appreciate a clear API response from the API itself:
To use Service Principals, make sure the admin tenant setting Allow service principals to use Power BI APIs under Developer settings is enabled. However, regardless of the admin tenant setting, Service Principals aren't supported for datasets with RLS per RLS limitations or datasets with SSO enabled.
User | Count |
---|---|
5 | |
4 | |
3 | |
2 | |
2 |
User | Count |
---|---|
8 | |
6 | |
4 | |
4 | |
4 |