Projet Fabric : j’ai automatisé un pipeline complet d’analyse de données incluant un notebook Python

Cela fait un moment que je m’intéresse à Microsoft Fabric, depuis sa sortie en mai 2023, attiré par sa promesse d’unifier et simplifier les processus data – de la collecte des données au reporting – dans une même plateforme, mais aussi par les fonctionnalités très intéressantes offertes par rapport à l’usage de Power BI seul. Jusqu’ici, je n’avais pas vraiment franchi le pas, principalement à cause d’un flou ou une méconnaissance autour du licensing et des coûts d’usage,

Car on imagine souvent qu’il faut monter des architectures complexes, et aussi coûteuses, pour automatiser des processus data de A à Z, avoir des scripts partout, et des experts en data engineering ou MLOps derrière chaque étape.

Pourtant, avec Microsoft Fabric, j’ai pu monter assez simplement un pipeline de données complet incluant un dataflow, un notebook Python et un rapport Power BI, sans être un spécialiste en machine learning, ou un architecte cloud.

À travers ce retour d’expérience, je vous montre les étapes pour créer simplement un projet Fabric complet incluant un pipeline de données pour automatiser le processus de collecte de données jusqu’à la mise à jour des insights via un rapport Power BI.

Le projet

Je n’ai pas encore totalement levé les incertitudes liées aux coûts d’usage, car Fabric fonctionne un peu comme Azure, on paie pour utiliser des ressources ou Capacity Units (CU). Bien qu’on puisse estimer les coûts via une calculatrice de coûts (disponible ici), comment savoir combien d’heures ou de jours ai-je besoin d’acheter pour faire “tourner” mes processus data dans Fabric ? On m’a par ailleurs dit qu’il était possible d’activer ou désactiver la capacité Fabric manuellement, mais quel intérêt si l’on souhaite automatiser les process ?

Justement un excellent moyen pour y voir plus clair était de se lancer ! Ce projet me permet de tester Fabric concrètement, sur un cas d’usage réel, aussi bien sur la partie technique que la partie coût d’utilisation.

L’idée de départ vient d’un besoin d’un de mes clients : je cherchais à automatiser un traitement de données en Python, plus précisément un algorithme de Machine Learning  non supervisé de Clustering. A chaque nouvelle mise à jour des données sources, je voulais intégrer les nouvelles données à l’algorithme, puis mettre à jour un rapport Power BI, sans avoir à intervenir dans le processus.

Je voulais une chaîne automatisée qui utilise le minimum d’outils tiers pour mon client, qui est à 100% dans l’environnement Microsoft. Par ailleurs, je voulais une solution qui me permette de centraliser l’ensemble du processus data – collecte, traitement, enrichissement, modélisation, visualisation – sans multiplier les outils ni les coûts de licence.

Fabric offre cette promesse d’un environnement unifié, où tout se passe au même endroit, avec une expérience intégrée.

Voici le processus construit, intégrant un pipeline de données Microsoft Fabric :

  • Un déclenchement automatique du pipeline quand de nouvelles données d’entrée sont ajoutées, via Power Automate

  • Une ingestion des données via un Dataflow Gen2 et un Lakehouse

  • L’exécution d’un notebook Python pour appliquer un algorithme de clustering (K-Means) sur les données

  • L’écriture des résultats dans une table Delta du Lakehouse

  • Une restitution finale dans Power BI, mis à jour automatiquement via le pipeline à partir des tables du Lakehouse

Voici le schéma de fonctionnement depuis la source de données (Liste Sharepoint) au rapport Power BI :

Schéma du processus d’analytique

 

Nous allons voir maintenant pas à pas comment réaliser les différentes briques du projet.

Microsoft Fabric, en bref

Microsoft Fabric est une plateforme unifiée de données qui regroupe, dans un même environnement, des outils pour l’ingestion, le traitement, le stockage et la visualisation des données.
Tout est intégré (Data Factory, Data Engineering, Data Science, Power BI…), avec une interface cohérente et une facturation à l’usage, pensée pour simplifier les projets data — sans multiplier les outils ni les licences.

