Forum Discussion

Arya_A_R's avatar
Arya_A_R
Regular Visitor
1 year ago
Solved

Trying to query data with python scripts using power bi rest api

i was trying to access one of the dataset pubhlished in workspace through power bi rest api where i have admin privileges.The error recieved is "403".

 

Below mentioned is the code used to excute the query.

def execute_dax_query(workspace_id: str, dataset_id: str, query: str) -> str:
    """
    Execute a DAX query against a Power BI dataset using an embed token generated for the same dataset as get_model_definition.
    Returns query results as JSON data.
    """
    # Step 1: Generate embed token for the specified dataset
    gen_token_url = f"https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/datasets/{dataset_id}/GenerateToken"
    payload = {
        "datasets": [
            {"id": dataset_id}
        ],
        "accessLevel": "read"
    }
    headers = {
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json"
    }
    gen_response = requests.post(gen_token_url, headers=headers, json=payload)
    if gen_response.status_code != 200:
        return f"Error: Failed to get embed token: {gen_response.status_code} {gen_response.text[:200]}"
    embed_token = gen_response.json().get("token")
    if not embed_token:
        return "Error: No embed token returned."

    # Step 2: Use embed token to execute DAX query on the same dataset
    data = {"queries": [{"query": query}]}
    url = f"{POWERBI_API_URL}/groups/{workspace_id}/datasets/{dataset_id}/executeQueries"
    result = make_api_request(url, method="POST", data=data, token=embed_token)

    if "error" in result:
        return f"Error: {result['error']}"

    results = result.get("results", [])
    if results and "tables" in results[0]:
        return json.dumps(results[0]["tables"], indent=2)
    else:
        return

Please help me to fix the issue

2 Replies