Qu’est-ce que c’est ?
Grande question. Eh bien, ce n’est pas moins que l’élément le plus important à comprendre, dans le but de maîtriser le logiciel de requêtes de Microsoft. C’est aussi une source de maux de crânes quand il s’agit de nettoyer ou retravailler des données sur Power Query.
Pour résumer ce que c’est, les types de données, bien qu’ils semblent modifier l’affichage (et ils le font), modifient aussi les calculs et manipulations qui peuvent être pris en charge par les données.
Même si on a tendance à les confondre avec les formats de nombres d’Excel, ces types de données sont infiniment plus importants, et pour cause : sans le bon type de données, impossible d’effectuer les calculs escomptés sur la donnée, ou d’accéder à certains menus de traitement de la donnée ! Sur Excel, un format de nombre est juste un mode d’affichage, qui ne change, en réalité, rien à la valeur.
Comment ça se traduit dans la réalité ?
Dans cet article, explorons, à travers 5 exemples concrets à difficulté croissante, ce que nous entendons par « les calculs et manipulations qui peuvent être pris en charge par certains types et pas d’autres ».
C’est comme dans la vraie vie !
L’exemple le plus simple est le suivant : calculez ceci : a+b. La réponse est que c’est impossible, puisque l’on ne connaît ni a ni b en tant que nombre, donc, en l’état, c’est du texte. Power Query ne déroge pas à cette règle et ne peut donc pas afficher de résultat à ce calcul.
Maintenant, disons que : a est « 5 » et b est « 7 ». Donc a+b=12 ? Non plus, parce que même des caractères numériques, s’ils ne sont pas reconnus comme des nombres, sont logés à la même enseigne que a et b, impossible de calculer quoi que ce soit avec tant qu’ils ne sont pas convertis.
Donc pour pouvoir exploiter a et b, il faut qu’il leur soit attribué clairement des valeurs numériques !
Est-ce valable uniquement pour les textes ? Parce que sur Excel, le texte n’est pas un format de nombres…
En réalité, sur Power Query, c’est valable pour tous les types de données, pas uniquement pour les textes comme sur Excel. Voici le second exemple : le type date. Quand on sélectionne une colonne marquée comme Date, on voit tout de suite, dans les menus Transformer et Ajouter une colonne, que plusieurs sous-menus sont grisés, notamment les catégories nombres, heure et durée.
La seconde implication, c’est que si nous essayons d’utiliser ces dates dans des formules, notamment pour créer une colonne personnalisée dans une formule qui n’est pas faite pour gérer les dates (exemple : le deuxième argument du dernier exemple que nous abordons dans cet article), sans prévoir de conversion de type de données, nous obtiendrons une colonne d’erreurs, y compris avec une syntaxe cohérente.
Bien entendu, le type date est un très bon exemple pour illustrer simplement l’importance des types de données, mais en réalité, c’est valable pour absolument tous les types de données !
Savoir changer de type de données au bon moment en devient donc une des compétences les plus importantes pour manipuler les données sur Power Query.
Quelques exemples (à peine) plus complexes
Calculer un âge à partir d’une date de naissance (version sans m)
Un exemple très représentatif est le calcul d’un âge à partir d’une date de naissance, et pour cause, nous partons d’une date, pour finir sur un nombre entier, en passant par une durée, et un nombre décimal. Nous sommes donc obligés d’opérer 3 conversions de type de donnée, sans quoi, ça ne marche pas !
Commençons : la première étape, est de passer d’une date de naissance à une durée, en utilisant l’outil âge du menu date. Le type de données change donc et nous passons du type date au type durée, ce qui nous donne l’accès au menu durée. (Voir colonne Age)
On comprend donc que les fonctionnalités utilisables dépendent du type de données (encore une fois). Maintenant, nous procédons à notre seconde transformation en choisissant Total années et maintenant dans ce menu-là, et nous remarquons que cette transformation donne encore un autre type de données : des nombres décimaux. (Voir colonne Total années)
Enfin, après avoir arrondi les âges à l’unité inférieure, le type de données change de nouveau, pour devenir des nombres entiers. (Voir colonne arrondi à l’entier inférieur)
Nous avons donc jonglé entre 4 types de données différents en effectuant uniquement des opérations simples.
Standardiser des matricules
Dans cet exemple, nous disposons d’une colonne, appelée matricule, avec des nombres qui ont entre 3 et 4 chiffres. Gardons en tête que ce sont des nombres entiers d’un point de vue Power Query.
L’objectif de cet exemple est de standardiser ces matricules sur 6 caractères, dont le premier est la lettre M, puis autant de 0 qu’il faut en plus pour obtenir 5 chiffres précédés d’un M, donc du texte.
Regardons ce que nous propose la colonne à partir quand on essaye de générer la formule en proposant des exemples à Power Query.
Voici la formule que Power Query nous propose :
On remarque directement quelque chose dans la formule qu’il nous propose : il y a une fonction Text.From. Est-elle si importante ? Peut-on la retirer ?
La réponse est non, dans la mesure où nos numéros d’employés étaient des nombres entiers, et que Text.PadStart (et c’est le cas de l’écrasante majorité des fonctions qui commencent par Text) ne peut transformer que du texte.
Donc, on ne peut pas faire de calculs sur du texte, mais on ne peut pas non plus faire de manipulations de texte sur des nombres.
Lister des dates entre un début et une fin
Nous revenons dans le thème des dates, et nous regardons les changements de différents types de données nécessaires pour générer une liste de dates, qui correspond à toutes les dates entre le début et la fin de mission.
Encore une fois, nous allons ajouter une colonne personnalisée pour utiliser la fonction List.Dates, qui va nous permettre de générer les listes de dates que nous attendons.
List.Dates demande 3 arguments de type différent : une date de début, un nombre de dates et la durée entre chaque date. Donc, une date, un nombre et une durée, ce qui fait 3 types qu’il faudra combiner en 3 arguments.
Pour la date de début, pas de souci, en général nous disposons toujours d’une date de début quand on cherche à détailler des dates entre un début et une fin. C’est à partir du second argument où ça se corse.
En cause : sur Power Query, une soustraction de dates donne une durée. Or, nous avons besoin d’un nombre ici, donc, il va falloir utiliser une fonction Number.From pour convertir cette durée en nombre.
Le 3ème argument, lui, demande une durée. Donc mettre 1 directement dans la formule ne fonctionnera pas non plus (et ce, même si sur Excel 1 = 1 jour). Il faudra mettre un Duration.From ou encore un #duration.
Sans ces conversions, Power Query, bien qu’il ne détecte pas d’erreur de syntaxe (et c’est pour cela que les types de données sont un sujet de discussion, et de migraines), générera une colonne d’erreurs.
En somme ?
Ces exemples sont loin d’être les seuls quand il s’agit de jongler avec les types de données sur Power Query. Il existe énormément de manipulations qui impliquent une conversion de type de données, qu’elle soit implicite du fait de l’outil utilisé, ou explicite dans le langage m. Arrivés à un certain niveau, il est obligatoire d’avoir conscience de ces contraintes, et de savoir les utiliser à notre avantage !