Je vous invite à consulter cette page de présentation sur Microsoft Learn : Qu’est-ce que Microsoft Fabric ?

Présentation de Microsoft Fabric

Etape 0 – Construire l’architecture du système

Deux éléments essentiels dans Fabric sont les Espaces de travail et les Lakehouses.

  • L’Espace de travail : Un espace de travail Fabric est le point d’entrée obligatoire pour tout projet.
    C’est l’équivalent d’un dossier dans lequel on va regrouper tous les objets Fabric : dataflows, notebooks, pipelines, rapports Power BI, Lakehouse, etc.
  • Le LakehouseLa base de Microsoft Fabric est un Lakehouse. C’est là que les données sont écrites, lues et traitées par tous les autres objets Fabric (Dataflow Gen2, Notebook, rapport Power BI).
    Il repose sur le format structuré Table Delta Lake et permet aussi du stockage non-structuré (fichiers), comme les blobs Azure pour ceux qui connaissent.

✅Voici ce que j’ai fait :

Cliquer pour voir l’animation – Création d’un espace de travail Fabric

 

  • Création d’un Lakehouse dans l’espace de travail :
Cliquer pour voir l’animation – Création d’un Lakehouse dans l’espace de travail

Étape 1 – La source de données : ici une Liste SharePoint

J’utilise une Liste Sharepoint comme source de données, parce c’est une source de données cloud, simple comme Excel et accessible à tout le monde (possédant une licence M365). On peut créer une liste Sharepoint facilement en important un fichier Excel.

Source de données – Ici une liste Sharepoint

Elle sera accessible via une URL de type : https://[nom-domaine].sharepoint.com/sites/[nom-du-site]/Lists/[nom-de-la-liste]

J’ai également créé un formulaire de liste Sharepoint (nouveauté 2024) pour pouvoir saisir facilement des données dans Sharepoint et simuler de nouvelles entrées.

Il suffit ensuite de partager le formulaire via son URL, puis de saisir des données et cliquer sur Envoyer pour alimenter la liste :

Formulaire de liste Sharepoint

Vous pourrez télécharger mon exemple de fichier d’entrée à la fin de cet article.

Étape 2 – Le Dataflow Gen2 : Collecte et retraitement des données

Maintenant, on doit collecter les données de notre Liste Sharepoint et les stocker dans Fabric.

Cette étape passe par un Dataflow Gen2. Le Dataflow Gen2 est essentiel ici car :

  • C’est un point d’entrée pour lire des éléments depuis SharePoint
  • Il est low-code (éditeur Power Query en ligne) et réutilisable comme une source de données
  • Il permet d’écrire le résultat de la requête d’importation dans une destination, ici ce sera une table dans le Lakehouse du projet

✅ Étapes clés :

  • Depuis l’espace de travail → Nouvel élément → Flux de données Gen2

  • Obtenir des données → Ajouter une source “SharePoint Online List”
  • Choisir la liste depuis le site Sharepoint localisé par son URL
  • Appliquer quelques transformations de base
  • Choisir une destination : c’est l’énorme avantage par rapport à Power Query dans Power BI ou un Dataflow classique (Gen 1). On peut générer une sortie de la requête Power Query dans un Lakehouse ou base SQL Azure. Ici, nous choisissons d’écrire dans une table R_Entries du Lakehouse, ce qui permet de créer en somme une base de données.
Destination de la table du Dataflow Gen2

 

  • Actualisation du Dataflow Gen2, c’est là que j’ai eu quelques difficultés.

En effet, dans les étapes suivantes, le pipeline de données ne voulait pas actualiser le Dataflow Gen2. Une recherche sur l’erreur m’a amené à cocher l’option sur la requête du dataflow “Activer la mise en scène”. J’avoue que je n’ai pas encore regardé cette option de Staging, mais en l’activant l’erreur était résolue.

Option de staging à cocher (ou pas ?)

Étape 3 – Le Lakehouse Fabric : Point d’ancrage des données

