private void SetSingleAreaValue(IGroupDataReader groupDataReader, Area area, Grouping grouping, TimePeriod period) { IList<CoreDataSet> dataList = groupDataReader.GetCoreData(grouping, period, area.Code); if (dataList.Count == 1) { var data = dataList.First(); if (data.IsValueValid) { Value = data.Value; if (area.IsGpPractice == false) { // Calculate average var areasReader = ReaderFactory.GetAreasReader(); int count = area.IsCountry ? areasReader.GetAreaCountForAreaType(grouping.AreaTypeId) : areasReader.GetChildAreaCount(area.Code, grouping.AreaTypeId); Value /= count; } } } else if (dataList.Count > 1) { throw new FingertipsException(string.Format( "More data than expected on determination of QOF list size: area:{0}", area.Code)); } }