Analyser les données financières NetSuite — de la connexion au compte de résultat
~45 minutes · une connexion NetSuite active, un grand livre importé, un compte de résultat mensuel, une balance âgée des créances clients et une actualisation planifiée
Voici le parcours du premier jour pour un contrôleur de gestion ou un analyste FP&A : à la fin, vous aurez récupéré votre grand livre directement depuis NetSuite, l’aurez transformé en un compte de résultat mensuel que vous pouvez lire comme un état financier, aurez créé une balance âgée des créances clients, aurez placé les deux sur un tableau de bord et aurez configuré l’ensemble pour qu’il s’actualise tout seul. Pas d’export vers un tableur, pas de ressaisie manuelle — les chiffres proviennent de NetSuite et restent à jour.
Vous vous connecterez une fois, récupérerez les données une fois, puis vous ferez ce qui compte vraiment : transformer des lignes brutes du grand livre en synthèses qu’un décideur lit le lundi matin.
Prérequis
Section intitulée « Prérequis »- Un espace de travail PlaidCloud et un projet dans lequel travailler (démarrez un essai si besoin).
- Une connexion NetSuite fonctionnelle. Suivez d’abord Se connecter à NetSuite — vous avez besoin d’OAuth 2.0 et des services web REST activés dans NetSuite, de l’ID client de l’intégration, d’un ID de certificat, de l’ID de votre compte et de la clé privée au format PEM. Vérifiez que Envoyer une requête de test est au vert avant de commencer ici.
- Aucun SQL n’est nécessaire pour transformer les données — vous le ferez avec des étapes de transformation standard. Le seul texte de requête est la récupération depuis NetSuite, et toutes les requêtes de récupération sont fournies. Gardez Exemples de requêtes SuiteQL pour NetSuite ouvert dans un onglet ; ce tutoriel s’en inspire.
Étape 1 : créer un workflow
Section intitulée « Étape 1 : créer un workflow »Le workflow est le pipeline qui récupère et transforme les données.
- Ouvrez votre projet et passez à l’onglet Workflows.
- Cliquez sur Nouveau workflow, donnez-lui un nom tel que
NetSuite Financials, puis ouvrez-le.
Étape 2 : récupérer le grand livre
Section intitulée « Étape 2 : récupérer le grand livre »Une seule requête SuiteQL vous donne un an d’activité comptabilisée — chaque compte, chaque mois — ce qui suffit pour construire un compte de résultat et, plus tard, d’autres états.
-
Ajoutez une étape Requête REST. Dans l’onglet Requête, définissez Connexion sur votre connexion NetSuite, Méthode sur
POSTet Point de terminaison sur/services/rest/query/v1/suiteql. -
Dans le Corps, placez ce SuiteQL encapsulé sous la forme
{"q": "…"}:SELECTTO_CHAR(t.trandate, 'YYYY-MM') AS period,a.accttype AS account_type,a.acctnumber AS account_number,BUILTIN.DF(a.id) AS account_name,tal.amount AS amountFROM transactionaccountingline talJOIN transaction t ON t.id = tal.transactionJOIN account a ON a.id = tal.accountWHERE tal.posting = 'T'AND tal.accountingbook = 1AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')AND TO_DATE('2026-12-31', 'YYYY-MM-DD')ORDER BY period, a.acctnumber -
Dans l’onglet Réponse, définissez la destination sur Table — nommez-la
netsuite_gl— et définissez les types de colonnes :amount→ Devise, toutes les autres → Texte. (SuiteQL renvoie les nombres et les dates sous forme de texte ; c’est le type qui permet àamountde s’additionner.) -
Cliquez sur Envoyer une requête de test pour vérifier qu’elle s’exécute, puis exécutez l’étape. Vous disposez maintenant d’une table
netsuite_gl: une ligne par compte et par mois, avec un montant comptabilisé signé.
Étape 3 : transformer le grand livre en compte de résultat
Section intitulée « Étape 3 : transformer le grand livre en compte de résultat »Place à l’analyse, réalisée avec une seule transformation en pointer-cliquer — sans SQL. Un compte de résultat n’est que le grand livre agrégé : les comptes de produits et de charges, regroupés en quelques lignes, avec le signe inversé pour que les revenus soient positifs. Une étape Table Extract fait tout cela dans ses onglets Sélection des données de la table et Filtres de données.
-
Ajoutez une étape Table Extract. Définissez sa Source sur
netsuite_glet sa Cible sur une nouvelle table,netsuite_pnl. -
Dans l’onglet Filtres de données, ne conservez que les comptes de produits et de charges (excluez les comptes de bilan) : ajoutez un filtre où
account_typeest l’une deIncome,OthIncome,COGS,Expense,OthExpense. -
Dans l’onglet Sélection des données de la table, cliquez sur Résumer pour activer l’agrégation, puis configurez trois colonnes cibles :
period— mappée directement depuis la source. Résumer : Regrouper par.pnl_line— une expression (ci-dessous) qui transforme chaque type de compte en ligne d’état. Résumer : Regrouper par.amount— une expressionnetsuite_gl.amount * -1(l’inversion du signe). Résumer : Somme.
Pour
pnl_line, double-cliquez sur sa cellule expression et saisissez ce qui suit (l’éditeur vous permet de sélectionner les colonnes et la fonctioncasedu groupe Conditions en pointer-cliquer) :case((netsuite_gl.account_type.in_(['Income', 'OthIncome']), '1 - Revenue'),(netsuite_gl.account_type == 'COGS', '2 - Cost of Goods Sold'),(netsuite_gl.account_type.in_(['Expense', 'OthExpense']), '3 - Operating Expenses'),) -
Exécutez l’étape.
L’expression amount * -1 est la seule manipulation comptable : inverser le montant positif au débit rend les revenus positifs et les coûts négatifs, de sorte que les trois lignes de chaque mois s’additionnent pour donner le résultat net. Ensuite, Somme avec Regrouper par sur period et pnl_line regroupe tous les comptes en ces trois lignes par mois. Les expressions utilisent l’éditeur en pointer-cliquer de PlaidCloud — consultez Utilisation avancée du Data Mapper et la référence des expressions.
Étape 4 : le lire comme un financier
Section intitulée « Étape 4 : le lire comme un financier »Ouvrez la table netsuite_pnl. Pour chaque mois, vous avez trois chiffres :
| period | pnl_line | amount |
|---|---|---|
| 2026-01 | 1 - Revenue | 486,200.00 |
| 2026-01 | 2 - Cost of Goods Sold | -190,540.00 |
| 2026-01 | 3 - Operating Expenses | -212,880.00 |
Lisez directement à partir de la table :
- Marge brute = revenus + coût des ventes (ce dernier est déjà négatif) →
486,200 − 190,540 = 295,660. - Résultat net = somme des trois lignes →
82,780. - Taux de marge brute = marge brute ÷ revenus → environ 61 %.
La première chose à faire est de rapprocher les chiffres : exécutez le compte de résultat natif de NetSuite pour le même mois et vérifiez que les revenus et le résultat net concordent. Si ce n’est pas le cas, il s’agit presque toujours d’une différence de périmètre — un filtre de filiale ou de devise, ou un décalage entre la période comptable et la date de transaction (consultez la remarque sur les périodes). Ne faites confiance au pipeline qu’une fois les chiffres rapprochés.
Étape 5 : créer une balance âgée des créances clients
Section intitulée « Étape 5 : créer une balance âgée des créances clients »Le deuxième gain du premier jour, qui suit le même schéma connexion, récupération, transformation. Partez de la requête sur les créances ouvertes, puis répartissez-les par tranche selon le retard de chaque facture.
-
Ajoutez une autre étape Requête REST (même connexion,
POST, le point de terminaison suiteql) avec ce corps :SELECTt.tranid AS invoice_number,BUILTIN.DF(t.entity) AS customer,TO_CHAR(t.trandate, 'YYYY-MM-DD') AS invoice_date,TO_CHAR(t.duedate, 'YYYY-MM-DD') AS due_date,t.foreigntotal AS invoice_total,t.foreignamountunpaid AS amount_unpaidFROM transaction tWHERE t.type = 'CustInvc'AND t.foreignamountunpaid <> 0ORDER BY t.tranidImportez-la sous le nom
netsuite_open_ar, avecinvoice_totaletamount_unpaid→ Devise,invoice_dateetdue_date→ Date, les autres → Texte. -
Ajoutez une étape Table Extract qui lit
netsuite_open_arvers une nouvelle tablenetsuite_ar_aging. Dans l’onglet Sélection des données de la table, cliquez sur Résumer et configurez trois colonnes cibles :aging_bucket— une expression (ci-dessous) qui étiquette chaque facture selon son retard. Résumer : Regrouper par.invoices— n’importe quelle colonne, par exempleinvoice_number. Résumer : Nombre.balance— mappée depuisamount_unpaid. Résumer : Somme.
Pour
aging_bucket, saisissez cette expression — elle mesure le nombre de jours de retard (une date moins une date donne des jours) et étiquette la tranche :case(((func.today() - netsuite_open_ar.due_date) <= 0, '0 - Current'),((func.today() - netsuite_open_ar.due_date) <= 30, '1 - 1-30 days'),((func.today() - netsuite_open_ar.due_date) <= 60, '2 - 31-60 days'),((func.today() - netsuite_open_ar.due_date) <= 90, '3 - 61-90 days'),else_='4 - Over 90 days',) -
Exécutez-la.
netsuite_ar_agingvous indique désormais, en cinq lignes, quelle part est à jour et quelle part est en retard de 30, 60 ou plus de 90 jours — la vue de recouvrement qu’un décideur consulte en premier. (due_datedoit être typée Date pour que la soustraction de dates fonctionne — vous l’avez défini dans l’onglet Réponse de l’étape Requête REST ci-dessus.)
Étape 6 : l’afficher sur un tableau de bord
Section intitulée « Étape 6 : l’afficher sur un tableau de bord »Des chiffres dans une table, c’est bien ; un graphique, c’est ce que l’on envoie au directeur financier. Publiez netsuite_pnl et netsuite_ar_aging, puis suivez Créer un tableau de bord pour ajouter :
- un histogramme du résultat net (ou des revenus) par
period, et - un graphique en secteurs ou en barres du
balancedes créances paraging_bucket.
Vous obtenez un tableau de bord financier NetSuite en direct — sans export, actualisé à chaque exécution du workflow.
Étape 7 : planifier l’actualisation
Section intitulée « Étape 7 : planifier l’actualisation »- Exécutez une fois le workflow complet, de haut en bas, pour vérifier que chaque étape est au vert.
- Planifiez le workflow — mensuellement selon le rythme de clôture, ou chaque nuit si vous voulez une balance âgée à jour chaque matin.
Comme chaque récupération remplace intégralement la table, chaque exécution réextrait la tranche définie par sa clause WHERE — limitez-la à la fenêtre dont vous avez besoin (l’année en cours, uniquement les factures ouvertes) plutôt qu’à tout l’historique.
Ce que vous avez construit
Section intitulée « Ce que vous avez construit »En partant d’un workflow vide, vous avez récupéré le grand livre et les créances NetSuite en direct, les avez transformés en un compte de résultat mensuel et une balance âgée des créances clients avec deux étapes de transformation standard — sans SQL —, les avez placés sur un tableau de bord et avez configuré leur actualisation — la boucle de reporting essentielle d’une équipe financière, désormais automatisée.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Exemples de requêtes SuiteQL pour NetSuite — balance générale, bilan, commandes clients ouvertes, commandes d’achat et stocks à ajouter au même workflow.
- Étape Table Extract et Utilisation avancée du Data Mapper — regroupement, filtrage et colonnes calculées pour des analyses plus poussées.
- Concevoir une hiérarchie de dimension — regroupez votre plan comptable en groupes de reporting que vous contrôlez.
- Créer un tableau de bord — le pas-à-pas complet du tableau de bord.