Chapter 9.1

Saved Searches

Master NetSuite's most powerful reporting tool: saved searches with filters, formulas, summarization, and scheduling.

Saved Searches Overview

Saved searches are NetSuite's Swiss Army knife for data retrieval. They power reports, KPIs, portlets, dropdowns, script data sources, and mass updates. Mastering saved searches is essential for any NetSuite implementation.

Use Case Description Example
Reports Ad-hoc and scheduled data retrieval Open invoices by customer
Dashboard Portlets Real-time KPIs and lists Top 10 customers this month
Form Dropdowns Filter available selections Active vendors only
Script Data Sources Query data in SuiteScript Process pending orders
Mass Updates Identify records for bulk changes Inactive customers to archive
Workflows Condition evaluation and transitions Escalate overdue tasks

Search Architecture

SAVED SEARCH STRUCTURE
═══════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────┐
│                     SEARCH DEFINITION                        │
├─────────────────────────────────────────────────────────────┤
│  Record Type:  Transaction, Customer, Item, etc.            │
│  Search Title: Human-readable name                          │
│  Search ID:    customsearch_xxx (for scripting)             │
│  Public:       Available to all roles                       │
│  Audience:     Specific roles/employees                     │
└─────────────────────────────────────────────────────────────┘
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│  CRITERIA   │   │   RESULTS   │   │  AVAILABLE  │
│  (Filters)  │   │  (Columns)  │   │  (Filters)  │
├─────────────┤   ├─────────────┤   ├─────────────┤
│ Standard    │   │ Fields      │   │ User-facing │
│ filters     │   │ Formulas    │   │ filter      │
│ Summary     │   │ Summary     │   │ options at  │
│ type        │   │ functions   │   │ runtime     │
│ Filter      │   │ Sort order  │   │             │
│ expressions │   │ Links       │   │             │
└─────────────┘   └─────────────┘   └─────────────┘
                        

Filter Types

Filter Type Description Example
Standard Simple field comparisons Status = Open
Date Range Relative or absolute dates Created within last 30 days
Is Empty / Not Empty Null value checks Email is not empty
Contains / Starts With Text pattern matching Name contains "Corp"
Any Of / None Of Multi-value selection Type is any of: Invoice, Credit Memo
Formula (Numeric) SQL expression returning number CASE WHEN {amount} > 1000 THEN 1 ELSE 0 END = 1
Formula (Text) SQL expression returning text SUBSTR({tranid}, 1, 3) = 'INV'

Formula Fields

Formula fields use SQL syntax to calculate values. Common functions:

COMMON FORMULA PATTERNS
═══════════════════════════════════════════════════════════════

DATE CALCULATIONS
───────────────────────────────────────────────────────────────
Days Since:      {today} - {trandate}
Days Until Due:  {duedate} - {today}
Month Name:      TO_CHAR({trandate}, 'Month YYYY')
Fiscal Quarter:  'Q' || TO_CHAR({trandate}, 'Q') || ' ' || TO_CHAR({trandate}, 'YYYY')

TEXT MANIPULATION
───────────────────────────────────────────────────────────────
Concatenate:     {firstname} || ' ' || {lastname}
Extract:         SUBSTR({tranid}, 1, 3)
Replace:         REPLACE({phone}, '-', '')
Upper/Lower:     UPPER({name}) / LOWER({email})

CONDITIONAL LOGIC
───────────────────────────────────────────────────────────────
Simple IF:       CASE WHEN {amount} > 0 THEN 'Credit' ELSE 'Debit' END
Nested:          CASE
                   WHEN {daysoverdue} > 90 THEN 'Critical'
                   WHEN {daysoverdue} > 60 THEN 'High'
                   WHEN {daysoverdue} > 30 THEN 'Medium'
                   ELSE 'Current'
                 END
Null Check:      NVL({memo}, 'No memo')
NullIf:          NULLIF({quantity}, 0)

NUMERIC CALCULATIONS
───────────────────────────────────────────────────────────────
Percentage:      ROUND({amount} / NULLIF({total}, 0) * 100, 2)
Running Total:   SUM({amount}) OVER (ORDER BY {trandate})
Absolute:        ABS({amount})
Round:           ROUND({rate}, 2)
                        

Summary Types

Summary searches aggregate data across records:

Summary Function Use Case
Group Group by this field Customer name, Month
Sum Total numeric values Total sales amount
Count Count of records Number of orders
Average Mean value Average order size
Minimum Lowest value First order date
Maximum Highest value Largest invoice

Joins and Related Records

SEARCH JOINS
═══════════════════════════════════════════════════════════════

TRANSACTION SEARCH (Invoice)
│
├── Main Record Fields
│   └── {tranid}, {trandate}, {amount}, {status}
│
├── Customer Join (entity...)
│   └── {entity.companyname}, {entity.email}, {entity.salesrep}
│
├── Item Join (item...)
│   └── {item.displayname}, {item.type}, {item.class}
│
├── Created By Join (createdby...)
│   └── {createdby.entityid}, {createdby.email}
│
├── Applied To Join (appliedtotransaction...)
│   └── {appliedtotransaction.tranid}, {appliedtotransaction.type}
│
└── Custom Record Join (custbody_xxx...)
    └── {custbody_project.custrecord_project_manager}

JOIN NOTATION:
───────────────────────────────────────────────────────────────
{fieldname}              Main record field
{join.fieldname}         Related record field
{join.join2.fieldname}   Nested join (2 levels max)
                        

Performance Optimization

Search Performance Best Practices
  • Use indexed fields in filters: Internal ID, Date, Status, Type
  • Avoid formula filters: Filter first, then calculate
  • Limit result columns: Only include fields you need
  • Use date ranges: Don't search all historical data
  • Avoid "contains" on large text fields: Use "starts with" instead
  • Pre-filter with standard filters: Before applying formulas

Search Scheduling

Option Description
Recipients Employees, groups, or specific email addresses
Schedule Daily, Weekly, Monthly, or specific days
Time Specific time of day (in account timezone)
Format CSV, PDF, or Excel attachment
Send If Empty Option to suppress emails with no results
Consultant Insight

Create a "Saved Search Library" document for each implementation. Include search name, ID, purpose, key filters, and owner. Clients often have hundreds of searches with no documentation—this becomes a maintenance nightmare. Also establish naming conventions: prefix with department or function (e.g., FIN_Open_AP, OPS_Pending_Orders).

Implementation Checklist

Establish search naming conventions
Document search purposes and owners
Set appropriate audience permissions
Test search performance with production data volumes
Configure scheduled email distribution
Train power users on search creation
Chapter 9.2

Reports

Standard reports, Financial Report Builder, and custom report configurations.

Reports Overview

NetSuite provides hundreds of standard reports across all functional areas. Understanding report types and customization options helps deliver the right information to stakeholders.

Report Type Description Examples
Financial Statements GAAP-compliant financial reports Balance Sheet, Income Statement, Cash Flow
Transaction Reports Lists of transactions with details Sales by Customer, A/R Aging, Open POs
Summary Reports Aggregated data by dimension Sales by Item Category, Expenses by Department
Comparative Reports Period-over-period analysis Budget vs. Actual, YoY Comparison
Register Reports Detailed transaction registers General Ledger, A/P Register

Financial Report Builder

The Financial Report Builder creates customized financial statements with full control over row/column structure:

FINANCIAL REPORT STRUCTURE
═══════════════════════════════════════════════════════════════

                    │ Jan 2025  │ Feb 2025  │ Mar 2025  │  Q1 Total │
