Comment obtenir les données QONTO avec Power BI ?

Dans la deuxième partie de ce guide consacré à l’intégration des données QONTO dans Power Bi, vous allez découvrir comment créer une fonction et comment obtenir toutes vos données malgré les limitations imposées par l’API. 

QONTO

Étape 1 : Créer une fonction dans Power Bi

Dans le premier article, je vous ai présenté une méthode permettant de récupérer rapidement et simplement les données de l’API (exemple avec l’appel API  « organization »). Cette méthode reste limitée et ne permet malheureusement pas de gérer la pagination ou le passage de filtre par exemple. Si votre jeu de données comporte plus de 100 lignes, il sera nécessaire d’appeler x fois l’API. Cela va vite devenir contraignant et va vous obliger à faire plus de retraitements / maintenance dans Power Query pour gérer vos tables (fusion etc.).
Pour faire plus simple, je vais vous montrer comment à partir de la méthode 1 obtenir une fonction pour palier à ces limitations.

Pour illustrer cet exemple, je vais me baser sur l’api https://thirdparty.qonto.com/v2/transactions.
Pour fonctionner, cet appel nécessitera les paramètres suivants : ID du compte (slug), une clé secrète, le numéro de page et l’iban du compte.

1. Créer une nouvelle requête vide.
2. Modifier le code de votre requête (éditeur avancé) par le code suivant : 

Code de la requête power bi permettant de récupérer les 100 premières transactions (méthode 1) :

