This article demonstrates how to detect statistical outliers in an SAP Analytics Cloud table using Z-Score analysis and ResultSet scripting.
The script calculates the mean and standard deviation of the values returned by a table and then determines how many standard deviations each member sits from the average.
Members whose Z-Score exceeds a defined threshold are identified as statistical outliers and written dynamically to a text widget.

// Get result set
var resultSet = Table_1.getDataSource().getResultSet();
var rowDims = Table_1.getDimensionsOnRows();
if (resultSet.length > 0 && rowDims.length > 0)
{
var count = resultSet.length;
var total = 0.0;
// Use the first row dimension
var dimId = rowDims[0];
// --------------------------------
// 1. Calculate mean
// --------------------------------
for (var i = 0; i < count; i++)
{
var value = ConvertUtils.stringToNumber(resultSet[i][Alias.MeasureDimension].rawValue);
total = total + value;
}
var mean = total / count;
// --------------------------------
// 2. Calculate standard deviation
// --------------------------------
var variance = 0.0;
for (var j = 0; j < count; j++)
{
var currentValue = ConvertUtils.stringToNumber(resultSet[j][Alias.MeasureDimension].rawValue);
var diff = currentValue - mean;
variance = variance + (diff * diff);
}
var stdDev = Math.sqrt(variance / count);
// --------------------------------
// 3. Detect outliers using Z-score
// --------------------------------
var outlierText = "No statistical outliers detected.";
if (stdDev !== 0.0)
{
for (var k = 0; k < count; k++)
{
var value2 = ConvertUtils.stringToNumber(resultSet[k][Alias.MeasureDimension].rawValue);
var zScore = (value2 - mean) / stdDev;
var absZ = Math.abs(zScore);
if (absZ > 2.0)
{
var memberName = resultSet[k][dimId].description;
var roundedZ = Math.round(zScore * 10.0) / 10.0;
outlierText =
memberName +
'\n'
+
" is a statistical outlier (Z-score: " +
ConvertUtils.numberToString(roundedZ) +
")";
break;
}
}
}
// --------------------------------
// 4. Output
// --------------------------------
Text_1.applyText(outlierText);
}
Code language: JavaScript (javascript)