────────────────────┼───────────┼───────────┼───────────┼───────────┤
REVENUE             │           │           │           │           │
  Product Sales     │  125,000  │  142,000  │  138,000  │   405,000 │
  Service Revenue   │   45,000  │   48,000  │   52,000  │   145,000 │
  Other Income      │    5,000  │    3,500  │    4,200  │    12,700 │
────────────────────┼───────────┼───────────┼───────────┼───────────┤
  TOTAL REVENUE     │  175,000  │  193,500  │  194,200  │   562,700 │
                    │           │           │           │           │
COST OF GOODS SOLD  │           │           │           │           │
  Direct Materials  │   50,000  │   56,800  │   55,200  │   162,000 │
  Direct Labor      │   25,000  │   28,400  │   27,600  │    81,000 │
────────────────────┼───────────┼───────────┼───────────┼───────────┤
  TOTAL COGS        │   75,000  │   85,200  │   82,800  │   243,000 │
                    │           │           │           │           │
GROSS PROFIT        │  100,000  │  108,300  │  111,400  │   319,700 │
  Gross Margin %    │    57.1%  │    56.0%  │    57.4%  │     56.8% │

ROW DEFINITIONS:
───────────────────────────────────────────────────────────────
• Account ranges (4000-4999)
• Account types (Income, Expense)
• Specific accounts
• Calculated rows (formulas)
• Subtotal rows
• Blank/header rows

COLUMN DEFINITIONS:
───────────────────────────────────────────────────────────────
• Date range (absolute or relative)
• Subsidiary/Location/Class/Department
• Budget vs. Actual
• Comparative periods
• Calculated columns (variance, %)
                        

Financial Report Builder Features

Feature Description
Row Layout Define account groups, subtotals, headers, calculated rows
Column Layout Define periods, subsidiaries, dimensions, calculations
Filtering Restrict by subsidiary, location, department, class
Calculated Rows Sum, difference, percentage of other rows
Drill-Down Click amounts to see underlying transactions
Export Excel, PDF, CSV formats

Report Customization

Standard reports can be customized without building from scratch:

1
Run Report
2
Customize
3
Add/Remove
4
Save As

Key Financial Reports

Report Purpose Key Filters
Balance Sheet Assets, liabilities, equity at point in time As of date, subsidiary
Income Statement Revenue and expenses for period Date range, subsidiary, department
Cash Flow Statement Cash movement by activity Date range, subsidiary
Trial Balance All account balances Date range, include zeros
General Ledger Transaction detail by account Account, date range
A/R Aging Outstanding receivables by age As of date, aging periods
A/P Aging Outstanding payables by age As of date, aging periods

Report Scheduling

Schedule reports for automatic distribution:

Setting Options
Frequency Daily, Weekly, Monthly, Quarterly
Format PDF, Excel, CSV
Recipients Employees, roles, email addresses
Subject Line Custom email subject
Financial Reporting Pack

Create a standard "Financial Reporting Pack" for monthly close: Balance Sheet, Income Statement (with budget comparison), Cash Flow, Departmental P&Ls, and Key Metrics. Schedule to distribute on close day +2 to give accounting time to complete close.

Consultant Insight

When building custom financial reports, always start by asking "What decisions will this report inform?" Map report columns to actual business questions. Avoid building 50-column reports when 5 columns answer the real question. Also verify sign conventions—NetSuite shows debits as positive, which confuses users expecting income as positive.

Chapter 9.3

Datasets & Workbooks

SuiteAnalytics Workbook for advanced multi-dataset analysis with pivots and visualizations.

SuiteAnalytics Workbook Overview

SuiteAnalytics Workbook provides a modern, Excel-like analytics experience within NetSuite. It overcomes many saved search limitations with multi-dataset joins, advanced pivoting, and rich visualizations.

Feature Saved Searches SuiteAnalytics Workbook
Data Sources Single record type with joins Multiple datasets with joins
Joins 2 levels maximum Unlimited dataset joins
Pivoting Basic summary grouping Full pivot table functionality
Visualizations Highlighting only Charts, graphs, conditional formatting
Interactivity Limited Drill-down, slice and dice
Performance Can be slow with complexity Optimized for large datasets

Workbook Architecture

WORKBOOK STRUCTURE
═══════════════════════════════════════════════════════════════

WORKBOOK
├── DATA
│   ├── Dataset 1: Transactions
│   │   ├── Fields: Date, Amount, Customer, Item
│   │   └── Filters: Date range, Status
│   │
│   ├── Dataset 2: Customers
│   │   ├── Fields: Name, Industry, Sales Rep
│   │   └── Filters: Active only
│   │
│   └── Joins
│       └── Transactions.Customer = Customers.ID
│
├── PIVOT TABLES
│   ├── Pivot 1: Sales by Month x Customer
│   └── Pivot 2: Sales by Item Category x Region
│
├── CHARTS
│   ├── Chart 1: Monthly Trend Line
│   ├── Chart 2: Top 10 Customers Bar
│   └── Chart 3: Category Pie Chart
│
└── TABLES
    └── Table 1: Transaction Detail List
                        

Dataset Creation

Dataset Components

Component Description
Record Type Primary record (Transaction, Customer, Item, etc.)
Fields Columns to include in dataset
Formulas Calculated fields using SQL expressions
Criteria Filters to restrict records
Joins Related records to include

Pivot Tables

Pivot tables summarize large datasets dynamically:

PIVOT TABLE EXAMPLE
═══════════════════════════════════════════════════════════════

CONFIGURATION:
  Rows:     Customer Industry
  Columns:  Fiscal Quarter
  Values:   Sum of Amount, Count of Transactions
  Filters:  Year = 2025

RESULT:
───────────────────────────────────────────────────────────────
                │    Q1 2025    │    Q2 2025    │    Q3 2025    │
Industry        │ Amount  Count │ Amount  Count │ Amount  Count │
────────────────┼───────────────┼───────────────┼───────────────┤
Manufacturing   │ $425K    142  │ $512K    168  │ $489K    155  │
Retail          │ $312K    287  │ $398K    324  │ $445K    356  │
Services        │ $189K     67  │ $223K     78  │ $256K     89  │
Technology      │ $567K     45  │ $623K     52  │ $701K     58  │
────────────────┼───────────────┼───────────────┼───────────────┤
Grand Total     │ $1.49M   541  │ $1.76M   622  │ $1.89M   658  │
                        

Visualizations

Chart Type Best For Example
Line Chart Trends over time Monthly revenue trend
Bar Chart Category comparison Sales by region
Pie/Donut Part-to-whole Revenue by product line
Area Chart Cumulative trends Cumulative bookings
Scatter Plot Correlation Spend vs. revenue
Table Detailed data Transaction list with totals

Multi-Dataset Joins

DATASET JOIN EXAMPLE
═══════════════════════════════════════════════════════════════

USE CASE: Customer Profitability Analysis

Dataset 1: Invoices
  └── Customer ID, Invoice Amount, Invoice Date

Dataset 2: Payments
  └── Customer ID, Payment Amount, Payment Date

Dataset 3: Support Cases
  └── Customer ID, Case Count, Resolution Hours

Dataset 4: Customers
  └── Customer ID, Name, Industry, Acquisition Date

JOINS:
───────────────────────────────────────────────────────────────
  Invoices.Customer  ──►  Customers.ID
  Payments.Customer  ──►  Customers.ID
  Cases.Customer     ──►  Customers.ID

RESULT: Single view with revenue, collections, and support cost
        by customer—impossible in a single saved search!
                        
Dataset Reusability

Create reusable datasets for common analysis needs: "Core Transaction Dataset," "Customer Master Dataset," "Item Catalog Dataset." Multiple workbooks can reference the same dataset, ensuring consistency and reducing maintenance.

