Power BI : La nouvelle façon de créer des fonctions

Publié le 05 janvier 2017
par Sophie Marchand M.Sc.
invoke-function-power-bi

Depuis quelques temps, Power BI propose une nouvelle façon de travailler avec les fonctions et les paramètres, plus simple que celle proposée jadis. Cet article vise à vous expliquer en quoi consiste ces nouveautés à partir d’un exemple concret de création de fonctions dans Power Query.

 

Articles antérieurs en lien avec le présent article

Nous avons déjà publié plusieurs articles par le passé qui porte sur l’élaboration de requêtes de transformations dans Power BI (ou l’équivalent dans Power Query), la création de fonctions et la création de paramètres. Voici quelques-uns de ces articles, que vous voudrez peut-être relire.

 

Requêtes de transformations dans Power BI:

Power Query: C’est plus que du bonbon! (Démo 1)

Power Query: C’est plus que du bonbon! (Démo 2)

Power Query: Trouver le nombre de jours ouvrables

 

Création de transformations et de fonctions dans Power BI:

Power Query : Combiner plusieurs fichiers Excel

Power Query: Importer les données météo du site climate.weather.gc.ca

 

Création de paramètres dans Power BI:

Power Query : Faire pointer vos requêtes vers une nouvelle source de données

Passer des paramètres dans Power Query à l’aide d’un slicer (segment)

 

Le problème avec l’ancienne façon de créer des fonctions dans Power Query

Avec l’ancienne façon de procéder, il n’était pas possible de voir toutes les étapes de transformation d’une fonction, dans le menu d’édition de requêtes. Pour les voir, il fallait aller dans le code et remplacer les paramètres par de vraies valeurs et retirer les éléments du code qui convertissait la requête en fonction. C’était, avouons-le, utile mais désagréable. À présent, il est possible d’accéder à une requête “exemple” sous-jacente à la fonction et de modifier la fonction à partir de cette requête, tel qu’illustré dans cet article.

 

Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI.

Formations Power BI disponibles en anglais

 

Créer une requête sur un seul fichier

Dans notre exemple, nous allons importer une table d’un fichier Excel. Dans les faits, cette table n’a pas besoin de transformations, le but de cet article n’étant pas de démontrer comment effectuer des transformations. Ce faisant, nous avons effectué une transformation mineure, simplement pour illustrer la procédure. Cette transformation consiste simplement à ajouter une colonne de données qui dit “Faire des transformations”. Il faut comprendre ici, que vous pourriez effectivement faire de plus sérieuses transformations (vous référez aux liens fournis en début d’article). Voici néanmoins notre requête de départ, qui est issue d’un fichier Excel.
power-bi-colonne-ajoutee
En cliquant avec le bouton droit de votre souris sur votre requête, vous apercevrez l’option Create Function (Créer une fonction).
créer une fonction dans Power Query
Si vous cliquez sur cette options, on vous indiquera qu’aucun paramètre n’a été trouvé pour votre fonction.
parmètres de fonction dans Power Query

 

Créer les paramètres requis par la fonction dans Power Query

Si votre fonction requière effectivement des paramètres, vous devrez reculer d’un pas et d’abord créer ce ou ces nouveaux paramètres. Vous pouvez atteindre la section des paramètres via le menu Home (Accueil).
paramètres de fonction dans Power Query

 

Dans notre exemple, nous allons créer le paramètre Sales_SourceFile qui servira à identifier le répertoire d’un fichier.
paramètres de fonction dans Power Query

 

Modifier le code de la requête originale

Vous devez ensuite vous assurer que votre requête originale intègre ce ou ces nouveaux paramètres. Pour ce faire, vous allez donc vous rendre dans l’éditeur de code avancé (Advanced Editor). Dans mon exemple, je vais simplement remplacer le répertoire de mon fichier par le nom de mon nouveau paramètre, soit Sales_SourceFile.
modification-de-code-requete-dorigine-power-bi

 

Créer la nouvelle fonction dans Power Query

Maintenant, vous pouvez créer votre fonction, toujours en cliquant sur votre requête originale, avec le bouton droit de votre souris.
créer une fonction dans Power Query

 

