Reputation: 1
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
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