Consultant Insight

SuiteAnalytics Workbook is the future of NetSuite reporting. Start moving power users from complex saved searches to workbooks. The learning curve is minimal for anyone with Excel pivot table experience. Key advantage: workbooks let you ask follow-up questions (slice, filter, drill) without creating new searches.

Chapter 9.4

Analytics Warehouse (NSAW)

NetSuite Analytics Warehouse for enterprise-grade BI, cross-subsidiary reporting, and advanced analytics.

Analytics Warehouse Overview

NetSuite Analytics Warehouse (NSAW) is a cloud data warehouse that replicates NetSuite data for advanced analytics. It enables enterprise BI capabilities without impacting transactional system performance.

Capability Standard NetSuite Analytics Warehouse
Query Performance Shares production resources Dedicated warehouse
Historical Data Limited by retention Extended history
Cross-Subsidiary Complex setup required Pre-built consolidation
External Data Requires integration Native data blending
BI Tool Access SuiteAnalytics Connect Direct warehouse access
Pre-built Analytics Standard reports only Industry analytics packs

NSAW Architecture

ANALYTICS WAREHOUSE ARCHITECTURE
═══════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────┐
│                    NETSUITE ERP                              │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ Transactions│ │  Customers  │ │    Items    │            │
│  └──────┬──────┘ └──────┬──────┘ └──────┬──────┘            │
└─────────┼───────────────┼───────────────┼───────────────────┘
          │               │               │
          ▼               ▼               ▼
┌─────────────────────────────────────────────────────────────┐
│               DATA REPLICATION (Near Real-Time)              │
└─────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│              ANALYTICS WAREHOUSE (NSAW)                      │
│  ┌─────────────────────────────────────────────────────────┐│
│  │              PRE-BUILT DATA MODELS                       ││
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐       ││
│  │  │Financial│ │  Sales  │ │Procure- │ │Inventory│       ││
│  │  │   Cube  │ │   Cube  │ │ment Cube│ │   Cube  │       ││
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘       ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │              ANALYTICS INTERFACE                         ││
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐                   ││
│  │  │Dashboard│ │ Reports │ │  Query  │                   ││
│  │  │ Builder │ │ Builder │ │  Direct │                   ││
│  │  └─────────┘ └─────────┘ └─────────┘                   ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
          │               │               │
          ▼               ▼               ▼
┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│  Embedded   │   │  External   │   │   Export    │
│  Dashboards │   │   BI Tools  │   │   (Excel)   │
└─────────────┘   └─────────────┘   └─────────────┘
                        

Pre-Built Analytics

NSAW includes ready-to-use analytics for common business needs:

Analytics Pack Key Metrics
Financial Analytics P&L trends, balance sheet analysis, cash flow, working capital
Sales Analytics Pipeline analysis, win/loss, sales cycle, rep performance
Procurement Analytics Spend analysis, vendor performance, PO cycle time
Inventory Analytics Turns, aging, stockouts, demand planning
Revenue Analytics ARR/MRR trends, churn, cohort analysis
Contextual Insights (2025.2)

NSAW now provides AI-powered contextual insights that automatically surface anomalies, trends, and recommendations. The system learns from your data patterns and proactively highlights items requiring attention—like a significant variance from last month or unusual transaction patterns.

Dashboard Builder

Create executive dashboards with drag-and-drop interface:

EXECUTIVE DASHBOARD EXAMPLE
═══════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────┐
│                    CEO DASHBOARD                             │
├──────────────────────────┬──────────────────────────────────┤
│   REVENUE YTD            │   GROSS MARGIN TREND             │
│   ┌─────────────────┐    │   ┌─────────────────────────────┐│
│   │                 │    │   │    ╭──────╮                 ││
│   │   $12.4M        │    │   │ ───╯      ╰───              ││
│   │   ▲ 15% vs LY   │    │   │                             ││
│   │                 │    │   │  Jan Feb Mar Apr May Jun    ││
│   └─────────────────┘    │   └─────────────────────────────┘│
├──────────────────────────┼──────────────────────────────────┤
│   TOP 10 CUSTOMERS       │   SALES BY REGION                │
│   ┌─────────────────┐    │   ┌─────────────────────────────┐│
│   │ Acme Corp  $2.1M│    │   │     ████ West 35%          ││
│   │ Beta Inc   $1.8M│    │   │     ████ East 28%          ││
│   │ Gamma LLC  $1.2M│    │   │     ████ Central 22%       ││
│   │ ...            │    │   │     ████ International 15%  ││
│   └─────────────────┘    │   └─────────────────────────────┘│
├──────────────────────────┴──────────────────────────────────┤
│   MONTHLY REVENUE TREND                                      │
│   ┌─────────────────────────────────────────────────────────┐│
│   │         ╭─────╮                                         ││
│   │    ╭────╯     ╰────╮        ╭─────                      ││
│   │ ───╯               ╰────────╯                           ││
│   │  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct       ││
│   └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
                        

When to Use NSAW

NSAW Use Cases
  • Complex multi-subsidiary reporting: Consolidated views across all entities
  • Executive dashboards: Real-time KPIs without performance impact
  • Historical trend analysis: Multi-year comparisons
  • External BI integration: Feed Tableau, Power BI, Looker
  • Ad-hoc analysis: Self-service analytics for business users
Consultant Insight

NSAW is an add-on license—factor this into implementation budgets. It's most valuable for organizations with 3+ subsidiaries, heavy reporting needs, or existing BI tool investments. For simpler needs, SuiteAnalytics Workbook may suffice. The 2025.2 Contextual Insights feature significantly increases value by reducing time spent hunting for important variances.

Chapter 9.5

SuiteAnalytics Connect

ODBC/JDBC connectivity and SuiteQL for external BI tools and custom data extraction.

SuiteAnalytics Connect Overview

SuiteAnalytics Connect provides direct database-style access to NetSuite data via ODBC/JDBC drivers, enabling integration with external BI tools, custom applications, and advanced SQL queries.

Access Method Use Case Tools
ODBC Driver Windows-based BI tools Excel, Power BI, Tableau (Windows)
JDBC Driver Java-based applications Custom apps, Java BI tools
SuiteQL SQL queries via REST Any HTTP client, SuiteScript

Connection Architecture

SUITEANALYTICS CONNECT ARCHITECTURE
═══════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────┐
│                    EXTERNAL TOOLS                            │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐        │
│  │  Excel  │  │Power BI │  │ Tableau │  │ Custom  │        │
│  │         │  │         │  │         │  │   App   │        │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘        │
└───────┼────────────┼────────────┼────────────┼──────────────┘
        │            │            │            │
        ▼            ▼            ▼            ▼
┌─────────────────────────────────────────────────────────────┐
│              SUITEANALYTICS CONNECT                          │
│  ┌─────────────────────────┐  ┌─────────────────────────┐   │
│  │      ODBC/JDBC          │  │       SuiteQL           │   │
│  │       Drivers           │  │       REST API          │   │
│  └───────────┬─────────────┘  └───────────┬─────────────┘   │
│              │                            │                  │
│              ▼                            ▼                  │
│  ┌─────────────────────────────────────────────────────────┐│
│  │              CONNECT SERVICE                             ││
│  │  • Authentication (Token-based)                         ││
│  │  • Query Processing                                      ││
│  │  • Role-based Data Access                                ││
│  │  • Governance Limits                                     ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                    NETSUITE DATA                             │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ Transactions│ │  Entities   │ │    Items    │            │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
└─────────────────────────────────────────────────────────────┘
                        

SuiteQL

SuiteQL is NetSuite's SQL-like query language for direct data access:

