Accueil A propos Tech Stack Projets Blog
Retour au Blog

AI Functions in
Fabric Data Warehouse

Analysez, classifiez, résumez et traduisez du texte non structuré directement en T-SQL. Sans Python, sans API externe, sans pipeline ML.

Sommaire
  1. Introduction : le texte non structuré, angle mort du Data Warehouse
  2. Les 7 fonctions AI intégrées
  3. Setup : charger AdventureWorks dans Fabric
  4. Scénario 1 : Analyse de sentiment et classification des commandes
  5. Scénario 2 : Extraction d'entités structurées (ai_extract + OPENJSON)
  6. Scénario 3 : Catalogue de produits multilingue
  7. Scénario 4 : Recommandations cross-sell avec ai_generate_response
  8. Pipeline complet : Gold table enrichie
  9. Performance et limitations
  10. Pourquoi ça change la donne pour les Data Engineers

01. Introduction : le texte non structuré, angle mort du Data Warehouse

En tant que Data Engineers, nous passons l'essentiel de notre temps à structurer, nettoyer et transformer des données. Mais il existe une catégorie de données que nous avons historiquement évitée dans nos warehouses : le texte non structuré. Avis clients, tickets de support, notes CRM, descriptions libres... Ils contiennent tous des insights métier précieux, mais en extraire la valeur nécessitait traditionnellement des notebooks Python, des bibliothèques NLP ou des API AI externes.

Cela vient de changer. Microsoft Fabric propose désormais des fonctions AI intégrées directement dans le Data Warehouse et le SQL Analytics Endpoint. Vous pouvez analyser le sentiment, classifier du texte, extraire des entités, résumer, traduire et même corriger la grammaire, le tout en pur T-SQL. Pas de notebook Spark, pas d'endpoint Azure OpenAI à configurer, pas d'infrastructure à gérer.

Dans cet article, je vous présente ces fonctions en utilisant la base de données AdventureWorks, un dataset que chaque utilisateur Fabric peut charger en quelques minutes. Tous les exemples sont immédiatement reproductibles dans votre propre workspace.

02. Les 7 fonctions AI intégrées

Fonction Usage Syntaxe
ai_analyze_sentiment Détecter le sentiment (positive/negative/mixed/neutral) ai_analyze_sentiment(<text>)
ai_classify Classifier du texte dans des catégories fournies ai_classify(<text>, 'cat1', 'cat2', ...)
ai_extract Extraire des entités sous forme d'objet JSON ai_extract(<text>, 'entity1', 'entity2', ...)
ai_summarize Résumer du texte ai_summarize(<text>)
ai_translate Traduire du texte (de, en, fr, es, it, el, pl, sv, fi, cs) ai_translate(<text>, 'fr')
ai_fix_grammar Corriger la grammaire ai_fix_grammar(<text>)
ai_generate_response Générer une réponse à partir d'un prompt custom ai_generate_response(<prompt>, <data>)
Bon à savoir

Ces fonctions appellent Azure OpenAI sous le capot, mais vous n'avez rien à provisionner. C'est intégré au runtime de Fabric. Vitesse de traitement : 20 à 100 lignes par seconde.

03. Setup : charger AdventureWorks dans Fabric

Pour reproduire les exemples de cet article, vous aurez besoin de trois éléments :

  1. Créer une SQL Database dans Fabric et charger le sample AdventureWorks LT
  2. Créer un Warehouse dans le même workspace
  3. Copier les tables dans le Warehouse avec CREATE TABLE AS SELECT (car les AI Functions ne fonctionnent que dans le Warehouse, PAS dans la SQL Database)
Attention

Important : les AI Functions ne sont disponibles que dans le Warehouse et le SQL Analytics Endpoint. Elles ne fonctionnent PAS dans une SQL Database Fabric. Vous devez copier les tables dans un Warehouse.

SQL Copie des tables AdventureWorks vers le Warehouse
CREATE TABLE dbo.SalesOrderHeader
AS SELECT * FROM [AdventureWorksLT].SalesLT.SalesOrderHeader;

CREATE TABLE dbo.Customer
AS SELECT * FROM [AdventureWorksLT].SalesLT.Customer;

CREATE TABLE dbo.Product
AS SELECT * FROM [AdventureWorksLT].SalesLT.Product;

CREATE TABLE dbo.ProductDescription
AS SELECT * FROM [AdventureWorksLT].SalesLT.ProductDescription;

CREATE TABLE dbo.ProductModel
AS SELECT * FROM [AdventureWorksLT].SalesLT.ProductModel;

CREATE TABLE dbo.ProductModelProductDescription
AS SELECT * FROM [AdventureWorksLT].SalesLT.ProductModelProductDescription;

Par défaut, AdventureWorks ne contient pas de commentaires sur les commandes (les champs Comment sont NULL). Ajoutons des commentaires réalistes pour nos tests :

