/// <summary> /// Ensures statistics data for specific AB variant. /// </summary> /// <param name="variantName">Variant name</param> private void EnsureVariantStatisticsData(string variantName) { if (!VariantsStatisticsData.ContainsKey(variantName)) { // Select both abvisitfirst and abvisitreturn by default string visitType = "abvisit%"; // If counting methodology is set to visitor conversion, select abvisitfirst only string countingMethodology = drpCountingMethodology.Items[mDrpCountingMethodologyIndex].Value; if (countingMethodology == "absessionconversionfirst") { visitType = "abvisitfirst"; } string conversionsCodename = countingMethodology + ";" + ABTest.ABTestName + ";" + variantName; string visitsCodename = visitType + ";" + ABTest.ABTestName + ";" + variantName; // Get conversions count and value DataRow conversions = GetHits(conversionsCodename, "Sum(HitsCount), Sum(HitsValue)", mDrpCultureValue, GetConversionCondition()); int conversionsCount = ValidationHelper.GetInteger(conversions[0], 0); double conversionsValue = ValidationHelper.GetDouble(conversions[1], 0); // Get visits count int visits = ValidationHelper.GetInteger(GetHits(visitsCodename, "Sum(HitsCount)", mDrpCultureValue)[0], 0); // Add statistics data VariantsStatisticsData.Add(variantName, new ABVariantStatisticsData(conversionsCount, conversionsValue, visits)); // Add conversion rate intervals if ((VariantPerformanceCalculator != null) && (visits > 0) && (conversionsCount <= visits)) { ABConversionRateIntervals.Add(variantName, VariantPerformanceCalculator.GetConversionRateInterval(conversionsCount, visits)); } } }
/// <summary> /// Ensures statistics data for specific AB variant. /// </summary> /// <param name="variantGuid">Variant GUID</param> private void EnsureVariantStatisticsData(Guid variantGuid) { if (!VariantsStatisticsData.ContainsKey(variantGuid)) { // Select both abvisitfirst and abvisitreturn by default string visitType = "abvisit%"; // If counting methodology is set to visitor conversion, select abvisitfirst only string countingMethodology = drpCountingMethodology.Items[drpCountingMethodologyIndex].Value; if (countingMethodology == ABTestConstants.ABSESSIONCONVERSION_FIRST) { visitType = "abvisitfirst"; } string conversionsCodename = countingMethodology + ";" + ABTest.ABTestName + ";" + variantGuid; string visitsCodename = visitType + ";" + ABTest.ABTestName + ";" + variantGuid; string conversion = ValidationHelper.GetString(drpConversions.SelectedValue, string.Empty); var testConversions = ABTest.ABTestConversionConfiguration.ABTestConversions.Select(c => c.ConversionName); // Get conversions count and value DataRow conversions = GetHits(conversionsCodename, "Sum(HitsCount), Sum(HitsValue)", null, GetConversionCondition(conversion, testConversions)); int conversionsCount = ValidationHelper.GetInteger(conversions[0], 0); double conversionsValue = ValidationHelper.GetDouble(conversions[1], 0); // Get visits count int visits = ValidationHelper.GetInteger(GetHits(visitsCodename, "Sum(HitsCount)", null)[0], 0); // Add statistics data VariantsStatisticsData.Add(variantGuid, new ABVariantStatisticsData(conversionsCount, conversionsValue, visits)); // Add conversion rate intervals if ((VariantPerformanceCalculator != null) && (visits > 0) && (conversionsCount <= visits)) { ABConversionRateIntervals.Add(variantGuid, VariantPerformanceCalculator.GetConversionRateInterval(conversionsCount, visits)); } } }