Zum Inhalt springen

NetSuite-Finanzdaten analysieren – von der Verbindung zur GuV

~45 Minuten · eine aktive NetSuite-Verbindung, ein geladenes Hauptbuch, eine monatliche GuV, eine Forderungsfälligkeitsliste und eine geplante Aktualisierung

Dies ist der Einstieg für Controller und FP&A-Analysten: Am Ende haben Sie Ihr Hauptbuch direkt aus NetSuite abgerufen, es in eine monatliche Gewinn- und Verlustrechnung verwandelt, die Sie wie einen Abschluss lesen können, eine Forderungsfälligkeitsliste (A/R-Aging) erstellt, beides auf einem Dashboard dargestellt und das Ganze so eingerichtet, dass es sich von selbst aktualisiert. Kein Tabellenexport, kein manuelles Neuerfassen – die Zahlen stammen aus NetSuite und bleiben aktuell.

Sie verbinden sich einmal, rufen die Daten einmal ab und erledigen dann den Teil, auf den es wirklich ankommt: rohe Hauptbuchzeilen in die Zusammenfassungen zu verwandeln, die ein Fachanwender am Montagmorgen liest.

NetSuiteSuiteQL-AbrufHauptbuchtabelleGruppieren & summierenGuV
Verbinden, das Hauptbuch einmal abrufen und dann zu lesbaren Abschlüssen aufbereiten – alles nach Zeitplan wiederholbar.
  • Ein PlaidCloud-Workspace und ein Projekt, in dem Sie arbeiten (Testphase starten, falls Sie noch keinen haben).
  • Eine funktionierende NetSuite-Verbindung. Folgen Sie zuerst der Anleitung Mit NetSuite verbinden – Sie benötigen OAuth 2.0 und aktivierte REST Web Services in NetSuite, die Client-ID der Integration, eine Zertifikats-ID, Ihre Konto-ID und den privaten Schlüssel als PEM. Stellen Sie sicher, dass Testanfrage senden erfolgreich ist, bevor Sie hier beginnen.
  • Für die Aufbereitung der Daten ist kein SQL nötig – Sie verwenden dafür Standard-Transformationsschritte. Der einzige Abfragetext ist der Abruf aus NetSuite, und alle Abrufabfragen sind vorgegeben. Halten Sie NetSuite-SuiteQL-Abfragebeispiele in einem Tab geöffnet; dieses Tutorial bedient sich daraus.

Der Workflow ist die Pipeline, die die Daten abruft und aufbereitet.

  1. Öffnen Sie Ihr Projekt und wechseln Sie zur Registerkarte Workflows.
  2. Klicken Sie auf Neuer Workflow, geben Sie ihm einen Namen wie NetSuite Financials und öffnen Sie ihn.

Eine SuiteQL-Abfrage liefert Ihnen ein Jahr an Buchungsaktivität – jedes Konto, jeden Monat –, was ausreicht, um eine GuV und später weitere Abschlüsse zu erstellen.

  1. Fügen Sie einen REST-Anfrage-Schritt hinzu. Legen Sie auf der Registerkarte Anfrage Verbindung auf Ihre NetSuite-Verbindung, Methode auf POST und Endpunkt auf /services/rest/query/v1/suiteql fest.

  2. Tragen Sie im Body dieses SuiteQL ein, eingebettet als {"q": "…"}:

    SELECT
    TO_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 amount
    FROM transactionaccountingline tal
    JOIN transaction t ON t.id = tal.transaction
    JOIN account a ON a.id = tal.account
    WHERE tal.posting = 'T'
    AND tal.accountingbook = 1
    AND 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
  3. Legen Sie auf der Registerkarte Antwort als Ziel Tabelle fest – nennen Sie sie netsuite_gl – und stellen Sie die Spaltentypen ein: amount → Währung, alles andere → Text. (SuiteQL liefert Zahlen und Datumswerte als Text; erst der Typ macht amount summierbar.)

  4. Klicken Sie auf Testanfrage senden, um zu prüfen, ob sie funktioniert, und führen Sie dann den Schritt aus. Jetzt haben Sie eine Tabelle netsuite_gl: eine Zeile pro Konto und Monat mit einem vorzeichenbehafteten Buchungsbetrag.

