Ceb
Ceb

Reputation: 1

Connect to Power BI DataSet using Python

I'm new here and I need help for my work, I searched for days but i'm stioll stuck.

I'm trying to connect to a Power Bi data set from python. I have a sample of code that kinda worked on Windows so you can understand what I'm trying to do :

first part of the code is getting the token acces

Token Acces

The second part of my code :

import requests
import json
import pandas as pd

# Définir les paramètres de l'API
api_url = "https://api.powerbi.com/v1.0/myorg/groups"
# NNFR B2B - EVS Management
group_id = "fbfe470a-03ab-4d6b-a7f8-c00226acdff8"
# access_token : préalablement récupéré
headers = {
    "Authorization": f"Bearer {access_token}"
}

# Définir la fonction pour récupérer l'endpoint de l'API Power BI pour un groupe spécifique
def get_powerbi_api_endpoint(group_id, headers):
    # Envoyer une requête GET à l'API pour récupérer les détails du groupe
    response = requests.get(f"{api_url}/{group_id}", headers=headers)
    print('powerbi endpoint :', response)
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        # Extraire l'endpoint de l'API à partir de la réponse JSON
        #api_endpoint = json.loads(response.content)["webUrl"]
        api_endpoint = json.loads(response.content)
        print(api_endpoint)
        return api_endpoint
    else:
        # Levée d'une exception en cas d'échec de la requête
        raise Exception(f"La requête a échoué avec le code d'état {response.status_code}")

# Définir la fonction pour récupérer le contenu de l'endpoint Power BI dans un dataframe
def get_powerbi_dataframe(api_endpoint, headers):
    # Envoyer une requête GET à l'API pour récupérer le contenu de l'endpoint
    response = requests.get(api_endpoint, headers=headers)
    print(response)
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        # Extraire les données à partir de la réponse JSON
        data = json.loads(response.content)["value"]

        # Convertir les données en dataframe
        df = pd.DataFrame(data)

        return df
    else:
        # Levée d'une exception en cas d'échec de la requête
        raise Exception(f"La requête a échoué avec le code d'état {response.status_code}")

# Appeler les fonctions pour récupérer l'endpoint et le contenu de l'endpoint dans un dataframe
try:
    api_endpoint = get_powerbi_api_endpoint(group_id, headers)
    df = get_powerbi_dataframe(api_endpoint, headers)

    # Afficher les 5 premières lignes du dataframe
    print(df.head())
except Exception as e:
    print(f"Une erreur s'est produite : {e}")

I got the endpoint

powerbi endpoint : <Response [200]>
{'isReadOnly': False, 'isOnDedicatedCapacity': True, 'capacityId': 'E9CB1998-F1F6-4F56-9C54-547FFD9AC7AA', 'defaultDatasetStorageFormat': 'Small', 'type': 'Workspace', 'id': 'fbfe470a-03ab-4d6b-a7f8-c00226acdff8', 'name': 'NNFR B2B - EVS Management'}

The third part of my code :

import adodbapi

# Définir la chaîne de connexion
chaine_connexion = (
    "Provider=MSOLAP.8;"
    "Integrated Security=ClaimsToken;"
    "Persist Security Info=True;"
    "Initial Catalog=sobe_wowvirtualserver-26a54e70-8fe9-46cf-ad66-a10075cf015d;"
    "Data Source=pbiazure://api.powerbi.com;"
    "MDX Compatibility=1;"
    "Safety Options=2;"
    "MDX Missing Member Mode=Error;"
    "Identity Provider=https://login.microsoftonline.com/common, "
    "https://analysis.windows.net/powerbi/api, 929d0ec0-7a41-4b1e-bc7c-b754a28bddcc;"
    "Update Isolation Level=2;"
)

# Définir le token de sécurité
access_token

# Ajouter le token de sécurité aux options de connexion
chaine_connexion += f"Password={access_token};"

# Requête MDX pour lister les vues du cube
requete_mdx = """
SELECT
    [CATALOG_NAME] AS [Database],
    [CUBE_NAME] AS [Cube],
    [DIMENSION_UNIQUE_NAME] AS [Dimension],
    [HIERARCHY_UNIQUE_NAME] AS [Hierarchy]
FROM
    $SYSTEM.MDSCHEMA_HIERARCHIES
"""

try:
    # Établir la connexion
    connexion = adodbapi.connect(chaine_connexion)

    # Créer un curseur pour exécuter la requête
    curseur = connexion.cursor()

    # Exécuter la requête MDX
    curseur.execute(requete_mdx)

    # Récupérer et afficher les résultats
    resultats = curseur.fetchall()
    for ligne in resultats:
        print(ligne)

    # Fermer le curseur et la connexion
    curseur.close()
    connexion.close()

except Exception as e:
    print(f"Une erreur s'est produite : {e}")

I normally have an output like this : Output

This code work fine on Windows. But my working environment is Linux ubuntu, and what i found that is that we can not use adodbapi on linux ubuntu. Any of you know how can i work around this ? It will be very useful

I tried using pyodbc but without success.

Upvotes: 0

Views: 562

Answers (0)

Related Questions