Pour les entrepreneurs et les indépendants, Qonto est devenue en quelques années un des leaders des néo-banques professionnelles (c’est la banque que j’utilisais lorsque j’étais indépendant). Je vous propose ici de créer un rapport Power BI très simple permettant d’accéder à vos données de transactions en passant par l’API mise à dispotion par Qonto (documentation api Qonto).
Création d’une Requête Power Query appelant l’API Qonto
Dans un premier temps, nous allons créer une simple requête récupérant les données depuis l’API Qonto.
Etapes
- Créez un nouveau rapport Power BI
![création d'un nouveau rapport Power BI création d'un nouveau rapport Power BI](/wp-content/uploads/2023/09/01.png)
- Ouvrez l’éditeur Power Query
- La fenêtre Power Query s’ouvre
![éditeur Power Query éditeur Power Query](/wp-content/uploads/2023/09/03.png)
- Créez une requête vide
![menu de création d'un rapport menu de création d'un rapport](/wp-content/uploads/2023/09/04.png)
Normalement il devrait être possible de créer une requête Web mais la création ne semble pas fonctionner avec l’api Qonto. Il y a une erreur d’authentification même en fonctionnement Anonyme.
On trouve un peu plus d’informations sur ce post : https://community.powerbi.com/t5/Service/Cannot-sign-in-with-Anonymous-Authentication-for-a-Web-API/td-p/168154
Ainsi que la réponse de l’équipe responsable coté MS :
Currently, “test connection” for web sources does not use any of the information in the options record, which in this case includes the authorization header that’s required for this source to respond. The service also doesn’t give the user a way to opt out of “test connection” or ignore its failures.
As a result, any query with a call to Web.Contents whose success is dependent on information in the options record cannot currently be scheduled for refresh in the service.
- Résultat
![résultat création requête vide résultat création requête vide](/wp-content/uploads/2023/09/06.png)
- Renommez la requête “transactions-api”
- Ouvrez la requête en mode “Editeur avancé”
![menu de requête menu de requête](/wp-content/uploads/2023/09/07.png)
- La fenêtre d’édition s’ouvre
![éditeur avancé éditeur avancé](/wp-content/uploads/2023/09/08.png)
- Remplacez le code existant par le suivant
let
slug = "ajouter le slug de votre compte Qonto",
secret = "ajouter le secret de votre compte Qonto",
iban = "ajouter l'iban de votre compte Qonto",
page = 1,
authorization = slug & ":" & secret,
Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[ #"slug"=slug, #"iban"=iban, #"current_page"=page],Headers=[Authorization=authorization]]))
in
Source
Explications du code :
- les lignes 2 à 6 servent à instancier les variables qui seront utilisées lors de notre appel à l’api
Remplacez les valeurs des variables par vos informations de comptes disponibles sur le site de Qonto
- la ligne 7 lance l’appel à l’api Qonto de transactions https://thirdparty.qonto.com/v2/transactions.
plus d’informations sur l’api transactions : https://api-doc.qonto.com/2.0/transactions/list-transactions
- On passe plusieurs éléments à notre requête http :
- Headers (en-tête du call http) :
- Authorization : ici on passe la clé d’authentication de l’api Qonto ( format : {slug}:{secret})
- Query (paramètres qui seront ajouter dans l’url) :
- slug : correspond au login du compte (paramètre obligatoire)
- iban : identifiant du compte dont on veut récupérer les transactions(paramètre obligatoire)
- current_page : l’api retourne les transactions par page (ici on indique ce que l’on souhaite récupérer).
- Headers (en-tête du call http) :
current_page n’est pas un paramètre obligatoire mais je le positionne dès maintenant, car il nous sera utile plus tard dans le tutoriel
- Une fois les modifications de code effectuées, cliquez “OK”. Vous devriez obtenir le résultat suivant :
![resultat appel api resultat appel api](/wp-content/uploads/2023/09/09.png)
L’objet source nous retourne deux éléments :
- transactions : la liste des transactions pour les informations passées en paramètre
- meta : les métadonnées pour les transactions (ex : nb total de transactions / nombre de page…)
C’est la liste des transactions qui nous intérresse
- Cliquez sur la liste pour l’ouvrir vous devriez obtenir le résultat suivant
![liste des transactions ouverte liste des transactions ouverte](/wp-content/uploads/2023/09/10.png)
- Transformez la liste de record (enregistrement) en Table
![bouton de transformation en table bouton de transformation en table](/wp-content/uploads/2023/09/11.png)
- Cliquez sur le bouton permettant de développer le contenu des records (enregistrements)
![colonne à developper colonne à developper](/wp-content/uploads/2023/09/12.png)
- Une fenêtre s’ouvre afin de nous permettre de sélectionner les données qui vous interresse.
![fenêtre de selection des colonnes fenêtre de selection des colonnes](/wp-content/uploads/2023/09/13.png)
2 remarques :
- pour mon exemple je sélectionne toutes les colonnes mais vous avez la possibilité de ne prendre que ce qui vous intéresse
- je décoche la case “Utiliser le nom de la colonne …” pour éviter d’avoir a changer les noms ensuite
- Vous devriez obtenir le résultat suivant :
![colonnes developées colonnes developpées](/wp-content/uploads/2023/09/14.png)
il est possible de développer les sous éléments des transactions. Pour notre exemple je me limite aux données de premier niveau
- Réouvrez l’éditeur avancé de la requête, vous devriez avoir un code similaire à celui ci:
let
slug = "ajouter le slug de votre compte Qonto",
secret = "ajouter le secret de votre compte Qonto",
iban = "ajouter l'iban de votre compte Qonto",
page = 1,
authorization = slug & ":" & secret,
Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[ #"slug"=slug, #"iban"=iban, #"current_page"=page],Headers=[Authorization=authorization]])),
transactions = Source[transactions],
#"Converti en table" = Table.FromList(transactions, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"transaction_id", "amount", "amount_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"}, {"transaction_id", "amount", "amount_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"})
in
#"Column1 développé"
Parfait, nous venons de récupérer nos premières données depuis l’API Qonto
Malheureusement l’API ne retourne que 100 transactions (ceci correspond à la taille maximale d’une page pour l’API). Nous devons maintenant boucler afin de récupérer autant de pages que nécessaire.