customscript_exec_kpi_sl inside the current NetSuite session — no second loginBuild the dashboard as a SuiteScript 2.1 Suitelet + Custom Content Portlet that renders an open-source JS chart library (ECharts / Chart.js / ApexCharts — MIT-licensed) served from the NetSuite File Cabinet, fed by SuiteQL queries executed in the signed-in user's own session. Nothing leaves NetSuite, there is no second login, no second URL, and no per-user BI licence.
N/query runs SQL-92 against transaction, entity, item and custom records. Heavy aggregates get pre-computed nightly by a Map/Reduce script into a custom record customrecord_kpi_snapshot, so the portlet reads one small table instead of scanning millions of transaction lines.
One Suitelet, Available Without Login = No. It reads the period / subsidiary parameters, runs the SuiteQL, and returns JSON. Because it runs in the user's session, NetSuite's own role, subsidiary and row-level permissions apply automatically — a subsidiary controller physically cannot pull another subsidiary's numbers.
Apache ECharts (Apache-2.0) or Chart.js (MIT) uploaded as a File Cabinet JS file and referenced by the Suitelet's HTML. No CDN call, so it works behind corporate proxies and passes security review. This mockup is that render layer.
A Portlet script of type HTML/INLINE embeds the dashboard directly on the NetSuite Home dashboard; a Custom Center Tab gives the full-screen version. Executives see it where they already log in.
N/cache holds the JSON for 15 minutes so repeated opens cost no governance units. Portlet scripts have a 1,000-unit budget — the snapshot table plus cache keeps a full render well under 100 units.
No OAuth app, no service account, no gateway, no data copy leaving NetSuite. Access is granted by adding the Suitelet/Portlet deployment to the CEO and COO roles. Audit trail stays in NetSuite's own script execution log.
| Option | Runs inside NetSuite? | Second login / credentials? | Cost & effort | Verdict |
|---|---|---|---|---|
| SuiteScript Suitelet + Portlet + open-source charts | Yes — native page | None | ~4–6 weeks build, no licence cost | Recommended |
| SuiteAnalytics Workbook / standard dashboard portlets | Yes | None | Days, config only | Good for simple KPIs; limited layout, no cross-module composite view, weak visual control |
| Power BI Embedded in an iframe inside NetSuite | Visually yes, technically no | Yes — Entra ID sign-in or an embed token service you must host | Power BI capacity + a hosted token service | Fails the “no other credentials” requirement |
| Power BI / Tableau as a separate app | No | Yes | Per-user licences + ODBC/connector | Fails the “one application” requirement |
customrecord_kpi_snapshot + the Map/Reduce that fills it nightly.N/cache, governance profiling.runtime.getCurrentUser().role; subsidiary filtering; UAT with real executive roles.echarts.5.4.3.js) or browsers will serve stale code after a release.