SQL Ajout de commentaires de test
UPDATE dbo.SalesOrderHeader
SET Comment = CASE SalesOrderID % 6
    WHEN 0 THEN 'Shipping was too slow, package arrived damaged. Very disappointed with the service.'
    WHEN 1 THEN 'Great experience! The bike arrived on time and in perfect condition. Will order again.'
    WHEN 2 THEN 'Price seems too high compared to competitors. Please review your pricing policy.'
    WHEN 3 THEN 'URGENT: Need this order delivered before Friday for a corporate event. Please rush!'
    WHEN 4 THEN 'Product quality is excellent. The frame is lightweight and durable. Highly recommend.'
    WHEN 5 THEN 'Wrong color received. I ordered red but got blue. Need a replacement ASAP.'
END;

04. Scénario 1 : Analyse de sentiment et classification des commandes

Le problème : les commentaires des commandes sont stockés en texte libre. Personne ne les lit de manière systématique, aucune tendance n'est détectée et les plaintes urgentes se noient dans le volume.

Avec trois fonctions AI dans une seule requête, nous pouvons analyser le sentiment, classifier la catégorie et résumer chaque commentaire :

SQL Sentiment + Classification + Résumé
SELECT
    s.SalesOrderID,
    s.OrderDate,
    c.CompanyName,
    s.Comment,
    ai_analyze_sentiment(s.Comment) AS sentiment,
    ai_classify(s.Comment,
        'shipping', 'product quality', 'pricing',
        'urgent request', 'general feedback', 'other') AS category,
    ai_summarize(s.Comment) AS summary
FROM dbo.SalesOrderHeader s
INNER JOIN dbo.Customer c ON s.CustomerID = c.CustomerID
WHERE s.Comment IS NOT NULL;
Résultats de ai_analyze_sentiment, ai_classify et ai_summarize sur les commandes AdventureWorks

Résultat : chaque commentaire de commande est analysé en sentiment, catégorie et résumé, en seulement 3,7 secondes

Résultat clé

  • Une seule requête. Chaque commentaire reçoit un sentiment (positive/negative), une catégorie (shipping, pricing...) et un résumé en une ligne.
  • Connectez le résultat à Power BI via Direct Lake pour des tableaux de bord en temps réel sur le sentiment client.
  • Aucun notebook Python, aucune API externe. Tout se fait en T-SQL natif.

05. Scénario 2 : Extraction d'entités structurées (ai_extract + OPENJSON)

Le texte libre contient des informations structurables : type de problème, niveau d'urgence, action demandée. Traditionnellement, il faudrait des regex complexes ou du NLP custom. Avec ai_extract, l'AI comprend le sens sémantique du texte et extrait directement les entités souhaitées.

SQL Extraction d'entités avec ai_extract + OPENJSON
SELECT
    s.SalesOrderID,
    s.Comment,
    extraction.*
FROM dbo.SalesOrderHeader s
CROSS APPLY OPENJSON(
    ai_extract(s.Comment,
        'issue_type', 'urgency', 'requested_action', 'delivery_preference')
) WITH (
    issue_type VARCHAR(200),
    urgency VARCHAR(50),
    requested_action VARCHAR(500),
    delivery_preference VARCHAR(200)
) AS extraction
WHERE s.Comment IS NOT NULL;
ai_extract avec OPENJSON transformant les commentaires en colonnes structurées

ai_extract transforme du texte libre en colonnes structurées : issue_type, urgency, requested_action, delivery_preference

Pattern clé

Le pattern CROSS APPLY OPENJSON est la clé pour exploiter ai_extract. La fonction retourne du JSON, OPENJSON le décompose en colonnes relationnelles. C'est le bridge entre l'AI et le monde relationnel.

06. Scénario 3 : Catalogue de produits multilingue

Internationaliser un catalogue de produits nécessitait traditionnellement des traducteurs humains ou des API de traduction externes. Avec ai_translate, une seule requête SQL génère le catalogue en plusieurs langues :

SQL Traduction multilingue du catalogue
SELECT TOP 10
    pm.ProductModelID,
    pm.Name AS ModelName,
    pd.Description AS description_en,
    ai_translate(pd.Description, 'fr') AS description_fr,
    ai_translate(pd.Description, 'de') AS description_de,
    ai_translate(pd.Description, 'es') AS description_es
FROM dbo.ProductModel pm
INNER JOIN dbo.ProductModelProductDescription pmpd
    ON pm.ProductModelID = pmpd.ProductModelID
INNER JOIN dbo.ProductDescription pd
    ON pmpd.ProductDescriptionID = pd.ProductDescriptionID
WHERE pmpd.Culture = 'en';
Traduction du catalogue produits AdventureWorks en français, allemand et espagnol

Descriptions de produits traduites automatiquement en français, allemand et espagnol, en 7,4 secondes pour 10 produits