Pourquoi le Lakehouse ? Les lakehouses stockent tous les formats de données sous forme de tables ou de fichiers, et peuvent être utilisés avec les notebook Fabric de manière native, sans se compliquer la vie pour l’accès aux données, l’authentification. Dans mon cas, c’était le point de passage commun à tous les éléments de mon projet : Dataflow, Notebook, Data Pipeline, Power BI.

✅ Étapes clés :

  • Création d’un Lakehouse dans Fabric → voir Etape 0
  • Ciblage de ce Lakehouse comme destination du Dataflow Gen2 → voir Etape 2

L’énorme avantage du Lakehouse est qu’on peut s’y connecter comme à une base SQL. Pour cela, allez dans les paramètres du Lakehouse et récupérer sa chaine de connection SQL. Vous pourrez la copier dans votre notebook ou dans Power BI Desktop pour vous y connecter plus tard :

Récupérer l’URL du point de terminaison SQL du Lakehouse

Étape 4 – Le notebook Python : Traitement Machine Learning des données

Pourquoi un notebook ? Le notebook Fabric permet d’intégrer facilement au processus data un code exécutable Python ou PySpark.
Ici, il me sert à appliquer un algorithme de clustering K-Means sur deux variables (TpsIndiv et TpsCollab), pour identifier automatiquement des groupes de données similaires.

A noter :
Initialement, j’avais rédigé le notebook entièrement en Python. Mais dans Fabric, un notebook Python ne peut pas lire ou écrire directement dans une table Lakehouse. Il a donc fallu convertir le notebook en PySpark, qui permet d’écrire directement dans une table du Lakehouse.

✅ Étapes clés :

  • Depuis l’espace de travail → Nouvel élément → Bloc-note
Cliquer pour voir l’animation – Création d’un notebook Fabric

 

  • Add data items → Lakehouse du projet → Table du projet R_Entries
Connexion d’une source au Notebook

Ensuite, vous pouvez insérer le code pour lire la source simplement en glissant la table dans le notebook :

Lire la source par simple glisser-déposer !

 

  • Ecriture d’un script PySpark pour :
    • Lire les données d’entrée R_Entries depuis le Lakehouse
    • Convertir la table en dataframe pandas pour le traitement des clusters
    • Application d’un algorithme K-Means (3 clusters)
    • Écriture du résultat final dans une nouvelle table du LakeHouse : R_Clusters
    • Visualisation dans un graphique
  • Enregistrer et tester le script

Voici mon code pour ceux qui aimeraient reprendre ce projet :

from pyspark.sql import SparkSession
from pyspark.sql.functions import col
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import pandas as pd

# Initialisation Spark
spark = SparkSession.builder.getOrCreate()

# Chargement depuis table Lakehouse
df = spark.sql("SELECT * FROM PythonLakehouse.R_Entries")

# Sélection des colonnes
df_clean = df.select(
    col("ID").alias("ID"),
    col("TpsIndiv").cast("double").alias("TpsIndiv"),
    col("TpsCollab").cast("double").alias("TpsCollab")
).filter(col("ID").isNotNull())

display(df_clean.limit(10))

# Conversion Spark → pandas pour clustering sklearn
df_pandas = df_clean.toPandas()

# Statistiques
df_pandas.describe()

# Clustering
X = df_pandas[['TpsIndiv', 'TpsCollab']].fillna(0)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
df_pandas['Cluster'] = kmeans.fit_predict(X_scaled)

# Labels automatiques des clusters
centroids = kmeans.cluster_centers_
unscaled_centroids = scaler.inverse_transform(centroids)
intensities = [x + y for x, y in unscaled_centroids]
sorted_indices = np.argsort(intensities)
intensity_labels = ["Temps perdu +", "Temps perdu ++", "Temps perdu +++"]
labels_map = {cluster: intensity_labels[rank] for rank, cluster in enumerate(sorted_indices)}
df_pandas['Clusters'] = df_pandas['Cluster'].map(labels_map)