SUITEQL EXAMPLES
═══════════════════════════════════════════════════════════════

BASIC SELECT
───────────────────────────────────────────────────────────────
SELECT
    t.tranid,
    t.trandate,
    e.companyname AS customer,
    t.foreigntotal AS amount
FROM
    transaction t
    JOIN entity e ON t.entity = e.id
WHERE
    t.type = 'CustInvc'
    AND t.trandate >= TO_DATE('2025-01-01', 'YYYY-MM-DD')
ORDER BY
    t.trandate DESC

AGGREGATION
───────────────────────────────────────────────────────────────
SELECT
    TO_CHAR(t.trandate, 'YYYY-MM') AS month,
    COUNT(*) AS invoice_count,
    SUM(t.foreigntotal) AS total_amount,
    AVG(t.foreigntotal) AS avg_amount
FROM
    transaction t
WHERE
    t.type = 'CustInvc'
    AND t.trandate >= ADD_MONTHS(SYSDATE, -12)
GROUP BY
    TO_CHAR(t.trandate, 'YYYY-MM')
ORDER BY
    month

JOIN MULTIPLE TABLES
───────────────────────────────────────────────────────────────
SELECT
    c.companyname,
    c.email,
    COUNT(t.id) AS order_count,
    SUM(t.foreigntotal) AS lifetime_value,
    MAX(t.trandate) AS last_order_date
FROM
    customer c
    LEFT JOIN transaction t ON c.id = t.entity
        AND t.type = 'SalesOrd'
GROUP BY
    c.id, c.companyname, c.email
HAVING
    SUM(t.foreigntotal) > 10000
ORDER BY
    lifetime_value DESC
                        

ODBC Setup

Configure ODBC connection for external tools:

Step Action
1. Download Driver Get ODBC driver from NetSuite (Setup → Company → Enable Features)
2. Install Driver Run installer on client machine
3. Configure DSN Create Data Source Name in ODBC Administrator
4. Set Credentials Account ID, Role ID, Email, Password (or token)
5. Test Connection Verify connectivity before using in tools

Governance & Limits

Connect Governance
  • Concurrent queries: Limited per account (typically 5-10)
  • Query timeout: Long-running queries may be terminated
  • Row limits: Large result sets may be paginated
  • Schedule off-peak: Heavy queries should run during low-usage periods
  • Role permissions: Connect respects role-based data access

Common Use Cases

Use Case Tool Approach
Executive Dashboards Power BI / Tableau Scheduled refresh from saved queries
Financial Modeling Excel ODBC connection with pivot tables
Data Warehouse ETL Custom/ETL Tools SuiteQL extracts via REST API
Custom Applications Web Apps JDBC or REST/SuiteQL integration
Consultant Insight

SuiteAnalytics Connect is often the answer when clients say "We need to get data into [BI tool]." Start with SuiteQL for prototyping—it's faster to iterate than ODBC setup. For production dashboards, consider whether real-time is truly needed; often a nightly extract to a data warehouse provides better performance and doesn't consume NetSuite resources during business hours.

Chapter 9.6

Industry Reporting

Industry-specific KPIs, metrics, and reporting requirements.

Industry KPI Overview

Different industries focus on different metrics. Understanding industry-specific KPIs helps build relevant dashboards and reports that drive business decisions.

Manufacturing KPIs
KPI Formula Target
Inventory Turns COGS / Average Inventory 4-8x annually
Days Sales in Inventory 365 / Inventory Turns 45-90 days
Gross Margin % (Revenue - COGS) / Revenue 25-40%
On-Time Delivery Orders Shipped On Time / Total Orders >95%
Production Variance Actual Cost - Standard Cost <5%
Scrap Rate Scrap Value / Production Value <2%
Wholesale/Distribution KPIs
KPI Formula Target
Gross Margin Return on Inventory Gross Margin $ / Average Inventory >200%
Fill Rate Lines Shipped Complete / Lines Ordered >98%
Order Cycle Time Ship Date - Order Date <2 days
Backorder Rate Backorder Lines / Total Lines <2%
Revenue per Employee Total Revenue / FTE Count $500K+
Software/SaaS KPIs
KPI Formula Target
Monthly Recurring Revenue Sum of monthly subscription fees Growing
Annual Recurring Revenue MRR × 12 Growing
Customer Churn Rate Lost Customers / Starting Customers <5% annually
Net Revenue Retention (Starting ARR + Expansion - Churn) / Starting ARR >110%
Customer Acquisition Cost Sales & Marketing Spend / New Customers Varies
LTV:CAC Ratio Customer Lifetime Value / CAC >3:1
Professional Services KPIs
KPI Formula Target
Utilization Rate Billable Hours / Available Hours 70-80%
Realization Rate Billed Amount / (Hours × Standard Rate) >90%
Revenue per Consultant Total Revenue / Consultant FTE $200-400K
Project Margin (Revenue - Direct Costs) / Revenue 30-50%
Backlog Contracted but undelivered revenue 3-6 months
Nonprofit KPIs
KPI Formula Target
Program Expense Ratio Program Expenses / Total Expenses >75%
Fundraising Efficiency Funds Raised / Fundraising Costs >4:1
Donor Retention Rate Repeat Donors / Prior Year Donors >45%
Grant Utilization Grant Spent / Grant Received Per terms
Operating Reserve Ratio Unrestricted Net Assets / Annual Expenses 3-6 months
Healthcare KPIs
KPI Formula Target
Days in A/R A/R Balance / (Annual Revenue / 365) <40 days
Collection Rate Payments Collected / Charges >95%
Denial Rate Claims Denied / Claims Submitted <5%
Bad Debt % Bad Debt / Gross Revenue <2%
Cost per Encounter Total Costs / Patient Encounters Varies

Building Industry Dashboards

DASHBOARD DESIGN FRAMEWORK
═══════════════════════════════════════════════════════════════

1. IDENTIFY KEY QUESTIONS
   └── What decisions does this dashboard inform?

2. SELECT METRICS (5-7 MAX)
   ├── Leading indicators (predict future)
   └── Lagging indicators (measure past)

3. DEFINE DATA SOURCES
   ├── Saved searches for real-time
   ├── Workbooks for analysis
   └── NSAW for historical trends

4. DESIGN LAYOUT
   ├── Big numbers for KPIs
   ├── Trends for patterns
   └── Tables for details

5. SET REFRESH CADENCE
   ├── Real-time for operational
   ├── Daily for management
   └── Weekly/Monthly for executive

6. CONFIGURE ALERTS
   └── Threshold-based notifications
                        
Consultant Insight

The best KPI dashboards answer "So what?" Every metric should drive action. If a metric goes red, users should know exactly what to do. During discovery, ask stakeholders: "If this number changed significantly, what would you do differently?" If they can't answer, the metric may not belong on the dashboard.

Implementation Checklist

Identify industry-specific KPIs with stakeholders
Map KPIs to NetSuite data sources
Build saved searches for each metric
Create role-specific dashboards
Configure scheduled report distribution
Set up exception alerts for critical metrics
Document metric definitions and calculations
Train users on dashboard interpretation
Chapter 9.7

NetSuite Analytics Warehouse (NSAW) Deep Dive

Master the enterprise analytics platform that transforms NetSuite data into strategic insights. Learn architecture, data modeling, performance optimization, and advanced query techniques.

NSAW Architecture Overview

NETSUITE ANALYTICS WAREHOUSE ARCHITECTURE
═══════════════════════════════════════════════════════════════════

    NETSUITE ERP                              NSAW (Oracle Cloud)
┌───────────────────┐                    ┌────────────────────────────┐
│ Transaction Data  │                    │  DIMENSIONAL DATA MODEL    │
│  - Sales Orders   │   ETL Pipeline     │  ┌──────────────────────┐  │
│  - Invoices       │ ─────────────────→ │  │ FACT TABLES          │  │
│  - Payments       │   (Nightly Sync)   │  │  - Transaction Lines │  │
│  - Inventory      │                    │  │  - GL Journal Lines  │  │
│                   │                    │  │  - Item Fulfillments │  │
│ Master Data       │                    │  └──────────────────────┘  │
│  - Customers      │                    │  ┌──────────────────────┐  │
│  - Items          │                    │  │ DIMENSION TABLES     │  │
│  - Vendors        │                    │  │  - Customer_Dim      │  │
│  - Employees      │                    │  │  - Item_Dim          │  │
└───────────────────┘                    │  │  - Time_Dim          │  │
                                         │  │  - Location_Dim      │  │
                                         │  └──────────────────────┘  │
                                         │                            │
                                         │  QUERY ENGINE              │
                                         │  - Oracle Analytics Cloud  │
                                         │  - SQL Interface           │
                                         │  - BI Publisher            │
                                         └────────────────────────────┘

KEY CHARACTERISTICS:
• Data refresh: Nightly (typically 2-4 AM account time zone)
• Latency: T-1 (yesterday's data by morning)
• Retention: Historical data preserved indefinitely
• Scale: Billions of rows supported
• Access: SQL, Workbooks, Connect, REST API
                        

Enabling NSAW

PATH: Setup → Company → Enable Features → Analytics

Requirements:
  □ NetSuite Analytics Warehouse SKU purchased
  □ Administrator role for initial setup
  □ Data sync must complete (24-48 hours initial load)

Feature Checkbox:
  ☑ NetSuite Analytics Warehouse

Post-Enable Steps:
  1. Wait for initial data sync (check status in Setup → Analytics)
  2. Configure data retention policies
  3. Set up user access (Analytics role permissions)
  4. Review default subject areas

Status Check:
  Path: Setup → Analytics → SuiteAnalytics Warehouse → Sync Status

  Status: ✓ Sync Complete
  Last Sync: 2024-12-10 03:42:15
  Records Synced: 12,847,293
  Next Scheduled: 2024-12-11 02:00:00
                        

NSAW Subject Areas

NSAW organizes data into pre-built subject areas for common analytics needs.

Subject Area Primary Facts Key Dimensions Use Cases
Transaction Lines Amount, Quantity, Rate Item, Customer, Date, Location Sales analysis, margin reports
GL Journal Lines Debit, Credit, Amount Account, Period, Department, Class Financial reporting, trial balance
Inventory Balance On Hand, Available, On Order Item, Location, Bin Stock analysis, reorder planning
A/R Aging Balance, Days Outstanding Customer, Invoice, Aging Bucket Collections, credit risk
A/P Aging Balance, Days Outstanding Vendor, Bill, Aging Bucket Cash management, vendor payments
Budget Budget Amount Account, Period, Department Budget vs actual, variance
Time Tracking Hours, Billable Amount Employee, Customer, Project Utilization, project costing

SQL Query Patterns

NSAW supports standard SQL via SuiteAnalytics Connect. Here are essential query patterns:

Pattern 1: Sales Trend Analysis

-- Monthly Sales by Customer Segment
SELECT
    TO_CHAR(t.trandate, 'YYYY-MM') AS month,
    c.category AS customer_segment,
    SUM(tl.netamount) AS revenue,
    COUNT(DISTINCT t.id) AS order_count,
    COUNT(DISTINCT t.entity) AS unique_customers
FROM
    transaction t
    JOIN transactionline tl ON t.id = tl.transaction
    JOIN customer c ON t.entity = c.id
WHERE
    t.type = 'SalesOrd'
    AND t.trandate >= ADD_MONTHS(SYSDATE, -12)
    AND tl.mainline = 'F'
GROUP BY
    TO_CHAR(t.trandate, 'YYYY-MM'),
    c.category
ORDER BY
    month, revenue DESC;
                        

Pattern 2: Inventory Turnover

-- Inventory Turnover by Product Category
WITH cogs AS (
    SELECT
        i.custitem_category AS category,
        SUM(tl.costestimate) AS total_cogs
    FROM
        transactionline tl
        JOIN item i ON tl.item = i.id
        JOIN transaction t ON tl.transaction = t.id
    WHERE
        t.type IN ('CustInvc', 'CashSale')
        AND t.trandate BETWEEN
            ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12)
            AND TRUNC(SYSDATE, 'YEAR') - 1
        AND tl.mainline = 'F'
    GROUP BY i.custitem_category
),
avg_inventory AS (
    SELECT
        i.custitem_category AS category,
        AVG(ib.quantityonhand * i.averagecost) AS avg_inv_value
    FROM
        inventorybalance ib
        JOIN item i ON ib.item = i.id
    GROUP BY i.custitem_category
)
SELECT
    c.category,
    c.total_cogs,
    ai.avg_inv_value,
    ROUND(c.total_cogs / NULLIF(ai.avg_inv_value, 0), 2) AS turnover_ratio,
    ROUND(365 / NULLIF(c.total_cogs / ai.avg_inv_value, 0), 1) AS days_on_hand
FROM
    cogs c
    JOIN avg_inventory ai ON c.category = ai.category
ORDER BY
    turnover_ratio DESC;
                        

Pattern 3: Customer Lifetime Value

-- Customer LTV with Cohort Analysis
WITH first_purchase AS (
    SELECT
        entity,
        MIN(trandate) AS first_order_date,
        TO_CHAR(MIN(trandate), 'YYYY-Q') AS cohort
    FROM transaction
    WHERE type IN ('SalesOrd', 'CustInvc')
    GROUP BY entity
),
customer_revenue AS (
    SELECT
        t.entity,
        fp.cohort,
        fp.first_order_date,
        SUM(t.foreigntotal) AS total_revenue,
        COUNT(DISTINCT t.id) AS order_count,
        MAX(t.trandate) AS last_order_date,
        ROUND(MONTHS_BETWEEN(MAX(t.trandate), fp.first_order_date)) AS tenure_months
    FROM
        transaction t
        JOIN first_purchase fp ON t.entity = fp.entity
    WHERE
        t.type IN ('SalesOrd', 'CustInvc')
    GROUP BY
        t.entity, fp.cohort, fp.first_order_date
)
SELECT
    cohort,
    COUNT(*) AS customers,
    ROUND(AVG(total_revenue), 2) AS avg_ltv,
    ROUND(AVG(order_count), 1) AS avg_orders,
    ROUND(AVG(tenure_months), 1) AS avg_tenure_months,
    ROUND(SUM(total_revenue), 0) AS cohort_total_revenue
FROM customer_revenue
GROUP BY cohort
ORDER BY cohort;
                        

Performance Optimization

Technique Implementation Impact
Filter Early Apply WHERE clauses before JOINs Reduce rows processed by 50-90%
Date Partitioning Always filter on trandate or period Leverage partition pruning
Select Specific Columns Avoid SELECT *; list needed columns Reduce I/O by 60-80%
Use Summary Tables Pre-aggregate for common queries 10-100x faster for dashboards
Limit Result Sets Use FETCH FIRST n ROWS Faster response for exploration
Avoid Functions on Indexed Columns Use range filters instead of TO_CHAR Enable index usage
QUERY OPTIMIZATION EXAMPLE
═══════════════════════════════════════════════════════════════════

❌ SLOW: Function on indexed column
SELECT * FROM transaction
WHERE TO_CHAR(trandate, 'YYYY') = '2024';

✓ FAST: Range filter
SELECT * FROM transaction
WHERE trandate >= DATE '2024-01-01'
  AND trandate < DATE '2025-01-01';

❌ SLOW: SELECT *
SELECT * FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id;

✓ FAST: Specific columns
SELECT t.tranid, t.trandate, tl.item, tl.quantity, tl.amount
FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id;

❌ SLOW: Late filtering
SELECT ... FROM large_table
JOIN another_table ON ...
WHERE large_table.date > SYSDATE - 30;

✓ FAST: Filter in subquery
SELECT ... FROM (
    SELECT * FROM large_table WHERE date > SYSDATE - 30
) filtered
JOIN another_table ON ...;
                        

NSAW vs Other Analytics Tools

Capability Saved Searches Workbooks NSAW
Data Freshness Real-time Real-time T-1 (nightly sync)
Historical Depth Current data only Current data only Years of history
Query Complexity Limited joins Multi-dataset Full SQL capability
Performance at Scale Degrades >100K rows Good to 1M rows Billions of rows
External BI Tools CSV export only Limited JDBC/ODBC native
Best For Operational reports Self-service analytics Strategic analytics
Consultant Insight

NSAW is essential for organizations that need trend analysis beyond the current period. The T-1 latency makes it unsuitable for operational dashboards, but it's the only NetSuite-native option for multi-year trend analysis, cohort tracking, or feeding external BI tools like Tableau, Power BI, or Looker. Budget 24-48 hours for initial sync before UAT.

Chapter 9.8

SuiteAnalytics Workbook Mastery

Advanced techniques for building powerful self-service analytics with datasets, calculated fields, pivots, and charts. Learn to create interactive analytical tools for business users.

Workbook Architecture

WORKBOOK COMPONENT HIERARCHY
═══════════════════════════════════════════════════════════════════

WORKBOOK
│
├── DATASETS (data sources)
│   ├── Primary Dataset (required)
│   │   ├── Record Type (Transaction, Customer, etc.)
│   │   ├── Criteria (filters)
│   │   └── Fields
│   │
│   └── Linked Datasets (optional)
│       └── Join conditions to primary
│
├── DATA DEFINITIONS
│   ├── Calculated Fields (formulas)
│   ├── Groupings (hierarchies)
│   └── Filters (user parameters)
│
└── VISUALIZATIONS
    ├── Tables (raw data view)
    ├── Pivot Tables (aggregations)
    ├── Charts (bar, line, pie, etc.)
    └── KPI Tiles (single metrics)

EXECUTION FLOW:
Datasets → Apply Criteria → Calculate Fields →
Group/Aggregate → Filter → Render Visualization
                        

Dataset Design Patterns

Pattern 1: Transaction Analysis Dataset

DATASET: Sales Transaction Analysis
═══════════════════════════════════════════════════════════════════

Record Type: Transaction

Criteria:
  Type: is any of [Sales Order, Invoice, Cash Sale]
  Main Line: is false
  Date: within last 365 days

Fields:
  DIMENSIONS                      MEASURES
  ├── Transaction > Date          ├── Amount
  ├── Transaction > Document #    ├── Quantity
  ├── Customer > Name             ├── Cost
  ├── Customer > Category         ├── Tax Amount
  ├── Item > Name                 └── Foreign Amount
  ├── Item > Type
  ├── Location > Name
  ├── Department > Name
  └── Class > Name

Join Pattern:
  Transaction (main)
    └── Customer (entity field)
    └── Item (item field)
    └── Location (location field)
                        

Pattern 2: Multi-Dataset Customer 360

DATASET: Customer 360 View
═══════════════════════════════════════════════════════════════════

Primary Dataset: Customer
  Record Type: Customer
  Fields: ID, Name, Category, Sales Rep, Date Created

Linked Dataset 1: Sales History
  Record Type: Transaction
  Join: Transaction.Entity = Customer.ID
  Criteria: Type in [Invoice, Cash Sale], Date > 1 year ago
  Fields: SUM(Amount) as Total Revenue, COUNT(*) as Order Count

Linked Dataset 2: Open A/R
  Record Type: Transaction
  Join: Transaction.Entity = Customer.ID
  Criteria: Type = Invoice, Status = Open
  Fields: SUM(Amount Due) as Open Balance, MAX(Days Overdue)

Linked Dataset 3: Support Cases
  Record Type: Support Case
  Join: Case.Company = Customer.ID
  Fields: COUNT(*) as Case Count, COUNT(Open) as Open Cases

Result: Single row per customer with aggregated metrics
                        

Calculated Field Formulas

Use Case Formula Notes
Gross Margin % ({amount} - {cost}) / {amount} * 100 Handle divide by zero
Year-over-Year ({current_year} - {prior_year}) / {prior_year} * 100 Requires date grouping
Running Total SUM({amount}) OVER (ORDER BY {date}) Window function
Rank RANK() OVER (PARTITION BY {category} ORDER BY {amount} DESC) Within groups
Days Between DATEDIFF({end_date}, {start_date}) Date arithmetic
Fiscal Period CONCAT('FY', SUBSTR({posting_period}, 1, 4), '-Q', CEIL(MONTH({date})/3)) Custom periods

Advanced Formula Examples

CALCULATED FIELD EXAMPLES
═══════════════════════════════════════════════════════════════════

-- Customer Tier Based on Revenue
CASE
    WHEN {total_revenue} >= 100000 THEN 'Enterprise'
    WHEN {total_revenue} >= 50000 THEN 'Mid-Market'
    WHEN {total_revenue} >= 10000 THEN 'SMB'
    ELSE 'Starter'
END

-- Aging Bucket
CASE
    WHEN {days_overdue} <= 0 THEN 'Current'
    WHEN {days_overdue} <= 30 THEN '1-30 Days'
    WHEN {days_overdue} <= 60 THEN '31-60 Days'
    WHEN {days_overdue} <= 90 THEN '61-90 Days'
    ELSE '90+ Days'
END

-- Percentage of Total (within group)
{amount} / SUM({amount}) OVER (PARTITION BY {category}) * 100

-- Moving Average (3 periods)
AVG({amount}) OVER (
    ORDER BY {date}
    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)

-- First Purchase Flag
CASE
    WHEN {date} = MIN({date}) OVER (PARTITION BY {customer})
    THEN 'First Order'
    ELSE 'Repeat'
END

-- Contribution Margin
{amount} - {variable_cost} - ({amount} * {commission_rate})
                        

Pivot Table Techniques

PIVOT TABLE CONFIGURATION
═══════════════════════════════════════════════════════════════════

EXAMPLE: Sales by Region and Product Category

ROWS (Dimensions):
  Level 1: Region
  Level 2: Sales Rep

COLUMNS (Time/Category):
  Level 1: Fiscal Year
  Level 2: Fiscal Quarter

VALUES (Measures):
  □ Revenue: SUM(Amount)
  □ Margin: SUM(Amount - Cost)
  □ Margin %: (SUM(Amount) - SUM(Cost)) / SUM(Amount)
  □ Order Count: COUNT(DISTINCT Transaction ID)

Result Layout:
┌────────────────────────────────────────────────────────────────┐
│                    │   FY2024                │   FY2025       │
│                    │  Q1  │  Q2  │  Q3  │  Q4  │  Q1  │  Q2  │
├────────────────────┼──────┼──────┼──────┼──────┼──────┼──────┤
│ West Region        │      │      │      │      │      │      │
│   ├── John Smith   │ 125K │ 142K │ 138K │ 165K │ 155K │ 172K │
│   └── Jane Doe     │  98K │ 105K │ 112K │ 128K │ 135K │ 141K │
│ East Region        │      │      │      │      │      │      │
│   ├── Bob Wilson   │ 145K │ 158K │ 162K │ 175K │ 168K │ 182K │
│   └── ...          │      │      │      │      │      │      │
├────────────────────┼──────┼──────┼──────┼──────┼──────┼──────┤
│ Grand Total        │ 856K │ 924K │ 967K │1.2M  │1.1M  │1.3M  │
└────────────────────────────────────────────────────────────────┘