Nun folgt die Analyse, erledigt mit einer einzigen Transformation per Mausklick – ohne SQL. Eine GuV ist nur das zusammengefasste Hauptbuch: Ertrags- und Aufwandskonten, zu wenigen Zeilen gruppiert, mit umgekehrtem Vorzeichen, damit Erlöse positiv erscheinen. Ein Table-Extract-Schritt erledigt all das auf seinen Registerkarten Tabellendatenauswahl und Datenfilter.

  1. Fügen Sie einen Table Extract-Schritt hinzu. Legen Sie seine Quelle auf netsuite_gl und sein Ziel auf eine neue Tabelle netsuite_pnl fest.

  2. Behalten Sie auf der Registerkarte Datenfilter nur die Ertrags- und Aufwandskonten (lassen Sie Bilanzkonten weg): Fügen Sie einen Filter hinzu, bei dem account_type ist eines von Income, OthIncome, COGS, Expense, OthExpense.

  3. Klicken Sie auf der Registerkarte Tabellendatenauswahl auf Zusammenfassen, um die Aggregation einzuschalten, und richten Sie dann drei Zielspalten ein:

    • period – direkt aus der Quelle zugeordnet. Zusammenfassen: Gruppieren nach.
    • pnl_line – ein Ausdruck (siehe unten), der jeden Kontotyp in eine Berichtszeile übersetzt. Zusammenfassen: Gruppieren nach.
    • amount – ein Ausdruck netsuite_gl.amount * -1 (die Vorzeichenumkehr). Zusammenfassen: Summe.

    Doppelklicken Sie bei pnl_line auf die Zelle Ausdruck und geben Sie Folgendes ein (im Editor können Sie die Spalten und die Funktion case aus der Gruppe Bedingungen per Mausklick auswählen):

    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'),
    )
  4. Führen Sie den Schritt aus.

Der Ausdruck amount * -1 ist der eine buchhalterische Kniff: Die Negierung des Soll-positiven Betrags macht Erlöse positiv und Kosten negativ, sodass die drei Zeilen eines Monats den Jahresüberschuss ergeben. Anschließend fasst Summe mit Gruppieren nach für period und pnl_line alle Konten zu diesen drei Zeilen pro Monat zusammen. Ausdrücke verwenden den Mausklick-Editor von PlaidCloud – siehe Erweiterte Data-Mapper-Nutzung und die Ausdrucksreferenz.

Öffnen Sie die Tabelle netsuite_pnl. Für jeden Monat haben Sie drei Zahlen:

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

Direkt daraus ablesbar:

  • Rohertrag = Erlöse + Herstellkosten (die Herstellkosten sind bereits negativ) → 486,200 − 190,540 = 295,660.
  • Jahresüberschuss = Summe der drei Zeilen → 82,780.
  • Rohertragsmarge in % = Rohertrag ÷ Erlöse → ca. 61 %.

Das Erste, was Sie tun sollten, ist der Abgleich: Führen Sie NetSuites eigene Erfolgsrechnung für denselben Monat aus und prüfen Sie, ob Erlöse und Jahresüberschuss übereinstimmen. Falls nicht, liegt es fast immer an einem Unterschied im Umfang – ein Filter nach Tochtergesellschaft oder Währung oder ein abweichender Bezug auf Buchungsperiode statt Belegdatum (siehe den Hinweis zu Perioden). Vertrauen Sie der Pipeline erst, wenn der Abgleich stimmt.

Schritt 5: Eine Forderungsfälligkeitsliste Erstellen