# Export vers Lakehouse
df_export = df_pandas[['ID', 'TpsIndiv', 'TpsCollab', 'Clusters']]
df_export_spark = spark.createDataFrame(df_export)
df_export_spark.write \
    .option("overwriteSchema", "true") \
    .mode("overwrite") \
    .format("delta") \
    .saveAsTable("R_Clusters")

# Affichage
display(df_export_spark.limit(10))

# Visualisation
for cluster_label in sorted(df_pandas['Clusters'].unique()):
    cluster_data = df_pandas[df_pandas['Clusters'] == cluster_label]
    plt.scatter(cluster_data['TpsIndiv'], cluster_data['TpsCollab'], label=cluster_label)

# Centroïdes
centroids_x, centroids_y = unscaled_centroids[:, 0], unscaled_centroids[:, 1]
plt.scatter(centroids_x, centroids_y, c='black', marker='X', s=200, label='Centroïdes')
plt.axline((0, 0), slope=1, linestyle='--', color='gray', label='y = x')
plt.xlabel("TpsIndiv")
plt.ylabel("TpsCollab")
plt.title("Scatter Clustering")
plt.legend()
plt.show()

Un notebook permet même d’y ajouter des graphiques de type matplotlib, pratique pour visualiser le résultat avant l’export :

Je vous conseille de découper ce script en plusieurs cellules et markdowns, pour être plus lisible et pouvoir afficher des sorties intermédiaires.

Étape 5 – Power BI : Insights des données

Une fois que le Dataflow et le Notebook ont été testés une première fois, leurs résultats peuvent être visualisés dans Power BI.

✅ Étapes clés :

  • Création d’un rapport Power BI
  • Connexion directe au Dataflow Gen2 pour charger les données sources (R_Entries)
  • Connexion au Lakehouse pour intégrer la table enrichie (R_Clusters) issue du Notebook
Obtenir les données sources pour Power BI

 

  • Construction de visuels simples :
    • Un graphique de dispersion (scatter plot) des points mettant en évidence les clusters
    • Une matrice pour dénombrer les points de données par clusters
Graphique en nuage de points (Scatter Plot) avec Clusters issus de l’apprentissage automatique

 

  • Publication du rapport dans l’espace de travail Fabric

A noter :
J’ai connecté Power BI au Dataflow Gen2 plutôt qu’au Lakehouse pour les données sources, car je me suis dit au début que je voulais avoir une actualisation du dataflow et du rapport Power BI indépendante du lakehouse et du notebook. A l’heure où j’écris, je ne sais pas si c’est la meilleure pratique, je verrai dans le temps.

Points d’attention :

  1. Au moment de charger le Dataflow, j’ai eu la première fois l’erreur suivante. Pour la résoudre, il a fallu cocher dans la requête du dataflow “Activer la mise en scène” (clic-droit)

2. Concernant l’actualisation du rapport Power BI, depuis Power BI Service avec ou sans le Pipeline. J’ai dû configurer les informations d’identification de la source de données comme dh’abitude, mais également ce qui se trouve au-dessus, la connexion cloud. Je n’avais jamais eu à le faire auparavant, et je ne sais pas à l’heure où j’écris si c’est une spécificité liée aux Lakehouse, Dataflow Gen2, une erreur de configuration de ma part, etc. Sans cette configuration de la connexion cloud, le modèle sémantique ne s’actualisait pas.

Paramètres de connexion du modèle sémantique Power BI

Étape 6 – Le Pipeline Fabric : Automatiser de bout-en-bout

Pourquoi un pipeline ? Comme notre processus fait appel à plusieurs entités : Dataflow, Notebook, rapport Power BI, il faut un outil pour chaîner ces étapes d’ingestion, de traitement, et de restitution des données.
Le pipeline assure que tout s’exécute dans le bon ordre, sans intervention manuelle.

A noter : A l’heure où j’écris, je trouve qu’il manque des options pour déclencher le pipeline ! En effet, pour exécuter le pipeline chaque fois qu’une nouvelle entrée est saisie dans la liste Sharepoint, j’ai dû créer un flux Power Automate en suivant l’astuce donnée dans ce blog.

