protected override IReadOnlyCollection <KPI> Calculate() { var spotCampaigns = _calculationContext.ActiveCampaigns.Value .Where(c => c.DeliveryType == CampaignDeliveryType.Spot) .ToArray(); var ratingCampaigns = _calculationContext.ActiveCampaigns.Value .Where(c => c.DeliveryType == CampaignDeliveryType.Rating) .ToArray(); var spotCampaignsDayParts = KPICalculationHelpers.GetCampaignsDayParts(spotCampaigns); var ratingCampaignsDayParts = KPICalculationHelpers.GetCampaignsDayParts(ratingCampaigns); var kpiValue = ratingCampaignsDayParts.Sum(d => d.BaseDemographRatings) + spotCampaignsDayParts.Sum(d => d.BaseDemographRatings); return(new[] { new KPI { Name = ScenarioKPINames.BaseDemographicRatings, Displayformat = KPICalculationHelpers.DisplayFormats.LargeNumber, Value = kpiValue } }); }
public void GetDayPartByDowAndTimeString_ShouldReturnDayPart() { //Arrange var expected = new DayPart { DayPartName = "2100-2359(Mon-Fri)", Timeslices = new List <Timeslice> { new Timeslice { DowPattern = new List <string> { "Mon", "Tue", "Wed", "Thu", "Fri" }, FromTime = "21:00", ToTime = "23:59" } } }; //Act var result = KPICalculationHelpers.GetDayPartByDowTimeString(_dayParts, expected.DayPartName); //Assert Assert.IsTrue(result.DayPartName == expected.DayPartName); }
public void GetDayPartByDowAndTimeStringAndOnlyOneDow_ShouldReturnDayPart() { //Arrange var expected = new DayPart { DayPartName = "1000-1259(Mon-Mon)", Timeslices = new List <Timeslice> { new Timeslice { DowPattern = new List <string> { "Mon" }, FromTime = "10:00", ToTime = "12:59" } } }; //Act var result = KPICalculationHelpers.GetDayPartByDowTimeString(_dayParts, expected.DayPartName); //Assert Assert.IsTrue(result.DayPartName == expected.DayPartName); }
public void GetDayPartByDowAndTimeStringAndDayPartDoesNotExist_ShouldReturnNull() { //Arrange var dowTimeString = "2000-2559(Mon-Tue)"; //Act var result = KPICalculationHelpers.GetDayPartByDowTimeString(_dayParts, dowTimeString); //Assert Assert.IsNull(result); }
/// <summary> /// Calculates analysis group campaign KPIs /// </summary> /// <param name="campaigns"></param> /// <param name="campaignRecommendations"></param> /// <returns></returns> public static AnalysisGroupCampaignKPI CalculateAnalysisGroupCampaignKPIs(IEnumerable <Campaign> campaigns, IEnumerable <Recommendation> campaignRecommendations) { var bookedRecommendations = campaignRecommendations .Where(r => r.Action == KPICalculationHelpers.SpotTags.Booked); var cancelledRecommendations = campaignRecommendations .Where(r => r.Action == KPICalculationHelpers.SpotTags.Cancelled); var totalCampaignActualRatings = campaigns.Sum(c => c.ActualRatings); var ratingsDelivery = totalCampaignActualRatings + bookedRecommendations.Sum(r => r.SpotRating) - cancelledRecommendations.Sum(r => r.SpotRating); var totalCampaignTargetRatings = campaigns.Sum(c => c.TargetRatings); var deliveryPercentage = Math.Round( totalCampaignTargetRatings == 0 ? 0 : ratingsDelivery / totalCampaignTargetRatings * 100, 2, MidpointRounding.AwayFromZero); var totalRecommendationsNominalPrice = bookedRecommendations.Sum(r => r.NominalPrice) - cancelledRecommendations.Sum(r => r.NominalPrice); var campaignRevenueBooked = campaigns.Sum(c => c.RevenueBooked); var revenueBooked = totalRecommendationsNominalPrice + campaignRevenueBooked.Value; var poolValue = revenueBooked - campaigns.Sum(c => c.RevenueBudget); var campaignDayParts = KPICalculationHelpers.GetCampaignsDayParts(campaigns); var spotsCount = campaignDayParts.Sum(d => d.TotalSpotCount) + bookedRecommendations.Count() - cancelledRecommendations.Count(); var zeroRatedSpotsCount = campaignDayParts.Sum(d => d.ZeroRatedSpotCount) + bookedRecommendations.Count(x => x.SpotRating == 0) - cancelledRecommendations.Count(x => x.SpotRating == 0); return(new AnalysisGroupCampaignKPI { RatingsDelivery = (double)ratingsDelivery, DeliveryPercentage = (double)deliveryPercentage, RevenueBooked = revenueBooked, PoolValue = poolValue, Spots = spotsCount, ZeroRatedSpots = zeroRatedSpotsCount }); }
protected override IReadOnlyCollection <KPI> Calculate() { var kpiValue = 0; foreach (var campaign in _calculationContext.SmoothCampaigns.Value) { var percentage = KPICalculationHelpers.GetSmoothCampaignRatingPercentage(campaign, _calculationContext.CampaignMetrics.Value); if (percentage <= 0.75m) { kpiValue++; } } return(new[] { new KPI { Name = ScenarioKPINames.PercentBelow75, Displayformat = KPICalculationHelpers.DisplayFormats.LargeNumber, Value = kpiValue } }); }