Partager via


TripPin, partie 1 - Connecteur de données pour un service OData

Ce tutoriel en plusieurs parties traite de la création d’une extension de source de données pour Power Query. Le tutoriel est destiné à être utilisé de manière séquentielle : chaque leçon s’appuie sur le connecteur créé dans les leçons précédentes, ajoutant de nouvelles fonctionnalités de manière incrémentielle.

Dans cette leçon, vous allez :

  • Créer un projet Data Connector en utilisant le Kit de développement logiciel (SDK) Power Query
  • Créer une fonction de base pour extraire des données d’une source
  • Tester votre connecteur dans le Kit de développement logiciel (SDK) Power Query
  • Inscrire votre connecteur dans Power BI Desktop

Créer un connecteur OData de base

Dans cette section, vous allez créer un projet de connecteur de données, fournir des informations de base et le tester dans le Kit de développement logiciel (SDK) Power Query.

Ouvrez Visual Studio Code. Nous vous recommandons de créer un espace de travail, puis de créer un projet d’extension. Pour créer le projet d’extension, ouvrez l’Explorateur et, dans la section du Kit de développement logiciel (SDK) Power Query, sélectionnez le bouton Créer un projet d’extension.

Capture d’écran mettant l’accent sur l’option permettant de créer un projet d’extension du Kit de développement logiciel (SDK) Power Query.

Après avoir sélectionné ce bouton, vous êtes invité à saisir le nom du nouveau projet. Nommez ce nouveau projet TripPin.

Capture d’écran du nouveau projet d’extension créé appelé TripPin utilisant le Kit de développement logiciel (SDK) Power Query.

Ouvrez le fichier TripPin.pq et collez dans celui-ci la définition de connecteur suivante.

section TripPin;

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

TripPinImpl = (url as text) =>
    let
        source = OData.Feed(url)
    in
        source;

// Data Source Kind description
TripPin = [
    Authentication = [
        Anonymous = []
    ],
    Label = "TripPin Part 1 - OData"
];

// Data Source UI publishing description
TripPin.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = { "TripPin OData", "TripPin OData" }
];

Cette définition de connecteur contient :

  • Un enregistrement de définition de source de données pour le connecteur TripPin
  • Une déclaration indiquant que le seul type d’authentification pour cette source est implicite (anonyme)
  • Une fonction (TripPinImpl) avec une implémentation qui appelle OData.Feed
  • Une fonction partagée (TripPin.Feed) qui définit le type de paramètre sur Uri.Type
  • Un enregistrement de publication de source de données qui permet au connecteur de figurer dans la boîte de dialogue Obtenir des données de Power Query

Ouvrez le fichier TripPin.query.pq. Remplacez le contenu actuel par un appel à votre fonction exportée.

TripPin.Feed("https://services.odata.org/v4/TripPinService/")

Avant de pouvoir tester votre connecteur, vous devez le générer. Pour ce faire, accédez au Terminal et sélectionnez l’option Exécuter la tâche de génération... (Raccourci clavier Ctrl + Maj + B). Nous vous recommandons de choisir l’option MakePQX, mais l’une ou l’autre option disponible pour la génération doit fonctionner.

Capture d’écran illustrant l’exécution d’une tâche de génération avant de tester le connecteur.

Le résultat de cette opération crée un dossier Bin dans lequel votre connecteur généré est stocké en tant que TripPin.mez.

Capture d’écran du nouveau dossier Bin créé où se trouve le fichier connecteur avec une extension mez et un nom TripPin.mez.

Le fichier <projet>.query.pq permet de tester votre extension sans avoir à la déployer dans le dossier bin de Power BI Desktop. Utilisation des outils disponibles dans le Kit de développement logiciel (SDK) Power Query :

  1. Sélectionnez l’option Définir les identifiants.
  2. Sélectionnez TripPin comme source de données.
  3. Sélectionnez le fichier TripPin.query.pq comme fichier de requête/test.
  4. Sélectionnez Anonyme comme type d’authentification.

Dans la boîte de dialogue de sortie, un message s’affiche qui confirme que vous avez défini des identifiants pour la source de données et les détails de chaque identifiant créé.

Capture d’écran de la boîte de dialogue de sortie affichant les détails de l’authentification nouvellement créée pour le connecteur TripPin à l’aide de l’URL passée dans le fichier .query.pq.

Remarque

Vous pouvez toujours effacer les identifiants à l’aide de la commande Effacer tous les identifiants ou vérifier les identifiants disponibles à l’aide de la commande Répertorier les identifiants dans les outils du Kit de développement logiciel (SDK) Power Query.

Une fois les identifiants en place, vous sélectionnez le fichier TripPin.query.pq et, dans le document, vous effectuez soit un clic droit pour Évaluer le fichier Power Query actuel, soit vous utilisez l’option Évaluer le fichier actuel à partir des outils du Kit de développement logiciel (SDK) de Power Query.

Capture d’écran de plusieurs alternatives pour évaluer le fichier Power Query actuel.

La boîte de dialogue de sortie affiche un message des résultats de votre évaluation ainsi qu’une nouvelle fenêtre avec le nom Résultat PQTest.

Capture d’écran de la fenêtre du résultat PQTest affichant les résultats de l’évaluation exécutée.

La fenêtre de résultat PQTest se compose de trois onglets :

  • Sortie : affiche un aperçu de vos données dans une grille.
  • Résumé : détails généraux de l’évaluation, tels que StartTime, EndTime, Duration, le fichier utilisé pour l’évaluation, l’état et bien plus encore.
  • DataSource : fournit des informations sur la source de données utilisée à partir du type, du nom de la fonction et du chemin d’accès.

