public JourneyQualityMeasureValue Measure(DatePeriodValue period = null) { var resultAvailability = new List <decimal>(); var resultLatency = new List <decimal>(); var resultExperience = new List <decimal>(); foreach (var map in this.FeatureMap) { QualityMeasureValue measure; if (period != null) { measure = map.Feature.Measure(period); } else { measure = map.Feature.Measure(); } if (measure.HasData) { resultAvailability.Add(measure.Availability); resultLatency.Add(measure.Latency); resultExperience.Add(measure.Experience); } } if (resultAvailability.Count > 0 || resultExperience.Count > 0 || resultLatency.Count > 0) { return(new JourneyQualityMeasureValue( this.AvailabilitySlo, this.LatencySlo, this.ExperienceSlo, QualityUtils.CalculateMinimum(resultAvailability, round: 3), QualityUtils.CalculateMaximum(resultLatency, round: 3), QualityUtils.CalculateMinimum(resultExperience, round: 3))); } else { return(new JourneyQualityMeasureValue(this.AvailabilitySlo, this.LatencySlo, this.ExperienceSlo, false)); } }