Translytical taks flows: Révolution ou usine à gaz
Microsoft vient de lâcher (encore) une nouvelle solution au sein de notre environnement préféré, mais avant de commencer : un Tranlytical task flow, kesako ?
Voici la définition officielle de Microsoft :
Avec les flux de tâches translyticaux, vous pouvez automatiser les actions de l’utilisateur final, telles que la mise à jour des enregistrements, l’ajout d’annotations ou la création de flux de travail qui déclenchent des actions dans d’autres systèmes.
Ajouter des données : ajoutez un enregistrement de données à une table de votre base de données et voyez-le se refléter dans votre rapport. Par exemple, l’ajout d’un nouvel enregistrement client.
Modifier les données : modifiez un enregistrement existant dans une table de votre base de données et voyez-le se répercuter dans votre rapport. Par exemple, la mise à jour d’un champ d’état ou d’une annotation.
Supprimer des données : supprimez un enregistrement existant d'une table de votre base de données et voyez-le supprimé de votre rapport. Par exemple, la suppression d’un enregistrement client qui n’est plus nécessaire.
Et c'est donc ici que l'on arrive à la partie « usine à gaz ». Cela signifie que Power BI pourrait devenir une sorte d'ERP où les utilisateurs pourraient directement modifier leurs données dans le rapport. (Brrrrr... rien que d'y penser, j'en ai déjà des frissons !)
Mais comment cela marche ?
J'aurais pu me contenter de suivre le tutoriel officiel de Microsoft disponible sous le lien suivant :
https://learn.microsoft.com/fr-fr/power-bi/create-reports/translytical-task-flow-tutorial
Mais que nenni ! Nous allons utiliser notre magnifique dataset relatif aux bières et voir comment nous allons pouvoir le modifier.
Avant de commencer, il faut activer la fonctionnalité "User Data Functions" dans Fabric, ce qui nécessite un accès administrateur.
Donc, deux solutions :
Soit vous êtes administrateur.
Soit vous êtes copain avec votre administrateur (par exemple, en lui offrant une bière ;-)).
Donc, la première étape est de créer une user data function.
Une "user data function" (UDF) dans Microsoft Fabric est une fonction personnalisée que vous créez pour effectuer des opérations spécifiques sur vos données. Elle vous permet de réutiliser des logiques complexes et de simplifier vos requêtes en encapsulant des calculs ou des transformations.
Vous n'avez rien compris à la définition ? Ça tombe bien, moi non plus...
Pour simplifier, une user data function va vous permettre d'écrire un code (une fonction) qui peut être appelée à divers endroits, comme depuis un rapport Power BI (par exemple, pour ajouter ou mettre à jour des données dans une base de données SQL ou un fichier CSV).
Note technique : Actuellement, le point de terminaison (endpoint) du Lakehouse ne prend pas en charge toutes les fonctionnalités d'une base de données SQL. J'ai donc déplacé notre magnifique dataset dans une base de données SQL.
Voici donc le code que nous allons utiliser dans notre UDF.
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.connection(argName="sqlDB",alias="adwSQL")
@udf.function()
# Take a product description and product model ID as input parameters and write them back to the SQL database
# Users will provide these parameters in the PowerBI report
def update_one_to_sql_db(sqlDB: fn.FabricSqlConnection, BeerDescription: str, BeerId:str) -> str:
# Error handling to ensure product description doesn't go above 200 characters
if(len(BeerDescription) > 200):
raise fn.UserThrownError("Beer Descriptions have a 200 character limit. Please shorten your description.", {"Description:": BeerDescription})
# Establish a connection to the SQL database
connection = sqlDB.connect()
cursor = connection.cursor()
# update data into the beer_data table
update_description_query = "UPDATE [dbo].[beer_data] SET [beer_description] = ? WHERE [beer_id] = ?"
cursor.execute(update_description_query, BeerDescription, BeerId)
# Commit the transaction
connection.commit()
cursor.close()
connection.close()
return "Beer description was updated"
Une fois que tout est prêt dans notre code, on le publie puis on peut le tester
Donc dans mon interface de test, je passe deux parametres (l'ID d'une biere, et la description que je souhaite ajouter)
Et voila, ma fonction a bien modifié la description de notre biere Fox Tail avec le texte: Unicorns are great but expensive
Et voila, je sais sur que tu risques de me dire cher lecteure, ouais, t'as juste écris une query SQL dans du pyspark, je fais ça dans Jupyter depuis des années...
Mais non, je ne te prends pas pour un jambon, nous sommes actuellement à la premiere phase: Créer la fonction
Maintenant, nous allons créer un "rapport Power BI", pour vous montrer ce qu'on va pouvoir faire avec cette fonction
Avant de pouvoir créer le rapport, il faut IMPERATIVEMENT activer deux features en preview dans Power BI Desktop
Translytical Task Flow
Text Slicer Visual
Voici donc mon chef d'oeuvre
Donc, ce rapport se compose de 3 éléments distincts:
Un Text Slicer (Enter a description for the beer of your choice)
Un tableau
Un boutton (c'est ici que le plus gros de la logique se passe)
Voici les settings de mon bouton action ainsi que quelques customisations qui ont été faites, mais le plus important reste les settings suivant, si j'entre une description mais qu'aucune biere n'est selectionnée dans mon tableau, il prendra par defaut l'ID le dernier ID par ordre alphabétique
Passons donc à la démo, je pense que nous allons revoir cette horrible définition de la biere de ma région: l'orval
Je souhaiterais rempalcer la description par cette description: (non, je ne suis pas fou, c'est mon ami copilot qui me l'a rédigé ;-) )
Chère Orval, avec ta robe ambrée et ton col de dentelle, tu promets une complexité que seule ta nature sauvage et évolutive sait offrir. Chaque gorgée est un dialogue unique, une amertume franche qui s'adoucit en une fidélité fruitée, faisant de toi bien plus qu'une bière, un véritable amour de trappiste.
Malheureusement, ma description dépassant 200 caracteres, j'ai eu droit à une petite erreur ( limitation écrite dans ma fonction, donc la fonction prend en compte ce morceau de code)
J'ai donc revu ma copie pour quelque chose de moins pédant, dont voici la description
À toi, Orval, trésor ambré au goût si unique. Chaque bulle raconte ta légende, chaque gorgée est une promesse d'éternité. Mon Val d'Or, ma divine gorgée. (Pour clore tout débat futile, on dit UN orval et non UNE orval (vous apprendrez au fur et à mesure que j'ai TOUJOURS raison))
La nouvelle fonctionnalité permettant d'écrire dans les sources de données directement depuis Power BI le positionne comme un véritable hub opérationnel. Si le potentiel est immense, sa mise en œuvre pratique appelle à la prudence.
Avantages :
Centralisation : Power BI n'est plus seulement un outil de visualisation, mais aussi d'action.
Efficacité : Les utilisateurs peuvent corriger ou enrichir les données sans quitter leur rapport.
Points de vigilance :
Licence : L'accès à cette fonctionnalité est conditionné par une licence Microsoft Fabric.
Gouvernance : Une stratégie de gouvernance des données mature est indispensable pour contrôler qui peut écrire, où et comment.
Risque de divergence des données : C'est le défi principal. L'écriture ne modifie que la destination (base de données, warehouse), pas la source d'origine (ex: fichiers plats). À terme, cela peut créer un décalage dangereux entre les données de référence et celles des rapports.
Il s'agit donc d'une évolution puissante mais exigeante. Son adoption à grande échelle semble pour l'instant peu probable, la réservant aux organisations les plus matures sur le plan de la data.