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 :
  1. Manage > Linked Services > New
  2. Sélectionner "Power BI"
  3. Choisir le tenant et le workspace Power BI
  4. Authentification via Azure AD

2. Créer des rapports depuis Synapse

Une fois lié, vous pouvez :

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 :

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 :

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.