IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1)

Noter ce billet
par , 22/12/2020 à 08h00 (4644 Affichages)
Salut.

Power Query offre beaucoup de fonctions pour le traitement des données, mais il peut arriver d'avoi rbesoin de créer ses propres fonctions, soit pour alléger et découper des étapes de la solution Power Query, soit parce qu'il y a le souhait de réutiliser la fonction dans d'autres solutions.

Power Query offre deux possibilités de créer une fonction. Dans ce billet, nous allons voir la façon de créer une fonction "from scratch" grâce à l'éditeur avancé.


Fonction sans paramètre

Une fonction personnalisée Power Query revêt la forme canonique suivante:
Code Power Query : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
let
    Source = () => ...
in
    Source

Cette syntaxe minimaliste est très peu souvent employée, mais nous permet de créer notre première fonction "Hello World" (Hum, je me demande si c'est bien sérieux, ce truc ):
Code Power Query : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
let
    Source = () => "Hello World"
in
    Source

Pour pouvoir saisir ce code, il faut créer une requête vide puis ouvrir l'éditeur avancé (Accueil > Requêtes > Editeur avancé ou Affichage > Avancé > Editeur avancé). La fonction personnalisée est créée, et on peut l'utiliser dans l'interface de Power query:

Nom : 2020-12-19_074357.png
Affichages : 1854
Taille : 4,0 Ko

Nom : 2020-12-19_074410.png
Affichages : 1888
Taille : 3,1 Ko

Il est bien entendu préférable de la renommer, par exemple en getHello. On l'utilisera alors via l'appel à une fonction personnalisée lors de la création de la colonne, soit directement dans le code de la colonne personnalisée:

Nom : 2020-12-19_075100.png
Affichages : 1898
Taille : 117,1 Ko

Nom : 2020-12-19_075144.png
Affichages : 1945
Taille : 18,2 Ko

Nom : 2020-12-19_075236.png
Affichages : 1856
Taille : 2,9 Ko



Fonction avec paramètres


Bien sûr, une fonction sans paramètres, c'est rare. Nous nous souvenons tous du fameux f(x) = y de nos premiers cours de maths, rendu vite plus complexe avec un f(x, y) = z...

Les paramètres d'une fonction Power Query se placent entre les parenthèses. Imaginons une fonction qui reçoive un prénom et un nom pour les assembler en les séparant par un espace. Dans Power Query, on peut concaténer avec l'opérateur &, comme en Excel, ou utiliser la fonction Text.Combine(List, [Separator])(1). Voici la fonction getLongname qui renvoie le nom complet en assemblant les deux arguments reçus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
let
    Source = (Firstname, Lastname) => Firstname & " " & Lastname
in
    Source
Nom : 2020-12-19_170006.png
Affichages : 1897
Taille : 9,8 Ko

Nom : 2020-12-19_170043.png
Affichages : 1845
Taille : 4,5 Ko



La signature de la fonction,entourée en rouge, illustre que sans précisions supplémentaires, les arguments sont de type any, ainsi que la valeur retournée par la fonction. any est +/- l'équivalent du Variant du VBA. Il est possible de typer les paramètres comme le retour de fonction(2):
Code Power Query : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
let
    Source = (Firstname as text, Lastname as text) as text => 
    Firstname & " " & Lastname
in
    Source


Fonctions plus complexes

Rares seront les fonctions aussi simples que celles-ci et qui tiennent sur une ligne de code. De plus, ici, nous n'utilisons que les paramètres, mais une fonction Power Query pourrait utiliser des variables intermédiaires. Dans ce cas, la forme canonique vue plus haut est un peu trop légère. Nous allons devoir imbriquer notre code à l'intérieur d'un blog let...in. Imaginons que l'on doive mettre la nom en majuscules. Bien sûr, on pourrait tout faire en une ligne, mais si on souhaite développer le code, on pourra utiliser ceci:
Code Power Query : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
let
    Source = (Firstname as text, Lastname as text) as text => 
    let
        Name = Text.Upper(Lastname),
        Longname = Firstname & " " & Name
    in
        Longname
in
    Source


Voici une prise de contact avec les fonctions de Power Query.

Dans le deuxième billet sur le sujet, je montrerai comment utiliser une table de paramètres Excel au sein de Power Query grâce à une fonction personnalisée. Mais avant de nous quitter, nous pouvons observer que notre fonction n'affiche qu'une étape dans le panneau de droite. Est-ce à dire que nous devons toujours saisir le code de nos fonctions à la main et qu'il n'est pas possible d'utiliser l'interface pour les créer? Non, bien sûr...

Ce sera l'objet d'un troisième billet sur la question, et je profiterai de l'occasion pour vous parler de la création d'une table de dates avec Power Query.




(1) La fonction serait alors la suivante:
Code Power Query : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
let
    Source = (Firstname as text, Lastname as text) as text => 
    Text.Combine({Firstname, Lastname}," ")
in
    Source

(2) Power Query n'opère pas le transtypage implicite. Si votre code manipule du texte, vous devez vous assurer qu'il reçoit bien du texte.

Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Viadeo Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Twitter Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Google Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Facebook Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Digg Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Delicious Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog MySpace Envoyer le billet « Power Query: Fonctions personnalisées: Créer une fonction personnalisée (1) » dans le blog Yahoo

Commentaires