@Override public Measure calculate(FormulaData data, FormulaContext context) { double sum=0.0; double count=0.0; boolean hasValue=false; for (FormulaData child : data.getChildren()) { Measure measure = child.getMeasure(context.getTargetMetric()); Measure weightingMeasure = child.getMeasure(weightingMetric); if (MeasureUtils.haveValues(measure, weightingMeasure)) { sum += measure.getValue() * weightingMeasure.getValue(); count += weightingMeasure.getValue(); hasValue=true; } } if (!hasValue && !zeroIfNoValues) { return null; } double result = Double.doubleToRawLongBits(count)==0L ? 0.0 : sum/count; return new Measure(context.getTargetMetric(), result); } }