Les options de déclenchement du pipeline par défaut étant les suivantes :

Types de déclencheurs de Pipeline Fabric

✅ Étapes clés :

  • Depuis l’espace de travail → Nouvel élément → Data Pipeline
  • Ajout des “activités” suivantes :
    • Le Dataflow Gen2 (chargement du fichier SharePoint)
    • Le Notebook PySpark (clustering)
    • Le modèle sémantique du rapport Power BI
    • Envoi d’email via Outlook en cas d’échec de n’importe quelle étape du pipeline
Data Pipeline Fabric

 

  • Configuration de chaque activité pour se connecter à l’élément correspondant du projet :
Configuration de chaque “activité”

 

  • Définition d’une chaîne de relations entre chaque étape
  • Test avec exécution manuelle, mais possibilité de l’automatiser via Power Automate (cf. plus bas)

Le résultat est un pipeline fonctionnel, simple à construire car visuel et sans code, qui exécute toute la logique métier en un clic (ou automatiquement).

Étape Bonus – Automatiser le pipeline lui-même !

N’ayant pas (encore) trouvé dans les options par défaut de déclenchement automatique du data pipeline comment l’exécuter à chaque fois que de nouvelles données arrivent dans la source de données, j’ai cherché du côté de Power Automate, connaissant bien l’outil et sachant qu’un déclencheur Sharepoint existe pour chaque nouvelle ligne créée dans une liste Sharepoint.

Voici le flux créé :

Flux Power Automate de déclenchement du Pipeline

 

Paramètres de la requête HTTP d’appel API Fabric

 

Je ne vous détaille pas la solution ici car elle est déjà bien expliquée dans ce blog.

A noter cependant, que lors de la création de la connexion pour la requête HTTP with Microsoft Entra ID (pré-autorisé), j’ai dû mettre les paramètres d’url suivant :  https://api.fabric.microsoft.com

 

Le résultat obtenu est qu’à chaque saisie de nouvelles données, le pipeline de données est exécuté, actualisant de manière ordonnée et autonome toute la chaîne data : Dataflow, Notebook, Power BI.

Data Pipeline Fabric en action !

Conclusion

Ce projet m’a permis de pratiquer de manière concrète Microsoft Fabric, sans attendre d’avoir tout compris (!) sur tout.

En partant d’une simple liste SharePoint, j’ai construit une solution d’analyse automatisée de bout en bout :

  • Ingestion automatique des données via un Dataflow Gen2
  • Traitement Machine Learning via un notebook PySpark
  • Actualisation de la chaine via un Data Pipeline Fabric
  • Visualisation dynamique dans Power BI

Le tout, dans une seule plateforme, de manière fluide et intuitive, sans infrastructure complexe ni multiplications des outils.

Mot de la fin : L’année dernière (2024), j’avais fait une formation en DataScience, où nous avions utilisé une multitude d’outils, de lignes de codes et de plateformes pour tester et packager nos modèles de machine learning, mais ce que je retiens avec Fabric, c’est que la plateforme rend l’automatisation de scenario Data Analytics / Data Science beaucoup plus accessible que sans.

Aller plus loin

Me concernant, l’aventure Microsoft Fabric ne fait que démarrer ! Je dois encore me pencher sur les coûts, les usages notamment de l’IA dans Fabric, le concept de Onelake, etc, etc.

Voici quelques ressources pour approfondir :

Bonne exploration !

J’espère que ce mini projet vous a plu, laissez-moi un commentaire si vous voulez que je fasse d’autres projets de ce type sur un outil particulier

RESSOURCES UTILES DU PROJET

Pipeline Fabric ML Python

Voici un exemple simple de mise en place d'une solution analytique de bout en bout avec Fabric.
Télécharger

Envoyer le lien de téléchargement à :

Oui, je consens à recevoir la Newsletter. Je confirme avoir lu et accepté la Politique de confidentialité.

Merci d’avoir suivi cet article et mon blog !!

Souscrivez à ma newsletter :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *