{"id":3382,"date":"2026-10-14T10:00:00","date_gmt":"2026-10-14T10:00:00","guid":{"rendered":"https:\/\/aaxonix.com\/resources\/?p=3382"},"modified":"2026-07-11T09:45:32","modified_gmt":"2026-07-11T09:45:32","slug":"netsuite-saved-searches-kpi-dashboards","status":"publish","type":"post","link":"https:\/\/aaxonix.com\/resources\/netsuite-saved-searches-kpi-dashboards\/","title":{"rendered":"NetSuite Saved Searches: Build KPI Dashboards and Custom Reports Step by Step"},"content":{"rendered":"<style>\n.aax-post{font-family:'Poppins',sans-serif;color:#1a2332;max-width:820px;margin:0 auto;line-height:1.75}\n.aax-post h2{font-size:1.55rem;font-weight:600;margin:2.5rem 0 .9rem;color:#0a1628}\n.aax-post h3{font-size:1.15rem;font-weight:600;margin:1.8rem 0 .6rem;color:#1a2332}\n.aax-post p{margin:0 0 1.1rem}\n.aax-post ul,.aax-post ol{margin:0 0 1.1rem;padding-left:1.5rem}\n.aax-post li{margin-bottom:.45rem}\n.aax-post table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.93rem}\n.aax-post th{background:#0a1628;color:#fff;padding:.6rem 1rem;text-align:left}\n.aax-post td{padding:.55rem 1rem;border-bottom:1px solid #e8edf4}\n.aax-post tr:nth-child(even) td{background:#f5f7fb}\n.aax-post .faq-section{background:#f5f7fb;border-radius:10px;padding:1.8rem 2rem;margin:2.5rem 0}\n.aax-post .faq-item{margin-bottom:1.2rem;border-bottom:1px solid #e0e6ef;padding-bottom:1.2rem}\n.aax-post .faq-item:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}\n.aax-post .faq-question{font-weight:600;color:#0a1628;margin-bottom:.5rem}\n.aax-post .faq-answer{color:#3a4a5c;line-height:1.65}\n.aax-post .aax-cta{background:linear-gradient(135deg,#0a1628 0%,#1a3a5c 100%);border-radius:12px;padding:1.8rem 2rem;margin:2.5rem 0;text-align:center}\n.aax-post .aax-cta p{color:#e8edf4;margin:0 0 1.2rem;font-size:1.05rem}\n.aax-post .aax-cta a{display:inline-block;background:#fff;color:#0a1628;font-weight:600;padding:.65rem 1.6rem;border-radius:6px;text-decoration:none;font-size:.95rem}\n<\/style>\n<div class=\"aax-post\">\n\n<p>NetSuite saved searches are the most-used analytical tool in the platform, yet most teams use only a fraction of what they can do. A saved search can filter records, calculate formulas, group results by any field, send scheduled email exports, and feed live data directly into dashboard portlets, all without writing a single line of SQL. For finance teams tracking AR aging, operations managers watching open purchase orders, and NetSuite admins building role-specific dashboards, getting fluent with saved searches removes a significant bottleneck between data and decisions. This guide covers the full workflow: how saved searches differ from native reports and SuiteAnalytics workbooks, how to build one from scratch, the advanced features most users skip, and how to wire results into a <a href=\"https:\/\/aaxonix.com\/resources\/netsuite-reporting-dashboards\/\" class=\"sp-content-link\">NetSuite reporting and dashboards<\/a> setup your team will actually use.<\/p>\n\n<h2>Saved Searches, Reports, and Workbooks: What Each One Does<\/h2>\n\n<p>NetSuite gives you three analytical layers, and choosing the wrong one costs time. Understanding the boundary between them matters before building anything.<\/p>\n<figure style=\"margin:1.8rem 0;border-radius:10px;overflow:hidden\"><img decoding=\"async\" src=\"https:\/\/aaxonix.com\/resources\/wp-content\/uploads\/2026\/04\/aax-post1-inline1.jpg\" alt=\"A professional in an office analyzing financial charts on multiple monitors, using advanced technology.\" style=\"width:100%;height:auto;display:block\" loading=\"lazy\"><\/figure>\n\n\n<p><strong>Saved Searches<\/strong> query a single record type (transactions, items, contacts, etc.) and return a flat or summarized result set. They are real-time: they query live data every time they run. They support formula columns using NetSuite&#8217;s expression syntax, conditional highlighting, and scheduled email delivery. They can be embedded in dashboard portlets as reminders, KPI tiles, or full data grids. The result is always tabular.<\/p>\n\n<p><strong>Standard Reports<\/strong> (under Reports in the navigation) use a pre-defined data model with preset columns and groupings. They are slower to customize, but they support multi-level subtotaling and period comparisons that saved searches cannot replicate natively. Financial statements, P&amp;L, balance sheet, trial balance, live here, not in saved searches.<\/p>\n\n<p><strong>SuiteAnalytics Workbooks<\/strong> are the most capable layer. They support joins across multiple record types, pivot tables, chart visualizations, and ad hoc exploration without saving a permanent query. <a href=\"https:\/\/aaxonix.com\/resources\/netsuite-suiteanalytics\/\" class=\"sp-content-link\">NetSuite SuiteAnalytics workbooks and queries<\/a> are the right tool when you need cross-record analysis, for example, correlating sales orders with fulfillment times and customer segments in one view. The trade-off is that workbooks cannot feed dashboard portlets directly and require the SuiteAnalytics permission bundle.<\/p>\n\n<p>The practical rule: use a saved search when you need a live, embeddable, schedulable result set against one record type. Use a report for financial statements and period-based subtotals. Use a workbook for exploratory multi-record analysis.<\/p>\n\n<h2>How to Build a NetSuite Saved Search: Step by Step<\/h2>\n\n<p>Navigate to <strong>Reports &gt; Saved Searches &gt; All Saved Searches &gt; New<\/strong>, then select your record type. The four tabs, Criteria, Results, Sorting, and Email, control everything.<\/p>\n\n<h3>Criteria tab<\/h3>\n<p>Criteria filter which records appear. Each filter has three parts: the field, the operator (is, is not, contains, greater than, between, etc.), and the value. For date fields, use dynamic values like &#8220;within the last 30 days&#8221; or &#8220;this fiscal quarter&#8221; rather than hard-coded dates so the search stays useful over time. The <strong>Filter<\/strong> checkbox on any criterion makes it an interactive filter bar that appears above results: useful for letting end users narrow results without editing the search definition.<\/p>\n\n<h3>Results tab<\/h3>\n<p>Results columns define what data appears for each matching record. Every column has a <strong>Function<\/strong> dropdown: leave it blank for a raw field value, or choose Sum, Count, Average, Maximum, Minimum, or Group to aggregate. When at least one column uses a summary function, the search returns grouped totals instead of row-level records: this is the switch that turns a flat list into a summary view.<\/p>\n\n<p>Add a <strong>Formula (Text)<\/strong>, <strong>Formula (Numeric)<\/strong>, or <strong>Formula (Date)<\/strong> column to calculate values not stored as native fields. Example: a formula column of <code>NVL({amountremaining},0) \/ DECODE(NVL({amount},0),0,1,{amount})<\/code> calculates the outstanding balance as a percentage of invoice total, inline in results.<\/p>\n\n<h3>Highlighting tab<\/h3>\n<p>Highlighting applies background colors to rows that meet a condition. For an overdue invoice search, rows where <code>{daysoverdue} &gt; 30<\/code> can appear yellow, and rows where <code>{daysoverdue} &gt; 60<\/code> appear red. This requires no additional setup from the user viewing the search: the color is baked in.<\/p>\n\n<h3>Email tab<\/h3>\n<p>Schedule the search to deliver results as an email attachment (CSV or PDF) on a daily, weekly, or monthly schedule. You can specify recipients by role or by individual user. This is how finance teams get an automatic Monday morning aging report without anyone having to log in and run it manually.<\/p>\n\n<h2>Advanced Saved Search Techniques<\/h2>\n\n<h3>Joined searches<\/h3>\n<p>Many record types expose joined fields from related records. On a Transaction saved search, you can pull in fields from the associated customer, subsidiary, sales rep, or item record without building a separate search. Look for the join prefix in the field picker, for example, &#8220;Customer: Category&#8221; or &#8220;Item: Cost Accounting&#8221;. This extends the reach of a single-record-type search significantly.<\/p>\n<figure style=\"margin:1.8rem 0;border-radius:10px;overflow:hidden\"><img decoding=\"async\" src=\"https:\/\/aaxonix.com\/resources\/wp-content\/uploads\/2026\/04\/aax-post1-inline2.jpg\" alt=\"Business meeting with professionals discussing financial reports and graphs at a work desk.\" style=\"width:100%;height:auto;display:block\" loading=\"lazy\"><\/figure>\n\n\n<h3>Summary types and grouped results<\/h3>\n<p>Grouping by two or three fields and summing a numeric column produces a pivot-like table inside a saved search. A common pattern: group by <strong>Customer<\/strong> and <strong>Month\/Year of Close Date<\/strong>, then sum <strong>Amount<\/strong>: this gives a monthly revenue-by-customer matrix that can feed a dashboard portlet. The key constraint is that every column must either be a Group column or use a summary function; you cannot mix raw row data with aggregations in the same search.<\/p>\n\n<h3>AND\/OR logic in criteria<\/h3>\n<p>By default, all criteria are AND conditions. To add OR logic, check the <strong>Use Expressions<\/strong> checkbox on the Criteria tab. This reveals a logic expression builder where you can write conditions like <code>(A AND B) OR C<\/code> using row numbers as variables. This is essential for searches that need to catch records matching any of several states, for example, invoices that are either overdue or on credit hold.<\/p>\n\n<h2>Wiring Saved Searches into KPI Dashboard Portlets<\/h2>\n\n<p>NetSuite dashboards are built from portlets, modular widgets arranged on a role&#8217;s home page. Four portlet types consume saved searches directly.<\/p>\n\n<h3>Saved Search portlet<\/h3>\n<p>Displays the full result table of a saved search, paginated. Add it via <strong>Personalize Dashboard &gt; Add Content &gt; Saved Search<\/strong>. Once placed, click the pencil icon to select which saved search to display. The portlet refreshes its data each time the dashboard loads. This is the right portlet for lists: open POs, unassigned leads, items below reorder point.<\/p>\n\n<h3>KPI Scorecard portlet<\/h3>\n<p>Shows a grid of named KPIs, each sourced from a saved search that returns exactly one numeric value. The portlet can show current period vs prior period with a trend arrow. To wire a saved search to a KPI tile, the search must return a single-row, single-column summary result, typically a Count or Sum with no grouping. Build the search first, confirm it returns one value, then create the KPI scorecard portlet and assign the search to a metric row.<\/p>\n\n<h3>Reminder portlet<\/h3>\n<p>Shows a count of records matching a saved search, with a drillthrough link to the full list. Reminders are configured at the role level (Setup &gt; Company &gt; Reminders) and appear automatically on the dashboard for all users in that role. A reminder for &#8220;Invoices overdue &gt; 30 days&#8221; showing a count of 14 in red is more effective than a report buried in a menu.<\/p>\n\n<h3>Key Performance Indicators portlet<\/h3>\n<p>Similar to the KPI Scorecard but uses NetSuite&#8217;s built-in KPI definitions (revenue, gross profit, open orders, etc.) combined with custom saved-search KPIs. The portlet supports period selectors, so users can switch between this week, this month, and this quarter without editing anything.<\/p>\n\n<h2>Role-Based Dashboard Setup and Publishing<\/h2>\n\n<p>Every NetSuite role has its own default dashboard layout. Admins can configure a dashboard for a role and then publish it to all users in that role, overriding their personal layouts. The process is:<\/p>\n<figure style=\"margin:1.8rem 0;border-radius:10px;overflow:hidden\"><img decoding=\"async\" src=\"https:\/\/aaxonix.com\/resources\/wp-content\/uploads\/2026\/04\/aax-post1-inline3.jpg\" alt=\"Close-up of business analytics charts and graphs on papers and clipboard.\" style=\"width:100%;height:auto;display:block\" loading=\"lazy\"><\/figure>\n\n\n<ol>\n  <li>Log in as a user with the target role (or use <strong>Setup &gt; User Management &gt; Roles<\/strong> to access role settings).<\/li>\n  <li>Arrange the dashboard portlets, saved search tables, KPI scorecards, reminders, activity feeds, as you want users to see them.<\/li>\n  <li>Go to <strong>Home &gt; Settings portlet &gt; Publish Dashboard<\/strong> (or the equivalent under the role&#8217;s dashboard settings). Select the role and confirm.<\/li>\n  <li>Optionally, check &#8220;Lock&#8221; to prevent users from personalizing the layout. Leave it unlocked if you want users to be able to add personal portlets while keeping your defaults.<\/li>\n<\/ol>\n\n<p>A well-structured role dashboard for a finance manager might include: an AR aging reminder portlet, a KPI scorecard with monthly billed revenue and collection rate, a saved search table of invoices due this week, and a <a href=\"https:\/\/aaxonix.com\/resources\/netsuite-financial-reporting-india\/\" class=\"sp-content-link\">NetSuite financial reporting<\/a> shortcut to the P&amp;L. None of that requires custom development; it is entirely configuration.<\/p>\n\n<h2>Six Saved Search Use Cases Worth Building Today<\/h2>\n\n<ul>\n  <li><strong>Overdue invoices by aging bucket:<\/strong> Transaction search, type = Invoice, status = Open, criteria on days overdue. Group by customer, sum amount remaining. Add highlighting for 30\/60\/90 day thresholds. Wire to a reminder portlet.<\/li>\n  <li><strong>Sales pipeline by stage:<\/strong> Opportunity search, status = In Progress. Group by sales stage and assigned rep, sum weighted amount. Display in a saved search portlet on the sales manager dashboard.<\/li>\n  <li><strong>Inventory reorder alert:<\/strong> Item search, criteria: quantity on hand less than reorder point. Results: item name, current quantity, reorder point, preferred vendor. Schedule to email the purchasing team every Monday at 7am.<\/li>\n  <li><strong>Open purchase orders by vendor:<\/strong> Transaction search, type = Purchase Order, status = Pending Receipt or Partially Received. Group by vendor, sum amount remaining. Use a reminder portlet so the AP team sees the count on login.<\/li>\n  <li><strong>Customer credit exposure:<\/strong> Customer search. Results columns: balance, credit limit, a formula column calculating balance\/credit limit as a percentage. Highlight rows where the ratio exceeds 80%. Share with the credit manager role.<\/li>\n  <li><strong>Employee expense reports pending approval:<\/strong> Transaction search, type = Expense Report, status = Pending Approval. Results: employee, submission date, amount, approver. Wire to a reminder portlet on manager dashboards so nothing sits in limbo.<\/li>\n<\/ul>\n\n<p>If your team is building these for the first time, <a href=\"https:\/\/aaxonix.com\/services\/netsuite\/\" class=\"sp-content-link\">Aaxonix&#8217;s NetSuite consulting services<\/a> can help configure saved searches, dashboards, and role-based publishing across your entire organisation.<\/p>\n\n<h2>Saved Search vs Report vs Workbook: A Decision Framework<\/h2>\n\n<table>\n  <thead>\n    <tr>\n      <th>Requirement<\/th>\n      <th>Best Tool<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Live dashboard portlet or reminder<\/td>\n      <td>Saved Search<\/td>\n    <\/tr>\n    <tr>\n      <td>Scheduled email export<\/td>\n      <td>Saved Search<\/td>\n    <\/tr>\n    <tr>\n      <td>Formula column on a single record type<\/td>\n      <td>Saved Search<\/td>\n    <\/tr>\n    <tr>\n      <td>Financial statement (P&amp;L, balance sheet)<\/td>\n      <td>Standard Report<\/td>\n    <\/tr>\n    <tr>\n      <td>Period comparison with subtotals<\/td>\n      <td>Standard Report<\/td>\n    <\/tr>\n    <tr>\n      <td>Cross-record join analysis<\/td>\n      <td>SuiteAnalytics Workbook<\/td>\n    <\/tr>\n    <tr>\n      <td>Pivot table or chart visualization<\/td>\n      <td>SuiteAnalytics Workbook<\/td>\n    <\/tr>\n    <tr>\n      <td>Ad hoc exploration without saving<\/td>\n      <td>SuiteAnalytics Workbook<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<div class=\"faq-section\">\n  <h2>Frequently Asked Questions<\/h2>\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Can a NetSuite saved search pull data from more than one record type?<\/p>\n    <p class=\"faq-answer\">A saved search is anchored to one primary record type, but it can include joined fields from related records, for example, a Transaction search can pull customer or item fields through the join. For true multi-record joins with flexible grouping, use a SuiteAnalytics Workbook instead.<\/p>\n  <\/div>\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">How do I make a saved search available to other users without giving them edit access?<\/p>\n    <p class=\"faq-answer\">On the saved search definition, go to the Audience tab. Add specific roles, users, or groups to the Roles or Employees fields. Users in the audience can run and view the search but cannot edit it unless you also grant them the &#8220;Edit&#8221; permission. Checking &#8220;Public&#8221; makes it available to everyone with the relevant record permissions.<\/p>\n  <\/div>\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Why is my KPI portlet showing no data even though the saved search returns results?<\/p>\n    <p class=\"faq-answer\">The KPI portlet requires the linked saved search to return exactly one row and one numeric column. If your search returns multiple rows or uses a grouping column, the portlet cannot parse a single value from it. Rebuild the search as a pure aggregate with no Group columns: only a Sum or Count function on the target field.<\/p>\n  <\/div>\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Can I schedule a saved search to email results automatically?<\/p>\n    <p class=\"faq-answer\">Yes. On the Email tab of the saved search definition, set the schedule frequency (daily, weekly, monthly), the delivery format (CSV or PDF), and the recipient list by role or individual user. The email is sent automatically at the scheduled time without any manual intervention.<\/p>\n  <\/div>\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">What is the difference between a Reminder portlet and a Saved Search portlet?<\/p>\n    <p class=\"faq-answer\">A Reminder portlet shows only a count of matching records with a label and a drillthrough link to the full list. It is configured at the role level and appears automatically for all users in that role. A Saved Search portlet displays the full result table inline on the dashboard and is added by individual users or pushed via dashboard publishing.<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"aax-cta\">\n  <p>Need help building saved searches, configuring role dashboards, or getting more from NetSuite&#8217;s reporting layer? Aaxonix works with NetSuite users to turn raw data access into operational visibility.<\/p>\n  <a href=\"https:\/\/aaxonix.com\/contact\/\">Talk to a NetSuite consultant<\/a>\n<\/div>\n\n<p>The fastest path to better reporting in NetSuite is not a new module or a custom script; it is getting more out of the saved search engine you already have. Start with one of the six use cases above, build the search, wire it to a portlet, and publish the dashboard to the relevant role. That single workflow, repeated across your team&#8217;s top reporting needs, produces a measurable improvement in how quickly your team can see and act on operational data.<\/p>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>NetSuite saved searches are the most-used analytical tool in the platform, yet most teams use only a fraction of what they can&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"seo_title":"","seo_description":"","seo_keyword":"","seo_faqs":"[{\"question\": \"Can a NetSuite saved search pull data from more than one record type?\", \"answer\": \"A saved search is anchored to one primary record type, but it can include joined fields from related records \\u2014 for example, a Transaction search can pull customer or item fields through the join. For true multi-record joins with flexible grouping, use a SuiteAnalytics Workbook instead.\"}, {\"question\": \"How do I make a saved search available to other users without giving them edit access?\", \"answer\": \"On the saved search definition, go to the Audience tab. Add specific roles, users, or groups to the Roles or Employees fields. Users in the audience can run and view the search but cannot edit it unless you also grant them the Edit permission. Checking Public makes it available to everyone with the relevant record permissions.\"}, {\"question\": \"Why is my KPI portlet showing no data even though the saved search returns results?\", \"answer\": \"The KPI portlet requires the linked saved search to return exactly one row and one numeric column. If your search returns multiple rows or uses a grouping column, the portlet cannot parse a single value from it. Rebuild the search as a pure aggregate with no Group columns \\u2014 only a Sum or Count function on the target field.\"}, {\"question\": \"Can I schedule a saved search to email results automatically?\", \"answer\": \"Yes. On the Email tab of the saved search definition, set the schedule frequency (daily, weekly, monthly), the delivery format (CSV or PDF), and the recipient list by role or individual user. The email is sent automatically at the scheduled time without any manual intervention.\"}, {\"question\": \"What is the difference between a Reminder portlet and a Saved Search portlet?\", \"answer\": \"A Reminder portlet shows only a count of matching records with a label and a drillthrough link to the full list. It is configured at the role level and appears automatically for all users in that role. A Saved Search portlet displays the full result table inline on the dashboard and is added by individual users or pushed via dashboard publishing.\"}]","footnotes":""},"categories":[1],"tags":[],"class_list":["post-3382","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/3382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/comments?post=3382"}],"version-history":[{"count":2,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/3382\/revisions"}],"predecessor-version":[{"id":6569,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/3382\/revisions\/6569"}],"wp:attachment":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/media?parent=3382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/categories?post=3382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/tags?post=3382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}