- A configurable Chi Square algorithm - A configurable version of standard Chi Square algorithm where minimum conversions per variant can be configured. Chi Square is a algorithm often used in statistical calculations to determine whether there is a significant difference between different variants in a test.
- Reach Conversion Goal algorithm - A simple algorithm that just make the variant that first a a specific number of conversions to the winner. Can be useful in demos etc.
Create your own analytics provider
- Extend the class: com.sdl.experienceoptimization.analytics.AnalyticsManagerBase
- Implement 3 methods:
- trackView() - track a view of an experiment variant
- trackConversion() - track a conversion of an experiment variant (normally a click on the experiment banner)
- getAnalyticsResults() - get tracking data to be presented in the XO experiment dashboard
 
public class LocalAnalyticsManager extends AnalyticsManagerBase {    // Worker thread to asynchronously store tracking data    private static AnalyticsResultWorker resultWorker;    // DB repository for tracking data    private static AnalyticsResultRepository resultRepository;    @Override    public void trackView(ExperimentDimensions experimentDimensions, 
                          Map<String, String> metadata) {        // Submit view tracking data to the worker thread        //        this.resultWorker.submitTracking(new TrackedExperiment(experimentDimensions, 
                                                               ExperimentType.VIEW));    }    @Override    public void trackConversion(ExperimentDimensions experimentDimensions,
                                Map<String, String> metadata) {        // Submit conversion tracking data to the worker thread        //        this.resultWorker.submitTracking(new TrackedExperiment(experimentDimensions, 
                                                               ExperimentType.CONVERSION));    }    @Override    protected AnalyticsResults getStatisticsResults(Date startDate,                                                    Date endDate,                                                    StatisticsExperimentDimensions experimentDimensions,                                                    StatisticsTimeDimensions timeDimensions,                                                    List<String> extraDimensions,                                                    StatisticsFilters statisticsFilters,                                                    int startIndex,                                                    int maxResults) throws Exception {        List<AggregatedTracking> trackings = this.resultRepository.getTrackingResults(statisticsFilters);        SimpleAnalyticsResults results = new SimpleAnalyticsResults();        if ( trackings != null ) {            for (AggregatedTracking tracking : trackings) {                this.addAnalyticsResultsRow(results, tracking, experimentDimensions, timeDimensions);            }        }        return results;    }}The full source code for the local database provider is found here:
<Analytics implementationClass="[Analytics provider class name]" timeoutMilliseconds="5000" trackingRedirectUrl="/redirect/">    [Properties to the analytics provider ...]    ExperimentWinnerAlgorithmClassName>[Experiment winner class name]</ExperimentWinnerAlgorithmClassName>    [Properties to the algorithm...]</Analytics> Local Database Analytics Provider
- Download the precompiled package: https://github.com/NiclasCedermalm/xo-extensions/blob/master/xo-analytics-provider-localdb/compiled/local-analytics-provider.zip
- Unzip in it under ‘services’ in your XO query and management micro services
- Configure conf/smarttarget_conf.xml:
<Analytics 
    implementationClass="com.sdl.experienceoptimization.analytics.localdb.LocalAnalyticsManager" 
    timeoutMilliseconds="5000" trackingRedirectUrl="/redirect/“>    <!— Storage —>    <Storage url=“[JDBC URL]" className=“[JDBC Driver classname]" cacheTime="10000”/>    <!— How often the worker thread stores the results in the database —>    <TrackingStoreInterval>10000</TrackingStoreInterval>    <!— Winner algorithm -->
    <ExperimentWinnerAlgorithmClassName>       com.sdl.experienceoptimization.analytics.algorithm.ReachConversionGoalAlgorithm    </ExperimentWinnerAlgorithmClassName>    <ConversionGoal>10</ConversionGoal>    <!— Chi Square algorithm     <ExperimentWinnerAlgorithmClassName>       com.sdl.experienceoptimization.analytics.algorithm.ConfigurableChiSquareAlgorithm    </ExperimentWinnerAlgorithmClassName>    <MinimumConversionsPerVariant>100</MinimumConversionsPerVariant>         —>  </Analytics>- Restart your XO micro services and then you are all set!
<Analytics implementationClass="com.sdl.experienceoptimization.analytics.localdb.LocalAnalyticsManager" 
           timeoutMilliseconds="5000" trackingRedirectUrl="/redirect/“>    ...    <Dummy experimentId=“[EXPERIMENT ID, e.g. a9cf5654-c6ab-41ec-a8da-3b13de130c0c]">        <MinViews>[MAX VIEWS, e.g. 230]</MinViews>        <MaxViews>[MIN VIEWS, e.g. 300]</MaxViews>        <MinConversions>[MIN CONVERSIONS, e.g. 0]</MinConversions>        <MaxConversions>[MAX CONVERSIONS, e.g. 70]</MaxConversions>        <Winner>            <Publication>[PUBLICATION ID, e.g. tcm:0-3-1]</Publication>            <VariantIndex>[WINNER VARIANT ID, e.g. 1]</VariantIndex>            <MinConversions>[WINNER MIN CONVERSIONS, e.g. 50]</MinConversions>            <MaxConversions>[WINNER MAX CONVERSIONS; e.g. 100]</MaxConversions>        </Winner>    </Dummy></Analytics> 
									 Translate
 Translate 
		
 
				