Edet, the NetSuite Admin at Asoville Inc., is elated! Finally, she’s able to share NetSuite license utilization with decision-makers in the company in real-time! What’s more, the portlet she’s created requires absolutely no scripting. In this article, you’ll learn how you can create your own license usage portlet in no time.
Table of Contents
The End Result
By the end of this walkthrough, you’d have learned how to create a license usage dashboard like the one below.
A Case For a License Utilization Dashboard
Before diving into the details, let me address the question of why we need a license dashboard in the first place.
A real-time NetSuite license utilization dashboard can help you save money and prevent surprises. Share on X- NetSuite licenses are not cheap. Unused licenses mean wasted dollars. As such, you typically want to keep your utilization as high as possible while leaving some room for ad-hoc provisioning. Keeping tabs on your utilization saves money and enables you to take prompt action when your utilization exceeds predefined thresholds.
- NetSuite license information is not quite accessible. The overview of provisioned vs. assigned licenses at
Setup >> Company >> View Billing Information
is accessible only to administrators (and did I say you need to scroll all the way down this very long menu to find the link?!). In many organizations, however, the NetSuite administrator is not the decision-maker when it comes to licenses and access. So you can imagine how often admins get asked to pull this information or even worse, how often purchase orders for new licenses get issued at the 11th-hour because there’s poor visibility of license usage. - NetSuite license information is not user-friendly. The page shown above presents license information among a myriad of other details. This increases the risk of looking at the wrong row or incorrectly converting the numbers presented to actual utilization. With the license dashboard, you can show only the data you need, in a format that requires no mental conversions.
- Last but not least, the license dashboard is simply cool! I mean, your administrators and decision-makers will love you for this. Trust me.
Introducing KPI Scorecards
The KPI Scorecards feature in NetSuite is the foundation of the license dashboard we’ll be creating. Yes, when you think Key Performance Indicators (KPIs), you probably think of financial metrics or leads and you’re not wrong. Nevertheless, with some creativity, we’ll use this feature to solve our license utilization needs.
So what’s a KPI scorecard anyway? It is a portlet (which is NetSuite’s name for dashboard components) that allows for “complex comparisons among multiple KPIs over multiple date ranges or accounting periods” [I]Oracle (February 26, 2020). NetSuite 2020.1 Dashboards Guide: KPI Scorecards Overview. [PDF File] p.95. Available at https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSDBG/NSDBG.pdf [Accessed July … Continue reading. If that doesn’t make too much sense, worry not; our use case is pretty straightforward. We basically have one metric we’re interested in, namely the percentage of our provisioned licenses we’re currently using. We can capture this metric using simple saved searches and basic arithmetic as I’ll show you shortly.
If you’d like to learn more about KPI scorecards, refer to the document referenced above. You may also visit the NetSuite Help Center or check out SuiteAnswers (Answer Id: 8146) for similar documents. For the rest of this article, I’ll focus on the KPI scorecards features which we actually need. Let’s now get started with creating the license dashboard.
A Step-by-Step Guide to Creating Your License Utilization Dashboard
Step 1: Enable the KPI Scorecard Feature
- Go to
Setup >> Company >> Enable Features
. - Under the
Analytics
subtab, check theKPI Scorecards
checkbox if it’s not already, and click Save to enable the feature.
Step 2: Create a Saved Search to Capture the Number of Licenses in Use
We need a saved search that answers the question: “How many licenses are we currently using?”. Until now, we’ve spoken of licenses in a generic way but, as you may know, NetSuite has various kinds of licenses – the full user license, the employee center license, the vendor center license, etc. We’ll keep things simple and focus only on full user licenses. However, once you understand the approach, it will be easy to extend it to other kinds of licenses, if desired.
When creating saved searches for use as custom KPIs, you should adhere to the following guidelines: (i) do not include date filters in search criteria; (ii) *make sure there is exactly one result column that uses a summary type; (iii) add a date field in the
SuiteAnswers (Answer Id: 8104)Available Filters
subtab to be able to compare saved search results over different date ranges.
* In practice, if no summary type column is present, NetSuite will automatically count the result rows. So technically, you could get the desired results without a summary result column.
Your saved search for the number of licenses in use should look like this:
Understanding the Search
- Criteria: In our case, we assume there are no other types of licenses in use than full user licenses. As such, it is sufficient to find all users that have access to the NetSuite environment, regardless of their roles, i.e. filter
Login Access = True
. If you use other license types, you’ll need to add a filter to capture only roles that require full licenses. We also filter out inactive users since NetSuite allows inactivating a user without unchecking the “Login Access” field. However, inactive users do not count towards license usage. Therefore, we must exclude them from our results. - Results: It doesn’t really matter what result columns you include, provided you ensure that no user shows up more than once. So avoid including columns like “Role” in your results as any user with multiple roles will show up more than once and mess up your count. Note that we deliberately do NOT apply a summary type to any column as per custom KPI saved search best practices for reasons that will become clear shortly.
- Available Filters: We use the
Last Modified
date field as filter as per the custom KPI requirements. We’ll explain this choice in more detail in Step 4. Note that if no date field filter is specified, this saved search will not appear in the list of custom KPIs to choose from when building our KPI Scorecard later on.
Before proceeding, make sure to run your search and confirm that the count returned equals the number of currently used full licenses reported by NetSuite under Setup >> Company >> View Billing Information
. If not, your search criteria are incorrect and you need to fix them before proceeding.
Step 3: Create a Saved Search to Capture the Number of Provisioned Licenses
Next, we need a saved search that answers the question: “How many licenses do we have in total?”. As far as I know, NetSuite does not expose this information except via the admin-only menu mentioned above. As such, this search will need to mirror that information and be manually updated each time new licenses are provisioned.
This saved search is arguably the most ingenious and potentially tricky aspect of the solution. So pay attention and make sure you understand what’s happening! Saved searches are dynamic by design, i.e. the number of results returned will change based on the search criteria. On the other hand, the number of provisioned users is static information in the sense that it does not depend on the number of results returned by the search. Therefore, we need to be creative to address this apparent conflict.
Your saved search for the number of provisioned licenses should look like this:
Understanding the Search
- Criteria: The search criteria are immaterial (provided they meet the KPI constraint and include no date fields). In fact, we could use a completely unrelated search type (e.g. a Transaction search) and still get the desired results. However, for consistency with the previous search, we stick with the Employee search type here.
- Results: This is where the “magic” happens. In particular, the formula column is what we’re concerned about. We specify a
Formula (Numeric)
column with a fixed value corresponding to the provisioned license count as the formula. Moreover, we apply theMaximum
summary type to this column. Effectively, we create a summary saved search that always produces a static number as output regardless of how many result rows the search actually returns. Nice! - Available Filters: Now that we have a search that always returns the number of provisioned licenses, we’re left with a date filter. This filter must be such that the saved search will always produce at least one result row whenever it is executed by the KPI Scorecard and thus produce the fixed value output we’re after. The
Last Modified
date field is again a great choice here as it is pretty easy to find a KPI date range (e.g. the last year) for which there will be at least one created/updated employee. Hang on… the choice of this field will get clearer when we tie things up in the KPI scorecard shortly.
Before proceeding, be sure to run your search and confirm that the count returned is fixed to the value you specified in the formula column, for different date ranges. If not, you’ve probably missed something and need to fix it.
Step 4: Tie it All Together in a KPI Scorecard
Now that we have all the building blocks in place, let’s create the KPI Scorecard itself. We’ll define our utilization metric using the saved searches we created.
The menu path to the KPI Scorecards –
Customization >> Centers and Tabs >> KPI Scorecards
– is not very intuitive to me which means I hardly remember it. I personally find it way easier to search for “page: kpi” in the Global search bar.
Create a new KPI Scorecard and configure it as follows:
- Custom KPI Selection: Under the
Content > Custom
subtab, select the saved search from Step 2 (Used Licenses) as “Custom KPI #1” and the saved search from Step 3 (Provisioned Licenses) as “Custom KPI #2”. This configuration essentially defines which KPIs are available for subsequent use in the Scorecard. - KPIs: Under the
Content > KPIs
subtab, add rows for all the KPIs you want. In addition to the two saved search-based custom KPIs we’ve defined, notice how we are able to derive other KPIs using simple formulas!- Numeric formula
{CUSTOM2}-{CUSTOM}
calculates the number of available licenses. (Note that{CUSTOM}
refers to the “Custom KPI #1” from theContent > Custom
subtab.) - Percentage formula
{CUSTOM}/{CUSTOM2}
calculates the license utilization based on the definition:Utilization = # Used / # Provisioned
. Notice that I’ve checked the “Hidden” option for this row. This causes it not to show as a row in the KPI scorecard but only as a headline (configured under theHighlighting
subtab). As a best practice, first define all your highlighting rules before hiding a KPI row. Otherwise, it might not show up in theHighlighting
subtab. - Finally, be sure to update the row labels for easier identification of the metrics. If you do not set a custom label, the title of the saved search/KPI will be used.
- Numeric formula
- Highlighting: Under
Content >> Highlighting
, you can specify various highlighting criteria. It’s also here that we specify that the percentage utilization KPI should be displayed as a headline. In my example, I highlight the available licenses based on the following thresholds: Yellow with a dollar sign if greater than 5 to indicate that we’re probably wasting cash, and red when all licenses have been allocated to indicate that we have no slack left. Obviously, you can specify your own highlighting rules.
Highlighting rules in KPI Scorecards are evaluated from top to bottom. If multiple rules match a given same KPI, the first one encountered is applied. So be sure to order your highlighting rules properly. Also, highlighting is not applied to headlines.
- Date Ranges: Every KPI must have at least one date range specified under
Content >> Date Ranges
. As stated earlier, the killer feature of KPI Scorecards is the ability to compare different KPIs over multiple date ranges. In our case, however, we’re fine with a single date range which we must choose carefully as explained next.
Choosing an Appropriate KPI Date Range
After playing around with the various options, I settled for the date range “previous rolling year”. So what exactly does this mean? Without going into the technicalities of the inner workings of KPI Scorecards, here’s the simple explanation:
- Whenever the KPI Scorecard is shown/refreshed, it computes the values to be shown by applying the specified date range(s) to each of the underlying searches. You can see this in action by clicking through to the provisioned license count saved search from the KPI Scorecard. Whatever date range you specified on the Scorecard will be applied to the saved search.
- Another way to reason about this is to imagine you added the date field you specified in the saved search’s “Available Filters” subtab as a search criterion instead, with the date range from the KPI Scorecard as its value. For the number of provisioned licenses (Step 3), the equivalent search condition will then be: “Give me the
Maximum
of theFormula (Numeric)
field’s value for all users that wereLast Modified
within theprevious rolling year
“. Undoubtedly, there will be at least one user modified within the last year, so the search will always produce results. And thanks to theMaximum
summary type, the actual value will not depend on the number of result rows. - You will recall that we deliberately did not apply the summary type to any field of the saved search capturing the number of licenses in use (Step 2). While this deviates from the custom KPI guidelines, it causes NetSuite to ignore the KPI Scorecard’s date range value when executing the search. You can confirm this by clicking through to the search (Step 2) from the KPI Scorecard. The date range applied is “All” instead of “previous rolling year” as would have been the case if we specified a summary type in one of the result columns. This situation ensures that all licensed users are always included regardless of when they were
Last Modified
. Moreover, NetSuite implicitly computes the count of the result rows for use in the Scorecard. And that’s exactly what we want!
Step 5: Add the License Utilization Portlet to Your NetSuite Dashboard
Congratulations! You’re ready to deploy your license usage portlet. Go ahead and add your KPI Scorecard portlet to your NetSuite (Home) Dashboard as you would any other portlet.
Bear in mind that you can add only one KPI Scorecard portlet to the Home Dashboard. So if you’re already displaying another KPI Scorecard on your Home Dashboard, you’ll need to use the dashboard under another menu e.g. Activities, Transactions, Lists, Reports, or a custom center you’ve created.
Like many other features in NetSuite, access to KPI Scorecards is based on permissions. So be sure to share the Scorecard with target users (via the
Audience
subtab). Also, ensure that they have at least View access to the underlying saved searches and the Employee record type. If not, they will not be able to add the portlet or will see incorrect results.
Further Considerations
Using a Saved Search vs. a Custom KPI Formula for the Provisioned License Count
As you have seen, it is possible to define numeric formulas at the KPI Scorecard level. So we could eliminate Step 3 and specify the number of provisioned licenses in the KPI Scorecard itself. That is a fair and correct observation. Nevertheless, I personally find the saved search approach more maintainable for the following reasons:
- If done at the KPI Scorecard level, the number of provisioned licenses will need to be manually entered in 3 different rows to achieve the same result. That means 3 changes need to be made whenever licenses are provisioned instead of 1 with the saved search-based solution. Whenever possible, we should opt for a single source of truth and avoid duplication.
- Access to the KPI Scorecards feature is not very granular. The permission
Setup >> KPI Scorecards
only has one level: Full. That means, if the task of updating the provisioned license count were to be delegated to a non-admin user, they will need to be granted full access to all KPIs in the environment. This violates the principle of least privilege which any good admin strives to adhere to.
Ultimately, it’s your choice.
Automating the Provisioned License Count Update
It would be great if NetSuite would expose an API to query the number of provisioned licenses. That would allow us to automate retrieving the number of provisioned licenses. Alas! that’s not an option. On the upside though, the effort required to update this saved search each time new licenses are purchased pales in comparison to the benefits of the entire solution. Moreover, the admin can easily delegate the task of updating the search whenever new licenses are provisioned to a non-admin. For example, the person responsible for purchasing the licenses. Also, since the number of provisioned licenses in an account generally does not decrease, any incorrectness will be very easy to spot on the dashboard (e.g. utilization greater than 100% or a negative number of available licenses).
Handling Users with Multiple License Types
In this discussion, we have focused on full license utilization for simplicity. However, there are other license types in NetSuite that you might want to capture on your dashboard. One thing to bear in mind though is that NetSuite’s license model is such that full licensed users may not be charged for other kinds of licenses. For example, if you assign an additional Employee Center role to a user that already has a full license, they will only be charged for the full license. This implies that when calculating the number of Employee Center licenses in use, such users must be excluded for accurate results. While configuring your searches, I strongly advise you to use the data from Setup >> Company >> View Billing Information
to validate your results.
Deploying to Production
Both SuiteBundler and SDF support KPI Scorecards. So if you created your dashboard in Sandbox, you have multiple options for pushing it to your Production environment without having to redo everything manually.
Wrap Up
I hope you’ve enjoyed learning how to create a nice-looking real-time license utilization dashboard with minimal effort as much as I enjoyed explaining it. It’s now your turn to explore and add your own creative twists to this solution. Have fun and please share your beautiful results in the comments section or email them to me at stories[at]netsuite-insights.com. I’ll love to hear from you.
If you’ve found these insights helpful, show your love with your claps, shares, etc. and be sure to opt-in at the bottom of the page to be the first to know when I publish other NetSuite Insights.
Back at Asoville Inc., Edet has just published the license usage portlet to Kim’s dashboard and Kim is simply blown away! Kim loves the fact that he can click through to see the exact users assigned a license at any given time. He’s sure this dashboard will help him keep tabs on NetSuite license costs and avoid surprises going forward. Your company’s decision-makers will appreciate it too!
Other Interesting Utilities
Further Reading
Great hack by the way, but it’s not working because the date Range requirement.
Hi,
why does it need to have previous rolling year in the date Ranges? I would like to see all users since we went live on NetSuite.
Hi, I think the article covers the use of the previous rolling year in sufficient detail.
The license utilization dashboard is not intended to show all users since go live. For that, you can run an employee search and expose role-related columns like Role Changed Date. Hope that helps.
Great article!
Thanks for sharing.
Hi Joshua, thanks for your feedback. Glad you found this “hack” insightful.