let
slug = "renseigner ici l'identifiant de votre compte Qonto",
secret_key = "renseigner ici la clé secrète de votre compte Qonto",
iban = "renseigner ici l'iban de votre compte",
page_num = "renseigner ici le numéro de la page",
authentification = slug & ":" & secret_key,
Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[#"iban"=iban, #"current_page"=page_num],Headers=[Authorization=authentification]]))
in
Source

Après avoir validé, vous obtiendrez le résultat ci-dessus.

Contenu de l’objet
transactions : liste des transactions prenant en compte notre contexte (numéro de page).
meta : métadonnées de l’appel transactions (ex : nombre total de transactions, nombre de page…). Afficher les métadonnées est un bon moyen de connaitre rapidement le nombre de transactions effectuées sur votre compte QONTO pour déduire le nombre d’appels à faire pour récupérer l’intégralité des données.

3. Cliquer sur « List »
4. Puis clic droit sur l’entête de la colonne « Liste » > Vers la table
5. Une fenêtre « Vers la table » apparait. Laissez les valeurs par défauts (aucun séparateur et afficher des erreurs) puis cliquer sur OK

6. Cliquez sur le bouton dans l’entête de colonne permettant de développer les enregistrements (Records).
7. Dans la fenêtre qui vient de s’ouvrir, vous allez pouvoir sélectionner les colonnes présentes dans la table transactions.

A ce stade, vous avez plusieurs possibilités :

  • Sélectionner toutes les colonnes (et faire un tri par la suite) ou sélectionner directement les colonnes qui vous intéresse.
  • Décocher la case « Utiliser le nom de la colonne d’origine comme préfixe ». Si vous laisser cocher cette case, le nom de la colonne sera « Column1.#Nom# ».

Dans mon exemple, je sélectionne toutes les colonnes et je décoche la case « Utiliser le nom de la colonne … ».

8.   Cliquer sur OK pour obtenir les données de chaque transactions (maximum 100 et correspondant à la page 1).
9.   Si vous observez votre jeu de données, vous vous apercevrez qu’il est possible de développer d’autres colonnes. Dans mon exemple je reste sur le premier niveau.
10. Cliquer sur « Editeur avancé ». Vous devriez obtenir le code suivant :

let
slug = "renseigner ici l'identifiant de votre compte Qonto",
secret_key = "renseigner ici la clé secrète de votre compte Qonto",
iban = "renseigner ici l'iban de votre compte",
page_num = "renseigner ici le numéro de la page",
authentification = slug & ":" & secret_key,
Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[#"iban"=iban, #"current_page"=page_num],Headers=[Authorization=authentification]])),
#"dev transactions > list" = Source[transactions],
#"convertir en table" = Table.FromList(#"dev transactions > list", Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"dev records (all columns)" = Table.ExpandRecordColumn(#"convertir en table", "Column1", {"transaction_id", "amount", "amount_cents", "settled_balance", "settled_balance_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required", "card_last_digits", "category", "id", "subject_type"}, {"transaction_id", "amount", "amount_cents", "settled_balance", "settled_balance_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required", "card_last_digits", "category", "id", "subject_type"})
in
#"dev records (all columns)"

11. Modifier ce code de la manière suivante :

//Création des champs de saisie pour notre fonction
(slug as text, secret_key as text, iban as text, page_num as text) as table =>
let
Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[#"iban"=iban, #"current_page"=page_num],Headers=[Authorization=slug&":"&secret_key]])),
#"dev transactions > list" = Source[transactions],
#"convertir en table" = Table.FromList(#"dev transactions > list", Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"dev records (all columns)" = Table.ExpandRecordColumn(#"convertir en table", "Column1", {"transaction_id", "amount", "amount_cents", "settled_balance", "settled_balance_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required", "card_last_digits", "category", "id", "subject_type"}, {"transaction_id", "amount", "amount_cents", "settled_balance", "settled_balance_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required", "card_last_digits", "category", "id", "subject_type"})
in
#"dev records (all columns)"

12. Comme on peut l’apercevoir, la table « transactions » s’est changée en fonction :

J’ai maintenant une fonction qui demande une valeur pour les paramètres « slug », « secret_key », « iban » et « page_num ».
Pour tester cette fonction, complétez les 4 champs et cliquer sur « Appeler ». 

Si tout est correct, vous devriez obtenir une nouvelle table nommée « Fonction appelée ». Pour éviter les confusions avec notre future table « transactions », je renomme la fonction « transactions » en « fct_transactions ».

Étape 2 : Dynamiser l'appel à une fonction

A présent j’ai une fonction qui permet d’extraire les données de mon appel API en se basant sur des valeurs passées en paramètre. Si mon jeu de données comporte plus de 100 résultats, il faudra donc appeler ma fonction plusieurs fois en faisant varier le paramètre « page_num ».

Comment faire pour appeler plusieurs fois ma fonction ?

1. Créer un fichier « excel » ou « csv » (api_call_Qonto.csv)
2. Créer 5 colonnes : « slug », « secret_key », « iban », « page_num » et « max_invoices »
3. Compléter le tableau : 1 ligne correspond à un appel. Si votre compte QONTO comporte 500 transactions, il faudra donc avoir minimum 5 lignes dans ce tableau. Je vous conseil d’en renseigner plus pour éviter de revenir sur votre configuration ultérieurement.

4. Créer une nouvelle source de données à partir de votre fichier. (Nouvelle source > Fichier Excel ou CSV).
5. Vous avez à présent une nouvelle table qui porte le nom de votre fichier. Dans mon cas : api_call_Qonto
6. Ajouter une colonne personnalisée et renseigner le code ci-dessous.

Nom de la colonne : transactions_api_call

fct_transactions(Text.From([slug]), Text.From([scret_key]), Text.From([iban]), Text.From([page_num]))

Fonctionnement : L’ajout d’une colonne personnalisée permet de stocker les résultats obtenus à partir de la fonction « fct_transactions ». La première ligne du tableau appellera la fonction « fct_transactions » avec les valeurs contenues dans chaque colonne (donc les 100 premiers résultats). La seconde ligne fera la même chose mais en appelant les 100 résultats suivants (100 à 200) ainsi de suite. Si QONTO n’a plus de donnée à retourner, vous obtiendrez comme réponse « Error ».

7.    Supprimer les erreurs (clic droit sur la colonne puis cliquer sur « supprimer les erreurs »).
8.    Développer les données contenues dans votre colonne « transaction_api_call ».
9.    Sélectionner les colonnes que vous souhaitez voir dans votre table.
10.  Supprimer les colonnes inutiles (slug, secret_key etc.) et appliquer les traitements souhaitées à votre table.

Vous avez à présent une table au sein de votre Power Bi qui permet de récupérer toutes vos transactions QONTO via API.

Les prochaines étapes

Vous connaissez à présent les deux méthodes pour récupérer les données de QONTO. Dans le dernier article de ce guide, je vous montrerai un exemple de ce qu’il est possible d’obtenir à partir des différents appels API avec en bonus le fichier source à télécharger !

Il vous reste des questions ou vous souhaitez que l’on développe un point en particulier ? N’hésitez pas à nous en faire part dans les commentaires ou via notre formulaire de contact.

Cet article vous a été utile ? Faites le savoir à votre entourage professionnel.

Quentin Moncharmont

Consultant web analyst

En tant que consultant, je mets toute mon expérience acquise depuis 2012 au service des clients que j’accompagne. Curieux et passionné par les sujets data,  j’aime découvrir de nouveaux univers métier et partager mes connaissances. En savoir plus !

Laisser un commentaire

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

Ne rater aucune publication

Pas de spam, un email par mois pour rester en veille des derniers sujets que nous publions

Merci pour votre inscription. Vous recevrez notre prochaine newsletter très bientôt ! Aie ! Une erreur est survenue lors de votre demande - Vérifier votre saisie et recommencer. Merci

Découvrez nos autres articles Data visualisation

  • DataViz
  • Formations
  • Google Analytics
  • Google Tag Manager
  • Missions
  • Piano Analytics (AT)
  • Plan de marquage
  • PowerBi
  • Réalisations
12
Discutons ensemble de votre projet analytics et obtenez des solutions pertinentes à vos besoins !