PIVOT OPTIONS:
  ☑ Show row totals
  ☑ Show column totals
  ☑ Show % of total
  ☐ Show variance
  ☑ Conditional formatting (heat map)
                        

Chart Types and Best Practices

Chart Type Best For Avoid When
Bar Chart Comparing categories, rankings >12 categories, time series
Line Chart Trends over time, continuous data Categorical comparisons
Pie/Donut Part-to-whole (2-5 segments) >5 segments, comparing sizes
Stacked Bar Composition over categories Comparing individual segments
Area Chart Cumulative values, volume Precise value comparison
Scatter Plot Correlation, distribution Few data points, categories
KPI Tile Single critical metric Multiple related metrics

Workbook Performance Optimization

PERFORMANCE CHECKLIST
═══════════════════════════════════════════════════════════════════

□ LIMIT DATE RANGE
  - Default to 90 days or current quarter
  - Provide date filter for users to expand

□ FILTER RECORD TYPES
  - Only include needed transaction types
  - Use Main Line = false for line details

□ SELECT ONLY NEEDED FIELDS
  - Don't add fields "just in case"
  - Each field increases query size

□ USE CRITERIA vs FILTERS
  - Criteria: Applied at data load (faster)
  - Filters: Applied at render (flexible but slower)

□ LIMIT LINKED DATASETS
  - Each link = additional query
  - Pre-aggregate where possible

□ OPTIMIZE CALCULATED FIELDS
  - Simple math > complex CASE statements
  - Avoid nested window functions

□ TEST WITH PRODUCTION DATA VOLUMES
  - Sandbox may have less data
  - Test with 100K+ rows

TYPICAL PERFORMANCE TARGETS:
  < 5 seconds: Excellent
  5-15 seconds: Acceptable
  15-30 seconds: Needs optimization
  > 30 seconds: Redesign required
                        

Common Workbook Patterns

Executive Summary Workbook

WORKBOOK: Executive KPI Dashboard
═══════════════════════════════════════════════════════════════════

Page 1: Financial Overview
┌─────────────────────────────────────────────────────────────────┐
│  [Revenue YTD]   [Margin %]   [Cash Balance]   [A/R Days]      │
│    $4.2M          42.3%         $1.8M            38            │
│    ▲ 12% YoY      ▲ 2.1pts      ▲ $200K          ▼ 3 days      │
├─────────────────────────────────────────────────────────────────┤
│ [Revenue Trend - Line Chart]        [Revenue by Segment - Pie] │
│ 12-month trend with forecast        Top 5 + Other              │
├─────────────────────────────────────────────────────────────────┤
│ [Top 10 Customers - Bar]            [Regional Performance]     │
│ YTD revenue + vs prior year         Heat map by region/month   │
└─────────────────────────────────────────────────────────────────┘

Page 2: Operational Metrics
  - Order fulfillment rate
  - Inventory turnover
  - Customer acquisition cost
  - Support ticket resolution

Page 3: Drill-Down Tables
  - Customer detail with filters
  - Product performance
  - Regional breakdown
                        
Consultant Insight

The most successful workbooks start with business questions, not data. Before building, ask stakeholders: "What decisions will this help you make?" Then work backwards to identify the exact metrics needed. Resist the urge to include every available field—complexity kills adoption.

Implementation Checklist

Identify 3-5 key business questions per workbook
Map questions to NetSuite record types and fields
Design dataset with minimal fields needed
Build calculated fields for derived metrics
Create pivot tables for aggregated views
Add appropriate visualizations per metric type
Test performance with production data volumes
Configure role-based access permissions
Document metric definitions for users
Train users on filters and drill-down
Chapter 9.9

Dashboard Design Patterns

Create effective role-based dashboards that drive action. Learn layout principles, portlet selection, and configuration for different user personas from executives to operational staff.

Dashboard Design Principles

THE DASHBOARD HIERARCHY OF NEEDS
═══════════════════════════════════════════════════════════════════

Level 4: ACTIONABLE      "I know what to do next"
         ▲               Alerts, thresholds, drill-downs
         │
Level 3: CONTEXTUAL      "I understand the 'so what?'"
         │               Trends, comparisons, targets
         │
Level 2: INFORMATIVE     "I see the current state"
         │               KPIs, metrics, status
         │
Level 1: ACCESSIBLE      "I can find the data"
         │               Navigation, search, shortcuts

Most dashboards fail at Level 4. Users see data but don't
know what action to take. Every metric should answer:
"If this changes, what should I do?"
                        

Role-Based Dashboard Templates

Executive Dashboard

ROLE: CEO / CFO / Executive
PURPOSE: Strategic overview, exception-based management
REFRESH: Daily (morning)
═══════════════════════════════════════════════════════════════════

LAYOUT (3 columns):
┌────────────────────────────────────────────────────────────────┐
│ ROW 1: KPI TILES (Critical Metrics)                            │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐           │
│ │ Revenue  │ │ Margin   │ │ Cash     │ │ Pipeline │           │
│ │ MTD      │ │ %        │ │ Position │ │ Value    │           │
│ │ $2.4M    │ │ 41.2%    │ │ $3.1M    │ │ $8.7M    │           │
│ │ ▲ 8%     │ │ ▼ 1.2pts │ │ ▲ $400K  │ │ ▲ 12%    │           │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘           │
├────────────────────────────────────────────────────────────────┤
│ ROW 2: TRENDS & COMPARISON                                     │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Revenue vs Plan (Line)      │ │ Revenue by Segment (Pie)    ││
│ │ Actual | Budget | Forecast  │ │ Product mix breakdown       ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 3: EXCEPTIONS & ACTIONS                                    │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Deals Requiring Attention   │ │ Upcoming Commitments        ││
│ │ - Stalled opportunities     │ │ - Large payments due        ││
│ │ - High-risk renewals        │ │ - Contract expirations      ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
└────────────────────────────────────────────────────────────────┘

PORTLETS USED:
  - KPI Scorecard (custom portlet or Key Performance Indicators)
  - Saved Search (chart) - Revenue trend
  - Saved Search (chart) - Segment breakdown
  - Saved Search (list) - Exception alerts
  - Reminders portlet - Upcoming items
                        

Sales Manager Dashboard

ROLE: Sales Manager
PURPOSE: Team performance, pipeline management
REFRESH: Real-time
═══════════════════════════════════════════════════════════════════

LAYOUT (3 columns):
┌────────────────────────────────────────────────────────────────┐
│ ROW 1: TEAM PERFORMANCE                                        │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Quota Attainment by Rep     │ │ Pipeline by Stage           ││
│ │ (Horizontal Bar)            │ │ (Funnel Chart)              ││
│ │ Green/Yellow/Red status     │ │ Qualification → Close       ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 2: ACTIVITY & VELOCITY                                     │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Activities This Week        │ │ Win Rate Trend (Line)       ││
│ │ Calls | Meetings | Demos    │ │ Last 6 months by rep        ││
│ │ vs Target                   │ │                             ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 3: DEAL FOCUS                                              │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Opportunities Closing This Month (Table)                     ││
│ │ Account | Deal | Value | Stage | Probability | Next Step    ││
│ └──────────────────────────────────────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 4: QUICK LINKS                                             │
│ [Create Lead] [Create Opportunity] [Pipeline Report] [Forecast]│
└────────────────────────────────────────────────────────────────┘
                        

