Пример #1
0
    /// <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));
            }
        }
    }