Vous pourrez ensuite nommer votre fonction. Pour mon exemple, j’ai choisi le nom fnGetSalesFiles.
nommer une fonction dans Power Query

 

Tester la nouvelle fonction dans Power Query

Vous pouvez maintenant tester votre nouvelle fonction.
Dans mon exemple, j’ai créé une nouvelle requête, en important toujours un fichier Excel de ventes, mais en choisissant celui de février plutôt que celui de janvier 2013. Ensuite, j’ai ajouté une colonne pour “invoquer la fonction”.

 

invoke-function-power-bi

 

J’ai donc inséré les informations demandées ici. Malheureusement, comme mon fichier ne contenait pas le répertoire au long, j’ai dû l’inscrire manuellement dans cette boîte de dialogue.

 

invoquer une fonction dans Power Query

 

Par la suite, j’ai obtenu ma nouvelle colonne.
fngetsalesfiles-power-bi
Et j’ai pu extraire la colonne “Faire des transformations”, tel qu’illustré ci-dessous.
fonction-explosee-power-bi

 

Modifier la requête d’origine et non la fonction de Power Query

Par la suite, vous pouvez toujours modifier votre fonction d’origine. Par contre, vous ne devez pas le faire en cliquant sur votre fonction, puisque vous obtiendrez le message suivant:

 

modifier une fonction dans Power Query

 

Si vous souhaitez modifier votre fonction, vous devez le faire via votre requête originale, i.e. celle que Power BI a renommé “… Example”, dans mon cas “Table 1 Example”. J’ai fait le test en ajoutant à cette requête une nouvelle colonne, tel qu’illustré ci-dessous.
modifier-requete-originale-power-bi

 

Je suis retournée dans ma nouvelle requête et j’ai pu choisir d’ajouter cette nouvelle colonne à ma requête.
modifier-requete-power-bi

 

Jusqu’ici, le processus a été très simple (c’était voulu) mais l’exemple choisi demeure très limitatif. Qu’en est-il si je ne veux pas simplement ajouter des colonnes additionnelles mais si je veux effectuer d’autres types de transformations? J’ai répondu à cette question, dans la prochaine section.

Pousser plus loin les modifications de la fonction de Power Query

Dans l’exemple ci-dessous, j’ai effectué un filtre sur la colonne StoreID pour exclure le magasin 103.
decocher-magasin-103-de-requete-originale

 

Par la suite, j’ai importé tous les fichiers de ventes de mon dossier Sales (de 2013-01-01 à 2013-12-31), en utilisant l’option d’importation “From Folder” (À partir d’un dossier). J’ai ensuite éliminé toutes les colonnes sauf celles contenant le répertoire du dossier et le nom du fichier, tel qu’illustré ci-dessous.
power-bi-from-folder-sales

 

Ensuite, j’ai fusionné ces deux colonnes et j’ai ajouté une nouvelle colonne pour invoquer ma fonction fnGetSalesFiles.
invoke-custom-function-power-bi

 

J’ai nommé cette nouvelle colonne fnGetSalesFiles, j’ai utilisé la fonction fnGetSalesFiles et je l’ai fait pointer sur la colonne Custom, qui contient le nom complet du répertoire.

 

invoke-custom-function

 

J’ai ainsi obtenu les données de tous les fichiers du répertoire, en plus des deux colonnes ajoutées par ma fonction.

 

resultat-power-bi

 

De plus, j’ai pu constaté que le filtre avait été appliqué sur le magasin 103. En effet, il n’apparaît pas dans la liste des numéros de magasins.

 

impact-sur-autre-requete

 

Comprendre les avantages de cette nouvelle façon de faire

Vous l’aurez sans doute remarqué, avec cette nouvelle façon de faire, Power BI décortique votre fonction en 3 composantes (voir le dossier fnGetSalesFiles dans le panneau de requêtes à gauche, dans l’image ci-dessous).

 

D’abord, vous retrouvez la fonction en tant que telle, représentée par le symbole fx. Si vous cliquez sur votre fonction, vous êtes incapable de voir les étapes de transformation. En effet, dans le panneau de droite, vous ne voyez qu’une seule étape qui pointe vers la source. Ici, tout ce que vous pouvez faire, c’est insérer le répertoire d’un fichier et de voir l’impact de la fonction sur ce fichier.

 

