Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans les cas où la réponse de la source de données n’est pas présentée dans un format que Power BI peut consommer directement, Power Query peut être utilisé pour effectuer une série de transformations.
Transformations statiques
Dans la plupart des cas, la source de données présente les données de manière cohérente : les noms de colonnes, les types de données et la structure hiérarchique sont cohérents pour un point de terminaison donné. Dans ce cas, il est approprié d’appliquer toujours le même ensemble de transformations pour obtenir les données dans un format acceptable pour Power BI.
Vous trouverez un exemple de transformation statique dans la partie 2 tripPin - Connecteur de données pour un didacticiel sur le service REST lorsque la source de données est traitée comme un service REST standard :
let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airlines"),
value = Source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand
Les transformations de cet exemple sont les suivantes :
-
Sourceest un enregistrement retourné par un appel àTripPin.Feed(...). - Vous extrayez la valeur de l’une des
Sourcepaires clé-valeur. Le nom de la clé estvalue, et vous stockez le résultat dans une variable appeléevalue. -
valueest une liste, que vous convertissez en table. Chaque élément dansvaluedevient une ligne dans la table, que vous pouvez appelertoTable. - Chaque élément dans
valueest lui-même un enregistrement.toTablea tous ces éléments dans une seule colonne :"Column1". Cette étape extrait toutes les données avec clé"AirlineCode"dans une colonne appelée"AirlineCode"et toutes les données avec clé"Name"dans une colonne appelée"Name", pour chaque ligne danstoTable."Column1"est remplacé par ces deux nouvelles colonnes.
À la fin de la journée, vous êtes laissé avec des données dans un format tabulaire simple que Power BI peut consommer et afficher facilement :
Il est important de noter qu’une séquence de transformations statiques de cette spécificité ne s’applique qu’à un seul point de terminaison. Dans l’exemple précédent, cette séquence de transformations fonctionne uniquement si "AirlineCode" et "Name" existe dans la réponse du point de terminaison REST, car elles sont codées en dur dans le code M. Par conséquent, cette séquence de transformations peut ne pas fonctionner si vous essayez d’atteindre le /Event point de terminaison.
Ce niveau élevé de spécificité peut être nécessaire pour envoyer des données à une table de navigation. Toutefois, pour les fonctions d’accès aux données plus générales, nous vous recommandons d’effectuer uniquement des transformations appropriées pour tous les points de terminaison.
Note
Veillez à tester les transformations dans différentes circonstances de données. Si l’utilisateur n’a pas de données au niveau du /airlines point de terminaison, vos transformations entraînent-elles une table vide avec le schéma approprié ? Ou une erreur est-elle rencontrée lors de l’évaluation ? Consultez TripPin Partie 7 : Schéma avancé avec types M pour une discussion sur les tests unitaires.
Transformations dynamiques
Une logique plus complexe est parfois nécessaire pour convertir les réponses d’API en formulaires stables et cohérents appropriés pour les modèles de données Power BI.
Réponses d’API incohérentes
Flux de contrôle M de base (instructions if, codes d’état HTTP, blocs try...catch, et ainsi de suite) sont généralement suffisants pour gérer les situations où l’API peut répondre de plusieurs façons.
Détermination dynamique du schéma
Certaines API sont conçues de sorte que plusieurs informations doivent être combinées pour obtenir le format tabulaire correct. Considérez la réponse de l'endpoint /sheetsde Smartsheet, qui contient un tableau de noms de colonnes et un tableau de lignes de données. Le connecteur Smartsheet est en mesure d’analyser cette réponse de la façon suivante :
raw = Web.Contents(...),
columns = raw[columns],
columnTitles = List.Transform(columns, each [title]),
columnTitlesWithRowNumber = List.InsertRange(columnTitles, 0, {"RowNumber"}),
RowAsList = (row) =>
let
listOfCells = row[cells],
cellValuesList = List.Transform(listOfCells, each if Record.HasFields(_, "value") then [value]
else null),
rowNumberFirst = List.InsertRange(cellValuesList, 0, {row[rowNumber]})
in
rowNumberFirst,
listOfRows = List.Transform(raw[rows], each RowAsList(_)),
result = Table.FromRows(listOfRows, columnTitlesWithRowNumber)
- Commencez par traiter les informations d’en-tête de colonne. Vous pouvez extraire l'enregistrement
titlede chaque colonne dans la liste, en préfixant avec une colonneRowNumberque vous savez être toujours représentée comme la première colonne. - Ensuite, vous pouvez définir une fonction qui vous permet d’analyser une ligne dans une liste de cellules
value. Vous pouvez à nouveau ajouter desrowNumberinformations. - Appliquez la fonction
RowAsList()à chacun desrowretournés dans la réponse de l’API. - Convertissez la liste en tableau, en spécifiant les en-têtes de colonne.