compare two scores or current vs previous values
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-23-2025 02:19 PM
My client has a need to trend pm_project.work_effort at the record level.
I'd like to keep the solution entirely in PA rather than adding fields and/or business rules, etc.
The field: 'work_effort' is labeled: "Actual effort".
Can I use Bucket groups?
I've created a bucket group w/ three buckets
- increased (1-3)
- decreased (4-6)
- unchanged (7-9)
I've created a script: 'work effort direction'
I'd like to create an indicator "count of projects by work effort direction" with breakdown "PRJ Work Effort Direction".
The data collection job gets an error:
"Error during JavaScript evaluation com.snc.pa.dc.ScriptException: Cannot read property "work_effort" from nullTypeError: Cannot read property "work_effort" from null (<refname>; line 13) in script: var direction = function(curr_we, prev_we){...
In a PA Script, am I able to refer to "current" & "previous" ?
ANY COMMENTS GREATLY APPRECIATED@!@@@
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-23-2025 02:32 PM
Hi @mikereaves
Bucket groups in Performance Analytics are designed to classify a single numeric value into discrete ranges. They don’t automatically keep track of change over time — that’s why you’re trying to calculate an increase/decrease yourself.
In a PA collection script you can reference the current and previous sample, but be aware that previous will be null on the first record for a time series or whenever there’s no earlier sample. That’s why your code fails — you are unconditionally reading previous.work_effort.
- Add a null check so that you handle the first sample gracefully. You can also default to the current value if there is no previous record.
- Cast the work effort values to numbers in case they are stored as strings.
- Return one of the bucket keys (1, 4 or 7) based on the comparison.
var curr = current.work_effort || 0;
var prev = (previous && previous.work_effort) || curr;
// Convert to floats
curr = parseFloat(curr);
prev = parseFloat(prev);
if (curr > prev) {
return 1; // increased
}
if (curr < prev) {
return 4; // decreased
}
return 7; // unchanged
If you use this script on your indicator, your bucket group (1‑3 = increased, 4‑6 = decreased, 7‑9 = unchanged) will evaluate correctly and the data collection job will no longer throw a null error.
You can then define your indicator as a “count of projects” grouped by the custom breakdown you created.
💥 Was this answer useful? 👉 If so, click 👍 Helpful 👍 or Accept as Solution ✅ 💡🛠️😀🙌