Operations Manager Dashboard

ROLE: Operations / Fulfillment Manager
PURPOSE: Order status, inventory alerts, shipment tracking
REFRESH: Real-time
═══════════════════════════════════════════════════════════════════

LAYOUT (3 columns):
┌────────────────────────────────────────────────────────────────┐
│ ROW 1: TODAY'S PRIORITIES                                      │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐           │
│ │ Orders   │ │ Orders   │ │ Back-    │ │ Late     │           │
│ │ to Ship  │ │ Pending  │ │ orders   │ │ Shipments│           │
│ │   47     │ │   12     │ │   8      │ │   3      │           │
│ │ ▼ 5 vs   │ │ Approval │ │ ▲ 2 new  │ │ ⚠ Action │           │
│ │ yesterday│ │          │ │          │ │ needed   │           │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘           │
├────────────────────────────────────────────────────────────────┤
│ ROW 2: ORDER QUEUE                                             │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Orders Pending Fulfillment (Table - Sortable)                ││
│ │ Order# | Customer | Items | Ship By | Status | [Fulfill]    ││
│ │ Color-coded by urgency (today=red, tomorrow=yellow)         ││
│ └──────────────────────────────────────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 3: INVENTORY ALERTS                                        │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Below Reorder Point         │ │ Inbound Shipments           ││
│ │ Items needing restock       │ │ Expected this week          ││
│ │ Link to PO creation         │ │ PO# | Vendor | ETA          ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 4: PERFORMANCE METRICS                                     │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Order Cycle Time (Trend)    │ │ Fill Rate (Gauge)           ││
│ │ Target: < 24 hours          │ │ Target: > 98%               ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
└────────────────────────────────────────────────────────────────┘
                        

Accounting Team Dashboard

ROLE: Controller / Accounting Manager
PURPOSE: Period close status, reconciliation, compliance
REFRESH: Daily
═══════════════════════════════════════════════════════════════════

LAYOUT (3 columns):
┌────────────────────────────────────────────────────────────────┐
│ ROW 1: PERIOD STATUS                                           │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐           │
│ │ Unposted │ │ A/R      │ │ A/P      │ │ Bank     │           │
│ │ JEs      │ │ Unappld  │ │ Unappld  │ │ Unrec'd  │           │
│ │   15     │ │ $42K     │ │ $28K     │ │ $156K    │           │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘           │
├────────────────────────────────────────────────────────────────┤
│ ROW 2: CLOSE CHECKLIST                                         │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Month-End Close Tasks                                        ││
│ │ ☑ Revenue recognition                                        ││
│ │ ☑ Inventory valuation                                        ││
│ │ ☐ Depreciation run                                           ││
│ │ ☐ Intercompany reconciliation                                ││
│ │ ☐ Bank reconciliation                                        ││
│ │ ☐ Review trial balance                                       ││
│ └──────────────────────────────────────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 3: CASH POSITION                                           │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐│
│ │ Cash Flow Forecast          │ │ A/R Aging Summary           ││
│ │ (13-week rolling)           │ │ (Stacked bar by bucket)     ││
│ └─────────────────────────────┘ └─────────────────────────────┘│
├────────────────────────────────────────────────────────────────┤
│ ROW 4: APPROVALS QUEUE                                         │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Pending My Approval (Journal Entries, Vendor Bills)          ││
│ │ Quick approve/reject from dashboard                          ││
│ └──────────────────────────────────────────────────────────────┘│
└────────────────────────────────────────────────────────────────┘
                        

Portlet Types Reference

Portlet Type Use Case Configuration Tips
Key Performance Indicators Big number metrics with trend Limit to 4-6 KPIs; show variance
Saved Search (List) Tabular data, action lists Limit rows; add inline edit if possible
Saved Search (Chart) Visual trends, comparisons Choose chart type carefully; less is more
Reminders Upcoming tasks, follow-ups Customize reminder types per role
Quick Search Navigation shortcut Position prominently for data entry roles
Shortcuts Frequently used transactions Limit to 5-8 most common actions
Analytics (Workbook) Self-service drill-down Embed focused workbook views
Custom Portlet (SuiteScript) Custom UI/logic Use for complex conditional display

Dashboard Layout Guidelines

LAYOUT BEST PRACTICES
═══════════════════════════════════════════════════════════════════

1. VISUAL HIERARCHY
   ┌─────────────────────────────────────────────────────────────┐
   │ TOP: Most critical metrics (KPIs, alerts)                   │
   │      User's eye starts here                                 │
   ├─────────────────────────────────────────────────────────────┤
   │ MIDDLE: Supporting context (trends, breakdowns)             │
   │         Answers "why" for top metrics                       │
   ├─────────────────────────────────────────────────────────────┤
   │ BOTTOM: Detail data (tables, lists)                         │
   │         Drill-down and action items                         │
   └─────────────────────────────────────────────────────────────┘

2. COLUMN USAGE
   1 column: Mobile/narrow views
   2 columns: Most common, balanced layout
   3 columns: Information-dense for wide screens

3. PORTLET SIZING
   Small: KPI tiles, shortcuts
   Medium: Charts, short lists
   Large: Data tables, calendars

4. WHITESPACE
   Don't fill every pixel
   Group related portlets
   Separate logical sections

5. REFRESH RATES
   Real-time: Operational dashboards
   Cached: Executive summaries
   Manual: Heavy analytics

ANTI-PATTERNS TO AVOID:
  ✗ Too many portlets (>12)
  ✗ Duplicate information in multiple portlets
  ✗ Charts without context (no targets, no comparisons)
  ✗ Scroll-heavy layouts
  ✗ Data without action path
                        

Publishing & Permissions

DASHBOARD PUBLISHING OPTIONS
═══════════════════════════════════════════════════════════════════

1. ROLE-BASED ASSIGNMENT
   Path: Customization → Centers & Tabs → Set Up Dashboard

   Options:
   - Set as default dashboard for role
   - Allow users to modify personal copy
   - Lock dashboard (no modifications)

2. CENTER TAB PLACEMENT
   Path: Customization → Centers & Tabs → Center Tabs

   Position dashboard as:
   - Home (first tab, default landing)
   - Additional center tab
   - Subtab within existing center

3. PUBLISHED DASHBOARDS
   Path: Customization → Publishing → Published Dashboards

   Create dashboard templates that:
   - Users can subscribe to
   - Automatically update when published
   - Maintain consistent reporting

4. PERMISSION CONSIDERATIONS
   □ User can view underlying saved searches
   □ User has access to record types displayed
   □ Subsidiary restrictions apply
   □ Role restrictions apply

TESTING CHECKLIST:
   □ Test with intended role (not Administrator)
   □ Verify data filters correctly by user
   □ Check load time with production data
   □ Confirm drill-downs work
   □ Validate mobile rendering (if needed)
                        
Consultant Insight

The best dashboards are boring—in a good way. They show expected information in expected places. Resist the urge to add visual flair. Focus on consistency: same metrics appear in same positions, same color meanings across charts, same drill-down patterns. Users should spend zero cognitive effort figuring out where to look.

Implementation Checklist

Identify 3-5 key user roles requiring dashboards
Interview each role: What decisions do you make daily?
Map decisions to specific metrics and data sources
Create saved searches for each dashboard metric
Build dashboard layout following hierarchy principles
Configure portlets with appropriate refresh rates
Test with target role (not Administrator)
Gather user feedback and iterate
Publish as role default or center tab
Document metric definitions and refresh schedules