NetSuite の財務を分析する — 接続から損益計算書まで
約 45 分 · NetSuite への接続、取り込み済みの総勘定元帳、月次の損益計算書、売掛金エージング、スケジュールされた更新
これは、コントローラーや FP&A アナリストが最初の日に進める手順です。最後まで進めると、NetSuite から総勘定元帳を直接取得し、財務諸表のように読める月次損益計算書に変換し、売掛金エージングを作成して、両方をダッシュボードに表示し、全体が自動的に更新されるように設定できます。スプレッドシートへのエクスポートも、手作業での再入力も不要です。数値は NetSuite から取得され、常に最新の状態に保たれます。
接続と取得は一度だけ行い、その後は最も重要な作業に取り組みます。GL の生データの行を、ビジネス担当者が月曜の朝に読む集計に整形する作業です。
- PlaidCloud ワークスペースと、作業用のプロジェクト(必要な場合はトライアルを開始してください)。
- 動作する NetSuite 接続。 最初に NetSuite への接続の手順を完了してください。NetSuite で OAuth 2.0 と REST Web サービスを有効にし、統合のクライアント ID、証明書 ID、アカウント ID、秘密鍵の PEM を用意する必要があります。ここから始める前に、テストリクエストを送信が成功していることを確認してください。
- データの整形に SQL は不要です。標準の変換ステップで行います。クエリを書くのは NetSuite からの取得だけで、取得用のクエリはすべて提供されています。このチュートリアルはその内容に基づいているため、NetSuite SuiteQL クエリの例をタブで開いておいてください。
ステップ 1: ワークフローを作成する
Section titled “ステップ 1: ワークフローを作成する”ワークフローは、データを取得して整形するパイプラインです。
- プロジェクトを開き、ワークフロータブに切り替えます。
- 新規ワークフローをクリックし、
NetSuite Financialsなどの名前を付けて開きます。
ステップ 2: 総勘定元帳を取得する
Section titled “ステップ 2: 総勘定元帳を取得する”1 回の SuiteQL クエリで、1 年分の転記アクティビティ(すべての勘定科目、すべての月)を取得できます。これは損益計算書を作成するのに十分で、後で他の財務諸表を作成する場合にも使えます。
-
RESTリクエストステップを追加します。リクエストタブで、接続に NetSuite 接続を、メソッドに
POSTを、エンドポイントに/services/rest/query/v1/suiteqlを設定します。 -
本文に、
{"q": "…"}の形式で包んだ次の SuiteQL を入力します。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 -
レスポンスタブで、出力先をテーブルに設定して
netsuite_glという名前を付け、列のタイプを設定します。amountは通貨、それ以外はすべてテキストにします。(SuiteQL は数値と日付をテキストとして返します。タイプを設定することで、amountを合計できるようになります。) -
テストリクエストを送信をクリックして実行できることを確認し、ステップを実行します。これで、勘定科目ごと・月ごとに 1 行、符号付きの転記金額を持つ
netsuite_glテーブルができました。
ステップ 3: GL を損益計算書に整形する
Section titled “ステップ 3: GL を損益計算書に整形する”ここからが分析です。SQL を使わず、ポイント&クリック操作の変換 1 つで行います。損益計算書は GL を集約したものにすぎません。収益と費用の勘定科目を少数の行にグループ化し、収益がプラスで表示されるように符号を反転します。Table Extract ステップのテーブルデータの選択タブとデータフィルタータブで、すべて実行できます。
-
Table Extract ステップを追加します。ソースに
netsuite_glを、ターゲットに新しいテーブルnetsuite_pnlを設定します。 -
データフィルタータブで、収益と費用の勘定科目だけを残します(貸借対照表の勘定科目は除外します)。
account_typeが いずれかに一致Income、OthIncome、COGS、Expense、OthExpenseとなるフィルターを追加します。 -
テーブルデータの選択タブで、集計をクリックして集計を有効にし、ターゲット列を 3 つ設定します。
period— ソースからそのままマッピングします。集計はグループ化です。pnl_line— 各勘定科目タイプをレポートの行に変換する式(下記)です。集計はグループ化です。amount— 式netsuite_gl.amount * -1(符号の反転)です。集計は合計です。
pnl_lineでは、その式セルをダブルクリックして次のように入力します(エディターでは、列や条件グループのcase関数をポイント&クリックで選択できます)。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'),) -
ステップを実行します。
amount * -1 という式が、唯一の会計上の操作です。借方がプラスの金額の符号を反転することで、収益がプラス、コストがマイナスになり、各月の 3 つの行を合計すると純利益になります。次に、period と pnl_line をグループ化して合計することで、すべての勘定科目が月ごとにこの 3 つの行へ集約されます。式には PlaidCloud のポイント&クリックエディターを使用します。詳しくはデータマッパーの高度な使い方と式のリファレンスを参照してください。
ステップ 4: 財務担当者の目線で読む
Section titled “ステップ 4: 財務担当者の目線で読む”netsuite_pnl テーブルを開きます。月ごとに 3 つの数値があります。
| 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 |
この表から次の値をそのまま読み取れます。
- 売上総利益 = 収益 + 売上原価(売上原価はすでにマイナス)→
486,200 − 190,540 = 295,660。 - 純利益 = 3 つの行の合計 →
82,780。 - 売上総利益率(%) = 売上総利益 ÷ 収益 → 約 61%。
最初に行うべきことは照合です。同じ月について NetSuite 自身の損益計算書を実行し、収益と純利益が一致することを確認します。一致しない場合は、ほとんどが範囲の違いです。子会社や通貨のフィルター、または転記期間と取引日付の不一致が原因として考えられます(期間に関する注記を参照)。照合が取れて初めて、このパイプラインを信頼できます。
ステップ 5: 売掛金エージングを作成する
Section titled “ステップ 5: 売掛金エージングを作成する”最初の日に得られる 2 つ目の成果です。接続、取得、整形という同じ流れで進めます。未回収の売掛金を取得するレシピから始め、各請求書の延滞状況に応じてバケットに分類します。
-
もう 1 つ RESTリクエストステップを追加し(同じ接続、
POST、suiteql エンドポイント)、次の本文を設定します。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.tranid結果を
netsuite_open_arとして取り込み、invoice_totalとamount_unpaidは通貨、invoice_dateとdue_dateは日付、それ以外はテキストにします。 -
netsuite_open_arを読み取り、新しいテーブルnetsuite_ar_agingに出力する Table Extract ステップを追加します。テーブルデータの選択タブで集計をクリックし、ターゲット列を 3 つ設定します。aging_bucket— 各請求書を延滞状況でラベル付けする式(下記)です。集計はグループ化です。invoices— 任意の列(例:invoice_number)です。集計は件数です。balance—amount_unpaidからマッピングします。集計は合計です。
aging_bucketには次の式を入力します。支払期日からの経過日数(日付から日付を引くと日数になります)を計算し、該当する区分のラベルを付けます。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',) -
実行します。
netsuite_ar_agingを見ると、期限内の金額と 30 日、60 日、90 日以上延滞している金額が 5 行で把握できます。これは、ビジネス担当者が最初に確認する督促向けのビューです。(日付の引き算を行うには、due_dateを日付タイプにする必要があります。これは上記の RESTリクエスト ステップのレスポンスタブで設定済みです。)
ステップ 6: ダッシュボードに表示する
Section titled “ステップ 6: ダッシュボードに表示する”テーブルの数値でも十分ですが、CFO に送るのはグラフです。netsuite_pnl と netsuite_ar_aging を公開し、ダッシュボードを作成するの手順に沿って、次を追加します。
periodごとの純利益(または収益)の棒グラフaging_bucketごとの売掛金balanceの円グラフまたは棒グラフ
これで、エクスポート不要でワークフローが実行されるたびに更新される、NetSuite の財務ダッシュボードが完成しました。
ステップ 7: 更新をスケジュールする
Section titled “ステップ 7: 更新をスケジュールする”- ワークフロー全体を最初から最後まで一度実行し、すべてのステップが成功していることを確認します。
- ワークフローをスケジュールします。決算のサイクルに合わせて月次にするか、売掛金エージングを毎朝最新にしたい場合は毎晩にします。
取得はすべてテーブル全体の置き換えになるため、実行のたびに WHERE 句で定義した範囲が再抽出されます。履歴全体ではなく、必要な範囲(当年のみ、未回収の請求書のみなど)に絞ってください。
作成した内容
Section titled “作成した内容”空のワークフローから始めて、NetSuite の GL と売掛金のライブデータを取得し、標準の変換ステップ 2 つで月次損益計算書と売掛金エージングに整形しました。SQL は使っていません。さらにダッシュボードに表示し、更新をスケジュールしました。財務チームが行う中核的なレポートの流れが、これで自動化されました。
次のステップ
Section titled “次のステップ”- NetSuite SuiteQL クエリの例 — 同じワークフローに追加できる試算表、貸借対照表、未処理の販売注文、発注書、在庫のクエリです。
- Table Extract ステップとデータマッパーの高度な使い方 — より深い分析のためのグループ化、フィルター、計算列です。
- ディメンション階層を設計する — 勘定科目表を、自分で管理できるレポート用のグループに集約します。
- ダッシュボードを作成する — ダッシュボード作成の詳しい手順です。