transaction
transactionThe document header for every transaction type NetSuite records — sales orders, purchase orders, fulfillments, receipts, invoices, journals — separated by the type column rather than by table.
page-attested by absence: this header carries NO subsidiary column, NO quantity, and NO base-currency or debit/credit amounts. Monetary exposure here is transaction-currency ("foreign") totals only — subsidiary and quantities come from transactionline, base-currency debits and credits from transactionaccountingline. `location` does exist on the header, but it is an optional stamp that is null on most documents — filter location at LINE level, on transactionline.location.
hasSubsidiary is false because the column genuinely is not on the record: subsidiary scoping is a LINE-level property in the analytics source. hasLocation is false for a different reason — the header `location` column exists (and is authored below) but is optional and unset on most rows, so an active anchor on it would silently drop documents; the line-level column is the one to filter on. type values (the discriminator that turns this one table into every document) are not published by Oracle anywhere public — discover them in-account with SELECT DISTINCT type; see quirks #transaction-spine. createdfrom is likewise a line column, not a header one. One disclosed typing asymmetry: the 2021.1 page types both type and status as selects, but this catalog types type as varchar — the legacy Connect Browser typed that column a plain VARCHAR2 — while status follows the default select→number mapping pending a public source that settles its stored representation.
What the badges mean
- master
- Data class: what the record holds — master data, transaction documents, control/configuration, or a documented convenience record. NetSuite has no product-family or schema axis, so this is the whole classification.
- Subsidiary-scoped
- The record carries a
subsidiarycolumn that partitions its rows, so the generated SQL anchors it. On a few records the column is a multiselect rather than a scalar foreign key — the table notes say which (see the quirks guide). - Location-scoped
- The record carries a
locationcolumn — an org segment in NetSuite before it is a warehouse — and the generated SQL anchors it the same way. - View
- A documented convenience record rather than a stored one. Land the records it stands in for instead of assuming it extracts as-is — the table notes say where the rows actually live.
Structural facts — how the record is partitioned, not a trap by itself
Join & extract hazards — verify before you rely on this
'T'/'F' string.Header & line
transaction is the header for its lines in transactionline.
Record types
The business documents that live in this table. NetSuite stores them all in one table family separated by the type column, so a sales order and an item fulfillment are the same rows under different type values. Oracle publishes no list of those values — read them from your own account with SELECT DISTINCT type FROM transaction.
- Sales Ordersalesorder
Has its own analytics record page, but the queryable rows live on transaction / transactionline filtered by type. Discover the type value in-account with SELECT DISTINCT type.
- Purchase Orderpurchaseorder
As with the sales order: a record page exists, but the data path is transaction / transactionline filtered by type.
- Item Fulfillmentitemfulfillment
No dedicated analytics record — verified absent from the 2021.1 catalog. Query transaction filtered by type; the 2025.2 script browser page is the provenance.
- Item Receiptitemreceipt
No dedicated analytics record — query transaction filtered by type.
- Transfer Ordertransferorder
No dedicated analytics record — query transaction filtered by type. transactionline.transferorderitemlineid is the line-level tie-back.
- Inventory Adjustmentinventoryadjustment
No dedicated analytics record — query transaction filtered by type.
- Quote (Estimate)estimate
The UI calls it a quote; the record id is estimate. First document of the order-to-cash chain, and a row on the transaction spine like every other — discover its type value in-account with SELECT DISTINCT type.
- Invoiceinvoice
Has its own record page, but invoices are rows on the transaction spine. Its line-level tie-back to the order it billed runs through the forward line-link table; see quirks #document-links.
- Cash Salecashsale
The paid-on-the-spot sibling of the invoice — a separate type value on the same spine, so a revenue read that filters only for invoices silently omits it.
- Customer Paymentcustomerpayment
No dedicated analytics record — verified absent from the 2021.1 catalog, so the 2025.2 script browser page is the provenance. Query transaction filtered by type; what the payment applies to is a link, not a column.
- Credit Memocreditmemo
The returns and adjustments side of receivables, on the same spine. Net revenue means netting these against invoices by type — one more reason to hold your own type mapping.
- Return Authorizationreturnauthorization
The customer-return document that precedes the receipt and the credit memo — a spine row that chains back to the original order through the line links.
- Work Orderworkorder
The manufacturing order is a document like any other: a row on the transaction spine, filtered by type. Its BOM and routing are master records of their own, and manufacturingoperationtask is the one record that points back at the order; see quirks #work-orders.
- Assembly Buildassemblybuild
No dedicated analytics record — verified absent from the 2021.1 catalog. The receipt of finished goods from a work order, posted as inventory-affecting lines on the spine, so completions are a spine query rather than a manufacturing table.
- Assembly Unbuildassemblyunbuild
No dedicated analytics record — query transaction filtered by type. It reverses a build, so a completions measure that ignores it overstates output.
- Work Order Issueworkorderissue
No dedicated analytics record — query transaction filtered by type. Component consumption against a work order, which is why material usage is read from transactionline and not from the BOM.
- Work Order Completionworkordercompletion
No dedicated analytics record — query transaction filtered by type. The completion posting in the multi-step manufacturing flow, the counterpart of the single-step assembly build.
- Work Order Closeworkorderclose
No dedicated analytics record — query transaction filtered by type. Closing an order stops further postings against it, so a work-in-process measure needs this document as its end boundary.
- Cash Refundcashrefund
The money-out counterpart of the cash sale, and the paid-on-the-spot sibling of the credit memo — a separate type value on the same spine, so a returns measure built only from credit memos misses it.
- Customer Depositcustomerdeposit
No dedicated analytics record — verified absent from the 2021.1 catalog. Customer cash taken and held before an invoice exists, so it is a liability on the spine rather than revenue; counting it as a receipt against sales overstates both.
- Deposit Applicationdepositapplication
No dedicated analytics record — query transaction filtered by type. The document that draws a held deposit down against an invoice; what it applies to is a link, not a column, so the chain runs through the line links (quirks #document-links).
- Journal Entryjournalentry
No dedicated analytics record — verified absent from the 2021.1 catalog. The manual GL document, and a row on the spine like every other: there is no journal record and no published enumeration of journal types anywhere, so discover the types your account uses in-account with SELECT DISTINCT type, exactly as for every other document.
- Vendor Billvendorbill
The payables counterpart of the invoice — what a purchase order becomes when the vendor asks to be paid. A record page exists, but the rows are on transaction / transactionline filtered by type.
- Vendor Paymentvendorpayment
No dedicated analytics record — verified absent from the 2021.1 catalog. What a payment pays is a link, not a column: the bills it settles are reached through the line links, not by reading a field on the payment.
- Vendor Creditvendorcredit
The payables-side credit memo — the document that reduces what is owed to a vendor. Net spend means netting these against vendor bills by type.
- Checkcheck
A direct disbursement — money out without a bill behind it. It sits on the same spine as the vendor payment and is a different type value, so a cash-out measure needs both.
- Depositdeposit
No dedicated analytics record — verified absent from the 2021.1 catalog. The bank-deposit document that sweeps undeposited funds into an account, which is why cash received and cash banked are two different dates on two different spine rows.
- Vendor Return Authorizationvendorreturnauthorization
The purchase-side return, and the counterpart of the customer return authorization — the document that precedes sending stock back to a vendor and the credit that follows it.
Fields
22 fields · 1 key
22 fields.
| # | Field | Description | Type | Flags |
|---|---|---|---|---|
| 1 | id | Internal ID | NUMBER | Primary-key field |
| 2 | tranid | Document number as printed | VARCHAR | |
| 3 | type | Document type discriminator — values are discoverable in-account only | VARCHAR | |
| 4 | recordtype | Record type as text | VARCHAR | |
| 5 | status | Document status (internal id) | NUMBER | |
| 6 | trandate | Transaction date | DATE | The record's primary analysis date — a real DATE/TIMESTAMP column, no conversion needed |
| 7 | createddate | Date created | TIMESTAMP | |
| 8 | lastmodifieddate | Last modified — the incremental watermark | TIMESTAMP | |
| 9 | duedate | Due date | DATE | |
| 10 | closedate | Date closed | DATE | |
| 11 | entity | Entity on the document (internal id) | NUMBER | |
| 12 | currency | Transaction currency (internal id) | NUMBER | |
| 13 | exchangerate | Exchange rate stamped on the document | NUMBER | |
| 14 | location | Header location (internal id) | NUMBER | |
| 15 | postingperiod | Posting period (internal id) — not the same as trandate | NUMBER | |
| 16 | posting | Document posts to the GL | VARCHAR | |
| 17 | foreigntotal | Document total in TRANSACTION currency — there is no base-currency total here | NUMBER | |
| 18 | memo | Memo | VARCHAR | |
| 19 | terms | Payment terms (internal id) | NUMBER | |
| 20 | paymentmethod | Payment method (internal id) | NUMBER | |
| 21 | shippingaddress | Shipping address key (internal id) — resolves to transactionshippingaddress.nkey | NUMBER | |
| 22 | billingaddress | Billing address key (internal id) — resolves to transactionbillingaddress.nkey | NUMBER |
Field provenance: hand-curated. 1 key field.
Boilerplate SQL
Starting point for reading the Connect-landed copy of transaction on Databricks — dates are real DATE/TIMESTAMP columns and need no conversion, and the partition anchors are already in place. The lastmodifieddate watermark is in place too. Set your Unity Catalog location, schema, and filter values below; they’re substituted into the SQL and the copy button.
7 parameters not filled: <catalog>, <schema>, <type>, <id>, <DATE_FROM>, <DATE_TO>, <watermark>
-- ============================================================
-- Table : transaction — The document header for every transaction type NetSuite records — sales orders, purchase orders, fulfillments, receipts, invoices, journals — separated by the type column rather than by table.
-- Purpose: Column-selected read of transaction — auto-generated from field metadata
-- Grain : One row per id
-- Caution: page-attested by absence: this header carries NO subsidiary column, NO quantity, and NO base-currency or debit/credit amounts. Monetary exposure here is transaction-currency ("foreign") totals only — subsidiary and quantities come from transactionline, base-currency debits and credits from transactionaccountingline. `location` does exist on the header, but it is an optional stamp that is null on most documents — filter location at LINE level, on transactionline.location.
-- Notes : Auto-generated skeleton for NetSuite data landed in your lakehouse from a SuiteAnalytics Connect (or SuiteQL) extract — it never addresses live NetSuite. Identifiers are lowercase as NetSuite2.com renders them. Select-type columns hold numeric internal ids: BUILTIN.DF() display resolution exists only at extraction time, so decode ids by joining the landed list records; see quirks #display-values. Check-box columns arrive as 'T'/'F' strings; see quirks #tf-booleans.
-- ============================================================
SELECT
t.id AS "Internal ID",
t.tranid AS "Document number as printed",
t.type AS "Document type discriminator — values are discoverable in-account only",
t.recordtype AS "Record type as text",
t.status AS "Document status (internal id)",
t.trandate AS "Transaction date",
t.createddate AS "Date created",
t.lastmodifieddate AS "Last modified — the incremental watermark",
t.duedate AS "Due date",
t.closedate AS "Date closed",
t.entity AS "Entity on the document (internal id)",
t.currency AS "Transaction currency (internal id)",
t.exchangerate AS "Exchange rate stamped on the document",
t.location AS "Header location (internal id)",
t.postingperiod AS "Posting period (internal id) — not the same as trandate",
t.posting AS "Document posts to the GL", -- 'T'/'F' string — compare = 'T', or CAST via CASE; see quirks #tf-booleans
t.foreigntotal AS "Document total in TRANSACTION currency — there is no base-currency total here",
t.memo AS "Memo",
t.terms AS "Payment terms (internal id)",
t.paymentmethod AS "Payment method (internal id)",
t.shippingaddress AS "Shipping address key (internal id) — resolves to transactionshippingaddress.nkey",
t.billingaddress AS "Billing address key (internal id) — resolves to transactionbillingaddress.nkey"
FROM <catalog>.<schema>.transaction t
WHERE
1 = 1 -- no partition column on this record; the filters below are optional
-- AND t.type = '<type>' -- discover values in-account: SELECT DISTINCT type
-- AND t.id = <id>
-- AND t.trandate >= DATE '<DATE_FROM>'
-- AND t.trandate <= DATE '<DATE_TO>'
-- AND t.lastmodifieddate >= TIMESTAMP '<watermark>' -- inserts and updates only — deletes never appear here; diff deletedrecord, which is itself blind to line-level deletes (see quirks #deletes)
ORDER BY t.id;Verified August 2026 · Analytics Browser 2021.1 · corroborated 2025.2
Select columns hold internal ids, not display text — see decoding display values.
Relationships
Diagram of 1-hop neighbors — join details below. Document-link edges are highlighted; they chain one document to the next and are the joins newcomers most often get wrong.
Join details
ON transaction.id = transactionline.transactionON transaction.entity = entity.idON transaction.currency = currency.idON transaction.postingperiod = accountingperiod.idON transaction.location = location.idON transactionshipment.doc = transaction.idON transaction.shippingaddress = transactionshippingaddress.nkeyON transaction.billingaddress = transactionbillingaddress.nkeyON transaction.paymentmethod = paymentmethod.idON transaction.terms = term.idON transactionline.createdfrom = transaction.idON nexttransactionlinelink.previousdoc = transaction.idON nexttransactionlinelink.nextdoc = transaction.idON previoustransactionlinelink.previousdoc = transaction.idON previoustransactionlinelink.nextdoc = transaction.idON inventoryassignment.transaction = transaction.idON manufacturingoperationtask.workorder = transaction.id
More Transactions tables
- transactionaccountinglineThe accounting projection of a transaction line: base-currency amount, debit, credit and net, per accounting book, with the GL account and audit-number stamps.
- transactionbillingaddressThe billing address stamped on a document: the same fourteen columns as the shipping twin, keyed by the address key the transaction header's billing pointer resolves to.
- transactionlineThe line grain of the transaction spine: item, quantity, rate and transaction-currency amounts, plus the subsidiary, location, class and department that scope the line.
- transactionshipmentThe shipment satellite of a transaction: ship-from and ship-to addresses, ship method, shipping and handling rates, weight, and whether the shipment has been fulfilled.
- transactionshippingaddressThe shipping address as it was stamped on a document: the formatted block plus the parsed lines, city, state, zip, country and phone, keyed by the address key the transaction header points at.
- nexttransactionlinelinkThe forward line-link table: one row per line-to-line link travelling downstream — a sales-order line to its fulfillment line, a fulfillment line to its invoice line — with the link type and linked amount.