Vous pouvez essayer différentes URL OData dans le fichier de test pour voir comment différents résultats sont retournés. Par exemple :

  • https://services.odata.org/v4/TripPinService/Me
  • https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
  • https://services.odata.org/v4/TripPinService/People

Le fichier TripPin.query.pq peut contenir des instructions uniques, des instructions let ou des documents de section complets.

let
    Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
    People = Source{[Name="People"]}[Data],
    SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
    SelectColumns

Important

Veillez à toujours enregistrer vos fichiers au fur et à mesure que vous travaillez. Si vous apportez des modifications à votre fichier TripPin.pq, vous devez toujours déclencher une tâche de génération en suivant, pour vous assurer que vous effectuez des tests sur la dernière version de votre connecteur.

Ouvrez Fiddler pour capturer le trafic HTTP et exécutez la requête. Vous devriez voir différentes requêtes adressées à services.odata.org, générées par le processus de conteneur mashup. Vous pouvez voir que l’accès à l’URL racine du service entraîne un état 302 et une redirection vers la version plus longue de l’URL. Les redirections suivantes sont un autre comportement fourni « gratuitement » par les fonctions de la bibliothèque de base.

Si vous examinez les URL, notez que vous pouvez voir le Query Folding qui a eu lieu avec l’instruction SelectColumns. https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

Si vous ajoutez d’autres transformations à votre requête, vous pouvez voir leur impact sur l’URL générée.

Ce comportement est important à noter. Même si vous n’avez pas implémenté de logique de pliage explicite, votre connecteur hérite ces capacités de la fonction OData.Feed. Les instructions M sont composables : les contextes de filtre passent d’une fonction à une autre dès que cela est possible. Ce concept est similaire à la façon dont les fonctions de source de données utilisées dans votre connecteur héritent de leur contexte d’authentification et de leurs informations d’identification. Dans les leçons suivantes, vous remplacerez l’utilisation d’OData.Feed, qui a des fonctionnalités de pliage natives, par Web.Contents, qui n’en a pas. Pour obtenir le même niveau de fonctionnalités, vous devez utiliser l’interface Table.View et implémenter votre propre logique de pliage explicite.

Charger votre extension dans Power BI Desktop

Pour utiliser votre extension dans Power BI Desktop, vous devez copier le fichier de sortie de votre projet de connecteur (TripPin.mez) dans votre répertoire Custom Connectors.

  1. Créez un répertoire [Mes documents]\Power BI Desktop\Connecteurs personnalisés.
  2. Copiez le fichier d’extension (TripPin.mez) dans ce répertoire.
  3. Cochez l’option (Non recommandé) Autoriser le chargement de toutes les extensions sans validation ni avertissement dans Power BI Desktop (sous Fichier>Options et paramètres>Options>Sécurité>Extensions de données).
  4. Redémarrez Power BI Desktop.
  5. Sélectionnez Obtenir des données > Plus pour afficher la boîte de dialogue Obtenir des données.

Vous pouvez localiser votre extension en tapant son nom dans la zone de recherche.

Boîte de dialogue Obtenir des données.

Sélectionnez le nom de la fonction, puis Se connecter. Un message tiers s’affiche. Sélectionnez Continuer. La boîte de dialogue d’appel de fonction s’affiche à présent. Entrez l’URL racine du service (https://services.odata.org/v4/TripPinService/), puis sélectionnez OK.

Appeler la fonction.

Comme c’est la première fois que vous accédez à cette source de données, vous recevez une invite relative aux identifiants. Vérifiez que l’URL la plus courte est sélectionnée, puis sélectionnez Se connecter.

Image montrant l’invite d’informations d’identification définie sur Anonyme et le paramètre de niveau défini sur l’URL la plus courte.

Notez qu’au lieu d’obtenir une table de données simple, le navigateur s’affiche. En effet, la fonction OData.Feed retourne une table avec, en plus, des métadonnées spéciales que l’expérience Power Query sait afficher sous forme de table de navigation. Cette procédure pas à pas explique comment créer et personnaliser votre propre table de navigation dans une prochaine leçon.

Table de navigation.

Sélectionnez la table Me, puis Transformer les données. Notez que les colonnes ont déjà des types affectés (enfin, la plupart d’entre elles). Il s’agit d’une autre fonctionnalité de la fonction OData.Feed sous-jacente. Si vous regardez les demandes dans Fiddler, vous verrez que vous avez récupéré le document $metadata du service. L’implémentation OData du moteur le fait automatiquement pour déterminer le schéma, les types de données et les relations du service.

Enregistrement Me.

Conclusion

Cette leçon vous a guidé tout au long de la création d’un connecteur simple basé sur la fonction de bibliothèque OData.Feed. Comme vous l’avez vu, la mise en place d’un connecteur entièrement fonctionnel sur la fonction de base OData nécessite peu de logique. D’autres fonctions avec extensibilité, telles que ODBC.DataSource, offrent des fonctionnalités similaires.

Dans la leçon suivante, vous remplacerez OData.Feed par une fonction moins performante :Web.Contents. Chaque leçon implémente d’autres fonctionnalités pour le connecteur, notamment la pagination, la détection des métadonnées/schémas et le Query Folding dans la syntaxe de requête OData. Au final, votre connecteur personnalisé prendra en charge la même gamme de fonctionnalités que OData.Feed.

Étapes suivantes

TripPin, partie 2 - Connecteur de données pour un service REST