fngetsalesfiles
Ensuite, vous retrouvez la valeur actuelle du paramètre utilisé dans votre fonction. Vous avez aussi la possibilité de modifier votre paramètre.

 

current-value

 

Finalement, vous avez la requête sous-jacente à votre fonction. Celle qui vous a effectivement permis de créer votre fonction. Ici, non seulement vous voyez toutes les étapes de transformation, dans le panneau de droite, et leur impact, dans le panneau central, mais vous pouvez aussi les modifier, en ajouter et en éliminer, au besoin.

 

example

 


CFO-Masque_Formations-en-ligne_FBLa mission du CFO masqué est de développer les compétences techniques des analystes et des contrôleurs de gestion en informatique décisionnelle avec Excel et Power BI et favoriser l’atteinte de leur plein potentiel, en stimulant leur autonomie, leur curiosité, leur raisonnement logique, leur esprit critique et leur créativité.

9 réflexions sur “Power BI : La nouvelle façon de créer des fonctions”

  1. Bonjour,

    j’ai un souci quand j’utilise la méthode en chargeant un fichier Excel contenant plusieurs feuilles depuis SharePoint. Par défaut PBI crée une fonction, dans laquelle je n’arrive pas à comprendre où positionner le paramètre contenant le nom des feuilles pour les combiner.
    J’ai essayé de dupliquer le paramètre Sample file pour en extraire la liste des feuilles et la transformer en liste que je déclare ensuite dans le paramètre “Feuille” que j’ai créé. Mais ça me crée ensuite une erreur au niveau de la requête combinée.
    Merci de vos lumières,
    Mélanie

    1. Bonjour Mélanie,

      Je ne suis pas certaine de bien comprendre. Vous tentez de combiner plusieurs feuilles d’un fichier Excel et vous souhaitez sélectionner les feuilles à combiner? Est-ce bien ça?

      Sophie

      1. Je tente de combiner plusieurs fichiers qui contiennent eux-même plusieurs feuilles ayant la même structure, le tout hébergé sur SharePoint.
        J’ai un fichier par année, avec une feuille par mois dans chaque fichier. Et je voudrais charger l’historique des données sur toutes les années et les mois qui sont dans mon dossier.
        Merci.

  2. En fait le problème pourrait se résumer au fait que je n’arrive pas à créer de table avec l’adresse du site SharePoint+Nom des fichiers et les noms des feuilles des fichiers. À partir de cette table je devrais pouvoir invoquer la fonction générée automatiquement par PBI.
    Mais dès que je développe le Binary qui contient les informations des feuilles, je perds la colonne que j’ai créée avec l’adresse+nom du fichier à l’étape précédente.
    Ou alors j’ai complètement loupé un truc :s

  3. Bonjour,

    Dans l’exemple donné, quel est l’intérêt de passer par une fonction pour appliquer les transformations sur l’ensemble des fichiers du dossier plutôt que d’appliquer une fois les transformations aprés avoir fait la fusion de tous les fichiers du dossier?

    Merci

    1. Bonjour,

      Il y a plusieurs avantages mais pour moi, l’avantage principal, c’est pour déboguer les requêtes.

      En effet, en créant une fonction et en l’applicant ensuite à un ensemble de fichiers, on pourra voir si la fonction retourne la table espérée pour chacune des sources de données individuellement. Et si par exemple, une ou quelques sources retournaient une erreur, on pourrait aisément faire l’étude de ces sources de données et probablement identifier les problématiques dans les sources de données elles-mêmes.

      Au plaisir,

      Sophie

  4. Bonjour,
    Je ne sais pas si ce que je veux faire est possible.
    J’ai un tableau avec plusieurs villes et des factures associées.
    Je cherche à faire une extraction ( donc une requete filtrée ) par ville mais qui génère automatiquement à partir de la liste de toutes les villes une requete par ville ( une table pour paris, une pour nantes, etc ).
    Je sais faire ça en VBA mais sur power query je cale.
    A votre avis, serait-ce possible via une fonction personnalisée ?
    D’avance merci 🙂

Laisser un commentaire

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

Retour en haut