07. Scénario 4 : Recommandations cross-sell avec ai_generate_response

ai_generate_response est la fonction la plus flexible. Elle permet d'envoyer un prompt personnalisé avec des données contextuelles. Ici, nous l'utilisons pour générer des suggestions de ventes croisées à partir des descriptions de produits :

SQL Génération de recommandations cross-sell
SELECT TOP 5
    p.ProductID,
    p.Name,
    pd.Description,
    ai_generate_response(
        'Based on this product description, suggest 2 complementary product categories a customer might also need. Return as a short comma-separated list.',
        pd.Description
    ) AS cross_sell_suggestions
FROM dbo.Product p
INNER JOIN dbo.ProductModelProductDescription pmpd
    ON p.ProductModelID = pmpd.ProductModelID
INNER JOIN dbo.ProductDescription pd
    ON pmpd.ProductDescriptionID = pd.ProductDescriptionID
WHERE pmpd.Culture = 'en';
ai_generate_response générant des suggestions de cross-sell

ai_generate_response génère des recommandations cross-sell pertinentes à partir des descriptions produits

08. Pipeline complet : Gold table enrichie

Combinons maintenant toutes les fonctions AI dans une seule requête pour créer une table Gold enrichie, prête pour Power BI. C'est le pattern Medallion Architecture appliqué à l'enrichissement par l'IA :

SQL Création de la table Gold enrichie
CREATE TABLE dbo.gold_orders_enriched
AS
SELECT
    s.SalesOrderID,
    s.OrderDate,
    c.CompanyName,
    c.FirstName + ' ' + c.LastName AS CustomerName,
    s.TotalDue,
    s.Comment,
    ai_summarize(s.Comment) AS comment_summary,
    ai_analyze_sentiment(s.Comment) AS comment_sentiment,
    ai_classify(s.Comment,
        'shipping', 'product issue', 'pricing',
        'urgent', 'positive feedback', 'other') AS comment_category,
    ai_translate(s.Comment, 'fr') AS comment_fr,
    ai_translate(s.Comment, 'es') AS comment_es
FROM dbo.SalesOrderHeader s
INNER JOIN dbo.Customer c ON s.CustomerID = c.CustomerID
WHERE s.Comment IS NOT NULL;
Table gold_orders_enriched avec toutes les colonnes enrichies par AI

Table Gold enrichie : sentiment, catégorie, résumé, traductions FR et ES. Prête pour Power BI via Direct Lake

Résultat

  • Une seule requête. Données brutes en entrée, intelligence structurée en sortie.
  • Table Gold prête pour Power BI via Direct Lake : zéro copie, performance maximale.
  • Sentiment, catégorie, résumé et traductions dans 5 nouvelles colonnes matérialisées.

09. Performance et limitations

Aspect Détail
Vitesse 20 à 100 lignes par seconde (appels API AI sous le capot)
Limite texte 15 KB maximum par appel. Au-delà, retourne NULL
Gestion NULL Toujours utiliser ISNULL(ai_function(text), original_value)
Responsible AI Le contenu inapproprié est filtré par Azure et retourne NULL
Régions Disponible dans les régions supportant Azure OpenAI Service
Prérequis Activation au niveau workspace + capacité F2 minimum
Conseil performance

Pour les grands volumes, matérialisez les résultats dans des tables de staging plutôt que d'exécuter les fonctions AI dans chaque SELECT. Le pattern CREATE TABLE ... AS SELECT est votre meilleur allié.

10. Pourquoi ça change la donne pour les Data Engineers

Avant les AI Functions, traiter du texte non structuré dans un Data Warehouse nécessitait :

  1. Exporter les données vers un notebook Python
  2. Configurer un endpoint Azure OpenAI
  3. Écrire du code de transformation avec des appels API
  4. Gérer les rate limits, retries et erreurs
  5. Recharger les résultats dans le warehouse

Maintenant, c'est une seule instruction T-SQL. N'importe quel développeur SQL peut le faire.

Il ne s'agit pas de remplacer les Data Scientists, mais de donner aux Data Engineers les outils pour gérer 80 % des cas d'usage de traitement de texte sans quitter leur zone de confort.

Conclusion

Les AI Functions dans Fabric Data Warehouse comblent le fossé entre l'analytique structurée et le texte non structuré. Les fonctions sont encore en preview, mais la valeur est claire : le texte non structuré n'est plus une boîte noire dans votre warehouse.

Avec sept fonctions couvrant le sentiment, la classification, l'extraction, le résumé, la traduction, la correction grammaticale et la génération de réponses, le tout en pur T-SQL, Microsoft démocratise l'accès à l'IA pour chaque professionnel de la donnée.

Vous avez testé les AI Functions dans Fabric ? Partagez vos cas d'usage en commentaire sur LinkedIn !

Sources & Références