Abschnitt betitelt „Schritt 5: Eine Forderungsfälligkeitsliste Erstellen“

Der zweite Erfolg am ersten Tag folgt demselben Muster aus Verbinden, Abrufen und Aufbereiten. Beginnen Sie mit dem Rezept für offene Forderungen und teilen Sie es dann danach in Klassen ein, wie überfällig jede Rechnung ist.

  1. Fügen Sie einen weiteren REST-Anfrage-Schritt hinzu (dieselbe Verbindung, POST, derselbe SuiteQL-Endpunkt) mit diesem Body:

    SELECT
    t.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_unpaid
    FROM transaction t
    WHERE t.type = 'CustInvc'
    AND t.foreignamountunpaid <> 0
    ORDER BY t.tranid

    Laden Sie das Ergebnis als netsuite_open_ar, mit invoice_total und amount_unpaid → Währung, invoice_date und due_date → Datum, dem Rest → Text.

  2. Fügen Sie einen Table Extract-Schritt hinzu, der netsuite_open_ar in eine neue Tabelle netsuite_ar_aging liest. Klicken Sie auf der Registerkarte Tabellendatenauswahl auf Zusammenfassen und richten Sie drei Zielspalten ein:

    • aging_bucket – ein Ausdruck (siehe unten), der jede Rechnung danach benennt, wie überfällig sie ist. Zusammenfassen: Gruppieren nach.
    • invoices – eine beliebige Spalte, z. B. invoice_number. Zusammenfassen: Anzahl.
    • balance – aus amount_unpaid zugeordnet. Zusammenfassen: Summe.

    Geben Sie für aging_bucket diesen Ausdruck ein – er misst die Tage über dem Fälligkeitsdatum (Datum minus Datum ergibt Tage) und benennt die Klasse:

    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',
    )
  3. Führen Sie den Schritt aus. netsuite_ar_aging zeigt Ihnen nun in fünf Zeilen, wie viel aktuell ist und wie viel 30/60/90+ Tage überfällig – die Mahnwesen-Sicht, die ein Unternehmen zuerst liest. (due_date muss als Datum typisiert sein, damit die Datumssubtraktion funktioniert – das haben Sie oben auf der Registerkarte Antwort des REST-Anfrage-Schritts festgelegt.)

Zahlen in einer Tabelle sind in Ordnung; ein Diagramm schicken Sie an den CFO. Veröffentlichen Sie netsuite_pnl und netsuite_ar_aging und folgen Sie dann Dashboard erstellen, um Folgendes hinzuzufügen:

  • ein Balkendiagramm des Jahresüberschusses (oder der Erlöse) nach period und
  • ein Kreis- oder Balkendiagramm des Forderungssaldos balance nach aging_bucket.

Damit haben Sie ein aktuelles NetSuite-Finanz-Dashboard – ohne Export, aktualisiert bei jeder Ausführung des Workflows.

  1. Führen Sie den gesamten Workflow einmal von oben nach unten aus, um sicherzustellen, dass jeder Schritt grün ist.
  2. Planen Sie den Workflow – monatlich im Takt des Abschlusses oder nächtlich, wenn die Forderungsfälligkeitsliste jeden Morgen frisch sein soll.

Da jeder Abruf die gesamte Tabelle ersetzt, extrahiert jede Ausführung den Ausschnitt neu, den ihre WHERE-Klausel definiert – beschränken Sie diese auf das benötigte Fenster (das laufende Jahr, nur offene Rechnungen) statt auf die gesamte Historie.

Ausgehend von einem leeren Workflow haben Sie das aktuelle NetSuite-Hauptbuch und die Forderungen abgerufen, mit zwei Standard-Transformationsschritten – ohne SQL – zu einer monatlichen GuV und einer Forderungsfälligkeitsliste aufbereitet, auf einem Dashboard dargestellt und zur Aktualisierung eingeplant – der zentrale Berichtskreislauf eines Finanzteams, jetzt automatisiert.