01
About this portlet
One bar per sales stage with the probability-weighted value of open opportunities, from Opportunity pipeline by stage. In that report, each stage's count opens the opportunities behind it.
After import, give the report an audience. Then, on a NetSuite dashboard, choose Personalize and add a Custom Portlet. On the new portlet, choose Set Up and pick Advanced Report - Pipeline by stage. The portlet shows only to people who can open the report.
02
What it carries
The portlet reads 2 reports. They travel in the same file, so the import creates them first.
03
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Stage | Weighted |
|---|---|
| Qualified | 82,400 |
| In Discussion | 115,400 |
| Proposal | 117,600 |
| Negotiation | 97,040 |
04
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT NVL(BUILTIN.DF(t.entitystatus), '(no stage)') AS stage,
COUNT(*) AS opportunities,
SUM(t.projectedtotal * t.exchangerate) AS projected,
SUM(t.weightedtotal * t.exchangerate) AS weighted,
AVG(t.probability) AS avg_probability,
TO_CHAR(MIN(t.expectedclosedate), 'YYYY-MM-DD') AS next_close
FROM transaction t
WHERE t.type = 'Opprtnty'
AND t.status IN ('Opprtnty:A', 'Opprtnty:B', 'A', 'B')
GROUP BY NVL(BUILTIN.DF(t.entitystatus), '(no stage)')
ORDER BY avg_probability, stageSELECT t.id AS opportunity__id,
t.tranid AS opportunity,
t.title AS title,
NVL(e.altname, e.entityid) AS customer,
NVL(BUILTIN.DF(t.entitystatus), '(no stage)') AS stage,
BUILTIN.DF(t.employee) AS sales_rep,
TO_CHAR(t.expectedclosedate, 'YYYY-MM-DD') AS expected_close,
TRUNC(SYSDATE) - TRUNC(t.trandate) AS days_open,
t.probability AS probability,
t.projectedtotal * t.exchangerate AS projected,
t.weightedtotal * t.exchangerate AS weighted
FROM transaction t
JOIN entity e ON e.id = t.entity
WHERE t.type = 'Opprtnty'
AND t.status IN ('Opprtnty:A', 'Opprtnty:B', 'A', 'B')
ORDER BY t.expectedclosedate