Utilisation de l'API REST Power BI pour la Manipulation des Datasets avec Python
Aug 02, 2024L'API REST Power BI est un outil puissant pour interagir avec les ressources de Power BI Service. Elle permet de récupérer, manipuler, et analyser des données de manière automatisée, ce qui est crucial pour les tâches de reporting et d'analyse. Cet article explore l'importance de cette API et montre comment l'utiliser avec Python pour interagir avec les datasets dans Power BI.
Introduction à l'API REST Power BI
L'API REST Power BI fournit des capacités avancées pour gérer les ressources de Power BI, y compris la manipulation des datasets. Grâce à cette API, il est possible d'exécuter des requêtes DAX sur des datasets et d'obtenir des résultats de manière programmatique. Cela facilite l'intégration de Power BI dans des flux de travail automatisés et permet une analyse plus approfondie des données.
Récupération et Manipulation des Données
Tout d'abords nous devons connaitre l'id du dataset et aussi l'id du group dans l'espace powerbiapp
Il faut récupérer ces deux identifiants ainsi :
On doit maintenant récupérer le Token de connexion en allant sur ce lien
https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/get-dataset#code-try-0
Il faut récupérer le token et l'ajouter dans un fichier .env
N'oublier pas qu'il faut refaire cette étape lorsqu'il y a expiration du token
POWER_BI_TOKEN= <coller le token ici>
Le premier script montre comment exécuter des requêtes sur un dataset spécifique via l'API REST Power BI. Voici une explication détaillée des blocs de ce script :
Chargement des Variables d'Environnement
from dotenv import load_dotenv import os import requests import pandas as pd # Charger les variables d'environnement depuis le fichier .env load_dotenv() # Récupérer le token depuis les variables d'environnement token = os.getenv('POWER_BI_TOKEN')
Ce bloc de code charge les variables d'environnement et récupère le token nécessaire pour l'authentification auprès de l'API Power BI.
# URL de la requête url = "https://api.powerbi.com/v1.0/myorg/datasets/2a51b4c5-cfd6-4dd4-a2e6-838ef41884eb/executeQueries" # En-têtes de la requête headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Corps de la requête body = { "queries": [ { "query": "EVALUATE VALUES(Calendar)" } ], "serializerSettings": { "includeNulls": True } }
Ce bloc définit l'URL de l'API, les en-têtes nécessaires, et le corps de la requête avec la requête DAX pour récupérer les valeurs d'une table Calendar.
Exécution de la Requête et Traitement des Résultats
# Faire la requête POST response = requests.post(url, headers=headers, json=body) # Vérifier la réponse if response.status_code == 200: data = response.json() # Vérifier la structure de la réponse if 'results' in data and len(data['results']) > 0: df = pd.DataFrame(data['results'][0]['tables'][0]['rows']) print("DataFrame créé avec succès") else: print("Structure de la réponse inattendue") else: print(f"Échec de la requête : {response.status_code}") print(response.text)
Ce bloc envoie la requête POST, traite la réponse, et convertit les données en DataFrame Pandas pour une analyse ultérieure.
Interaction Dynamique avec les Datasets via ipywidgets
Le second script améliore l'interaction en permettant à l'utilisateur de sélectionner dynamiquement les tables à partir desquelles les données seront récupérées. Voici une explication détaillée du script :
Fonction pour Charger les Données
Tables = ['Calendar', 'Customers', 'Product', 'Purchases', 'Sales'] def load_data(table): load_dotenv() # Récupérer le token depuis les variables d'environnement token = os.getenv('POWER_BI_TOKEN') # URL de la requête url = "https://api.powerbi.com/v1.0/myorg/datasets/2a51b4c5-cfd6-4dd4-a2e6-838ef41884eb/executeQueries" # En-têtes de la requête headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Corps de la requête body = { "queries": [ { "query": f"EVALUATE VALUES({table})" } ], "serializerSettings": { "includeNulls": True } } # Faire la requête POST response = requests.post(url, headers=headers, json=body) # Vérifier la réponse if response.status_code == 200: data = response.json() if 'results' in data and len(data['results']) > 0: df = pd.DataFrame(data['results'][0]['tables'][0]['rows']) print(f"DataFrame chargé avec succès , shape = {df.shape}") return df.head() else: print("Structure de la réponse inattendue") else: print(f"Échec de la requête : {response.status_code}") print(response.text)
Cette fonction load_data
récupère les données pour une table spécifiée en utilisant l'API Power BI. Le corps de la requête est construit dynamiquement en fonction du nom de la table fourni.
Interaction avec ipywidgets
from ipywidgets import interact interact(load_data, table=Tables);
Le widget interact
permet aux utilisateurs de sélectionner une table depuis une liste déroulante. Lorsqu'une table est sélectionnée, la fonction load_data
est appelée pour récupérer et afficher les données de la table choisie. Cela permet une exploration interactive et pratique des données disponibles dans le dataset.
Conclusion
L'utilisation de l'API REST Power BI avec Python vous permet de gérer efficacement les datasets et d'automatiser les tâches liées aux données. En combinant cette API avec des outils comme ipywidgets
, vous pouvez créer des interfaces interactives pour explorer et analyser les données de manière plus engageante. Les scripts fournis illustrent comment récupérer des données et offrir des fonctionnalités interactives pour une exploration dynamique des datasets.