From 002bc1ea9555ede2c9f12a76c3b9dbcfd1bc0ea2 Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:29:44 +0530 Subject: [PATCH 1/6] Create readme.md --- Server-Side Components/Scheduled Jobs/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Server-Side Components/Scheduled Jobs/readme.md diff --git a/Server-Side Components/Scheduled Jobs/readme.md b/Server-Side Components/Scheduled Jobs/readme.md new file mode 100644 index 0000000000..455fe75b4b --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/readme.md @@ -0,0 +1 @@ +Find out all the cases with the difference in their create date and current date and put them in different buckets of their age. Then you can report on the aging. With this you will be able to run the Bucket Group reporting on tables without using PA. From dc8c5f3c84ccf53a2b1e957a84d761425746a8cc Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:45:39 +0530 Subject: [PATCH 2/6] Create Bucket Group Age Calculation.js --- .../Bucket Group Age Calculation.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js diff --git a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js new file mode 100644 index 0000000000..89b9b0ec42 --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js @@ -0,0 +1,24 @@ +var rec = new GlideRecord('case'); // any table which you want to use + rec.addEncodedQuery('stateNOT IN60,40, 20'); // filtering out all the closed/cancelled cases + rec.query(); + while (rec.next()) { + var openedDate = new GlideDateTime(rec.opened_at.getDisplayValue()); + var dur = GlideDateTime.subtract(openedDate,actualDateTime ); + //gs.info("dur"+dur.getNumericValue()) ; + elapsedTime = dur.getNumericValue()/86400000 ; + // gs.info ("elapsedTime" + elapsedTime) + // Check to see when the item was created + if (elapsedTime <= 2) aging = '0-2 Days'; + if (elapsedTime > 2) aging = '3-4 Days'; + if (elapsedTime > 4) aging = '5-7 Days'; + if (elapsedTime > 7) aging = '8-15 Days'; + if (elapsedTime > 15) aging = '16-30 Days'; + if (elapsedTime > 30) aging = '31-60 Days'; + if (elapsedTime > 60) aging = '61-90 Days'; + if (elapsedTime > 90) aging = 'Over 90 Days'; + + rec.setWorkflow(false); // Skip any Business Rules + rec.autoSysFields(false); // Do not update system fields + rec.aging_category = aging; + rec.update(); + } From a63cb0cf3adde4e6d89158cfc9a7fd8b2ef07980 Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:44:22 +0530 Subject: [PATCH 3/6] Delete Server-Side Components/Scheduled Jobs/readme.md --- Server-Side Components/Scheduled Jobs/readme.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Server-Side Components/Scheduled Jobs/readme.md diff --git a/Server-Side Components/Scheduled Jobs/readme.md b/Server-Side Components/Scheduled Jobs/readme.md deleted file mode 100644 index 455fe75b4b..0000000000 --- a/Server-Side Components/Scheduled Jobs/readme.md +++ /dev/null @@ -1 +0,0 @@ -Find out all the cases with the difference in their create date and current date and put them in different buckets of their age. Then you can report on the aging. With this you will be able to run the Bucket Group reporting on tables without using PA. From 744e52f388af20c6e05371aaf45b73193170d639 Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:45:44 +0530 Subject: [PATCH 4/6] Create readme.md --- .../Scheduled Jobs/Bucket Group Reporting/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md diff --git a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md new file mode 100644 index 0000000000..455fe75b4b --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md @@ -0,0 +1 @@ +Find out all the cases with the difference in their create date and current date and put them in different buckets of their age. Then you can report on the aging. With this you will be able to run the Bucket Group reporting on tables without using PA. From 973d16118701a4bb0b386ec157e4f7f1ac33b8e2 Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Tue, 7 Oct 2025 01:14:03 +0530 Subject: [PATCH 5/6] Update Bucket Group Age Calculation.js adding the line 2 state values and defining variables and removing the log statements --- .../Bucket Group Age Calculation.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js index 89b9b0ec42..406a8ef8fb 100644 --- a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js +++ b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/Bucket Group Age Calculation.js @@ -1,13 +1,12 @@ var rec = new GlideRecord('case'); // any table which you want to use - rec.addEncodedQuery('stateNOT IN60,40, 20'); // filtering out all the closed/cancelled cases + rec.addEncodedQuery('stateNOT IN60,40, 20'); // filtering out all the closed/cancelled cases 60 is closed, 40 is cancelled, 20 is rejected rec.query(); while (rec.next()) { var openedDate = new GlideDateTime(rec.opened_at.getDisplayValue()); var dur = GlideDateTime.subtract(openedDate,actualDateTime ); - //gs.info("dur"+dur.getNumericValue()) ; - elapsedTime = dur.getNumericValue()/86400000 ; - // gs.info ("elapsedTime" + elapsedTime) + var elapsedTime = dur.getNumericValue()/86400000 ; // Check to see when the item was created + var aging; if (elapsedTime <= 2) aging = '0-2 Days'; if (elapsedTime > 2) aging = '3-4 Days'; if (elapsedTime > 4) aging = '5-7 Days'; @@ -19,6 +18,6 @@ var rec = new GlideRecord('case'); // any table which you want to use rec.setWorkflow(false); // Skip any Business Rules rec.autoSysFields(false); // Do not update system fields - rec.aging_category = aging; + rec.aging_category = aging; // updating aging category with defined buckets allocated above rec.update(); } From 105862d50cf5c8873ec4052b87f99e286e9729b5 Mon Sep 17 00:00:00 2001 From: spnegi <150329891+spnegi@users.noreply.github.com> Date: Tue, 7 Oct 2025 01:18:31 +0530 Subject: [PATCH 6/6] Update readme.md --- .../Bucket Group Reporting/readme.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md index 455fe75b4b..93f1b66c94 100644 --- a/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md +++ b/Server-Side Components/Scheduled Jobs/Bucket Group Reporting/readme.md @@ -1 +1,25 @@ Find out all the cases with the difference in their create date and current date and put them in different buckets of their age. Then you can report on the aging. With this you will be able to run the Bucket Group reporting on tables without using PA. + +In ServiceNow Performance Analytics (PA), a Bucket Group is used to categorize or group data into defined ranges or segments, which helps make reports and indicators more meaningful and easier to analyze. This code will help you to categorize the tickets based on any defined ranges or segments you want. Based on this defined ranges or segments you can get any king of reporting without using PAs in ServiceNow. + +This code lets you create custom ranges (buckets) to classify numerical data (like durations, scores, or counts) into meaningful labels.For example, instead of showing raw numbers like 2, 7, 14, 30 days, you can define buckets such as: + +0–5 days → “Very Fast” + +6–10 days → “Fast” + +11–20 days → “Average” + +>20 days → “Slow” + +Then, these labels can be displayed in your dashboards, or reports, making the data easier to interpret. + +Real time user cases: + +1. Score or metric segmentation +Divide customer satisfaction scores into Low, Medium, High ranges. + +2. Priority or risk scoring +Convert numeric risk scores into descriptive ranges (Low Risk, Medium Risk, High Risk). + +Also, SLA uses the tickets to be defined in SLA number or breach date. It doesnt let you define any segment or categorize the data. It helps you define the reporting basis on your category or segment