Module 7 : Power BI et Visualisation
Intégration Synapse + Power BI
Azure Synapse s'intègre nativement avec Power BI, permettant de visualiser les données directement depuis Synapse Studio.
+------------------+ +------------------+ +------------------+
| Data Lake | --> | Synapse SQL | --> | Power BI |
| (Raw Data) | | (Transformed) | | (Reports) |
+------------------+ +------------------+ +------------------+
|
Linked Service
|
+------------------------+
| Power BI Workspace |
| (dans Synapse Studio) |
+------------------------+
Configuration de la connexion
1. Lier un workspace Power BI
Étapes dans Synapse Studio :
- Manage > Linked Services > New
- Sélectionner "Power BI"
- Choisir le tenant et le workspace Power BI
- Authentification via Azure AD
2. Créer des rapports depuis Synapse
Une fois lié, vous pouvez :
- Voir les rapports Power BI existants dans Synapse Studio
- Créer de nouveaux rapports depuis les résultats SQL
- Publier directement vers Power BI Service
Modes de connexion aux données
1. DirectQuery
DirectQuery : Les requêtes sont exécutées en temps réel sur Synapse.
- Avantage : Données toujours à jour
- Inconvénient : Performance dépendante du pool SQL
- Usage : Dashboards temps réel, grands volumes
-- Optimiser les tables pour DirectQuery
CREATE TABLE dbo.FactVentes
WITH (
DISTRIBUTION = HASH(ClientID),
CLUSTERED COLUMNSTORE INDEX
);
-- Créer des statistiques pour l'optimiseur
CREATE STATISTICS stats_date ON dbo.FactVentes(DateVente);
CREATE STATISTICS stats_client ON dbo.FactVentes(ClientID);
2. Import Mode
Import : Les données sont copiées dans Power BI.
- Avantage : Performances rapides, fonctionne offline
- Inconvénient : Données potentiellement obsolètes
- Usage : Analyses historiques, rapports statiques
3. Composite Model
Combine Import et DirectQuery dans le même rapport :
- Tables de dimension en Import (petites, stables)
- Tables de faits en DirectQuery (grandes, temps réel)
Connexion depuis Power BI Desktop
SQL Pool Dédié
1. Get Data > Azure > Azure Synapse Analytics SQL
2. Server: myworkspace.sql.azuresynapse.net
3. Database: myDedicatedPool
4. Data Connectivity mode: DirectQuery ou Import
5. Authentification: Microsoft Account (Azure AD)
SQL Serverless
1. Get Data > Azure > Azure Synapse Analytics SQL
2. Server: myworkspace-ondemand.sql.azuresynapse.net
3. Database: master (ou votre base serverless)
4. Mode: DirectQuery recommandé
5. Écrire une requête SQL personnalisée
Exemple de requête pour Power BI
-- Vue optimisée pour Power BI
CREATE VIEW dbo.vw_VentesParRegion AS
SELECT
d.Annee,
d.Mois,
d.NomMois,
c.Region,
c.Pays,
p.Categorie,
p.SousCategorie,
SUM(f.Montant) AS TotalVentes,
SUM(f.Quantite) AS TotalQuantite,
COUNT(DISTINCT f.ClientID) AS NombreClients
FROM dbo.FactVentes f
JOIN dbo.DimDate d ON f.DateID = d.DateID
JOIN dbo.DimClient c ON f.ClientID = c.ClientID
JOIN dbo.DimProduit p ON f.ProduitID = p.ProduitID
GROUP BY
d.Annee, d.Mois, d.NomMois,
c.Region, c.Pays,
p.Categorie, p.SousCategorie;
Optimisations pour Power BI
Bonnes pratiques SQL
- Créer des vues agrégées pour réduire les calculs
- Utiliser des index columnstore pour les tables de faits
- Répliquer les petites tables de dimension
- Créer des statistiques sur les colonnes filtrées
- Éviter les colonnes calculées complexes côté SQL
Résultats cachés
-- Activer le cache des résultats
ALTER DATABASE myDedicatedPool
SET RESULT_SET_CACHING ON;
-- Vérifier l'utilisation du cache
SELECT
request_id,
result_cache_hit
FROM sys.dm_pdw_exec_requests
ORDER BY start_time DESC;
Materialized Views
-- Créer une vue matérialisée pour les agrégations fréquentes
CREATE MATERIALIZED VIEW dbo.mv_VentesMensuelles
WITH (DISTRIBUTION = HASH(ClientID))
AS
SELECT
ClientID,
YEAR(DateVente) AS Annee,
MONTH(DateVente) AS Mois,
SUM(Montant) AS TotalVentes,
COUNT(*) AS NombreTransactions
FROM dbo.FactVentes
GROUP BY
ClientID,
YEAR(DateVente),
MONTH(DateVente);
-- L'optimiseur utilise automatiquement la vue matérialisée
Visualisation dans Synapse Studio
Graphiques intégrés
Synapse Studio permet de visualiser rapidement les résultats SQL :
- Cliquer sur "Chart" après une requête
- Types disponibles : Bar, Line, Area, Scatter, Pie
- Export vers Power BI en un clic
Notebooks Spark + Visualisation
# Visualisation avec Matplotlib/Seaborn
import matplotlib.pyplot as plt
import seaborn as sns
# Convertir en Pandas pour visualiser
df_pandas = df.toPandas()
# Créer un graphique
plt.figure(figsize=(12, 6))
sns.barplot(data=df_pandas, x='mois', y='total_ventes', hue='annee')
plt.title('Ventes mensuelles par annee')
plt.xlabel('Mois')
plt.ylabel('Total des ventes')
plt.legend(title='Annee')
display(plt.show())
# Ou utiliser displayHTML pour des visualisations interactives
displayHTML("""
<div id="chart"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
""")
Architecture de reporting
Architecture recommandée pour l'entreprise:
+-------------+ +-------------+ +-------------+
| Data Lake | --> | Gold Layer | --> | Power BI |
| (Bronze/ | | (Synapse | | Premium |
| Silver) | | SQL Pool) | | Capacity |
+-------------+ +-------------+ +-------------+
| |
DirectQuery Dataflows
| |
+-------------+ +-------------+
| Dashboards | | Self-Service|
| Operationnels| | BI |
+-------------+ +-------------+
Sécurité Power BI + Synapse
Row-Level Security
-- La RLS définie dans Synapse est respectée par Power BI
-- Chaque utilisateur voit uniquement ses données
-- Alternative: RLS dans Power BI
-- 1. Créer un rôle dans Power BI Desktop
-- 2. Définir un filtre DAX:
[Region] = USERPRINCIPALNAME()
Single Sign-On (SSO) : Avec DirectQuery et SSO activé, l'identité de l'utilisateur Power BI est transmise à Synapse, appliquant automatiquement les permissions SQL.