class AcquiaLiftReport in Acquia Lift Connector 7
Responsible retrieving and generating reports on the Acquia Lift agent.
Hierarchy
- class \AcquiaLiftReportBase implements \PersonalizeAgentReportInterface, AcquiaLiftReportInterface
- class \AcquiaLiftReport
Expanded class hierarchy of AcquiaLiftReport
File
- plugins/
agent_types/ AcquiaLiftAgent.inc, line 2136 - Provides an agent type for Acquia Lift
View source
class AcquiaLiftReport extends AcquiaLiftReportBase {
/**
* The threshold to use above which lift percentage will be positively noted.
*/
const LIFT_THRESHHOLD = 0;
/**
* The threshold to use above which stability will be positively noted.
*/
const STABILITY_THRESHOLD = 25;
/**
* Implements PersonalizeAgentReportInterface::renderStatsForOptionSet().
*/
public function renderStatsForOptionSet($option_set, $date_from, $date_to = NULL) {
$date_start = date('Y-m-d', $date_from);
if (empty($date_to)) {
$date_to = time();
}
$date_end = date('Y-m-d', $date_to);
$report_data = $this
->generateReportConfiguration(array(
'start' => $date_start,
'end' => $date_end,
));
if (!isset($report_data['confidence'])) {
$this
->loadConfidenceData($report_data);
if (isset($report_data['raw']['confidence']['error']) || !isset($report_data['raw']['confidence']['data'])) {
return array();
}
else {
$data = $this
->extractConfidenceReportData($report_data['raw']['confidence']['data']['items']);
}
}
$decisions = $goals = 0;
// Get a total count of all decisions made for this Option Set and all
// goals received.
foreach ($data['features'][self::NO_FEATURES] as $choice => $info) {
list($decision_name, $option_id) = explode(':', $choice);
if ($decision_name != $option_set->decision_name) {
continue;
}
$decisions += $info['decisions'];
$goals += $info['goals'];
}
$report[] = format_plural($decisions, '1 view', '@count views');
$report[] = format_plural($goals, '1 goal', '@count goals');
return $report;
}
/**
* Implements PersonalizeAgentReportInterface::buildCampaignReports().
*/
public function buildCampaignReports($options) {
$report_data = $this
->loadReportData($options);
$reports = array(
'overview' => $this
->buildOverviewReport($report_data),
'experiment' => $this
->buildAllConversionReports($report_data),
'context' => $this
->buildContextReport($report_data),
'stability' => $this
->buildStabilityReport($report_data),
'targeting' => $this
->buildReportContextSelection($report_data),
);
$reports['#has_data'] = isset($reports['overview']['shown']['#title']) ? $reports['overview']['shown']['#title'] > 0 : FALSE;
if (!is_array($report_data['status']) || !is_array($report_data['confidence']) || !is_array($report_data['targeting']) || !is_array($report_data['potential_context'])) {
drupal_set_message(t('There was a problem retrieving the report data. Please try again later.'), 'error');
}
else {
if ($reports['#has_data'] && $report_data['status']['all']['total_confident'] == 0) {
drupal_set_message($this
->getLowConfidenceMessage(), 'warning');
}
}
return $reports;
}
/**
* Loads all of the data necessary to generate the reports for the agent.
*
* @param $options
* An array of report filter options.
* - decision: Preselected decision to display.
* - start: The start date of the report.
* - from: The end date of the report.
* - goal: (optional) A selected goal for reporting; defaults to all.
* - conversion_metric: (optional) Metric to display within the conversion report. One
* of 'rate' (conversion rate) or 'value' (conversion value).
* @return array
* The reporting data for the date range as an array with keys for
* - status: The general agent status report data
* - confidence: The confidence report data
* - targeting: The targeting report data
*/
protected function loadReportData($options) {
$report_data = $this
->generateReportConfiguration($options);
$this
->loadConversionReportData($report_data);
// Context filters.
if (!isset($report_data['potential_context'])) {
$this
->loadContextFilterData($report_data);
if (isset($report_data['raw']['potential_context']['error'])) {
$report_data['potential_context'] = FALSE;
}
else {
$report_data['potential_context'] = $this
->extractPotentialTargetingValues($report_data['raw']['potential_context']['data']);
}
}
// Agent status
if (!isset($report_data['status'])) {
$this
->loadAgentStatusData($report_data);
if (isset($report_data['raw']['status']['error'])) {
$report_data['status'] = FALSE;
}
else {
$report_data['status'] = $this
->extractOverviewReportData($report_data['raw']['status']['data'][$report_data['machine_name']]);
}
}
// Confidence report data.
if (!isset($report_data['confidence'])) {
$this
->loadConfidenceData($report_data);
if (isset($report_data['raw']['confidence']['error'])) {
$report_data['confidence'] = FALSE;
}
else {
$report_data['confidence'] = $this
->extractConfidenceReportData($report_data['raw']['confidence']['data']['items']);
}
}
// Targeting report data.
if (!isset($report_data['targeting'])) {
$this
->loadTargetingData($report_data);
if (isset($report_data['raw']['targeting']['error']) || !isset($report_data['raw']['targeting']['data']['items'])) {
$report_data['targeting'] = FALSE;
}
else {
$report_data['targeting'] = $this
->extractTargetingReportData($report_data['raw']['targeting']['data']['items']);
}
}
if (!isset($report_data['extracted_total'])) {
// Combine data to form all campaign report data.
$this
->extractCampaignReportData($report_data);
}
return $report_data;
}
/**
* Alter the report data returned from API calls to combine into data that is
* ready for presentation within individual campaign reports.
*
* @param array $report_data
* The report data loaded and formatted from Acquia Lift.
*
* @see loadReportData()
* @see extractOverviewReportData()
* @see extractConfidenceReportData()
* @see extractPotentialTargetingValues()
* @see extractTargetingReportData()
*/
protected function extractCampaignReportData(&$report_data) {
$report_data['extracted_total'] = TRUE;
if (!is_array($report_data['status']) || !is_array($report_data['confidence']) || !is_array($report_data['targeting']) || !is_array($report_data['potential_context'])) {
return;
}
$agent_data = $this->agent
->getData();
$isAdaptive = $agent_data['decision_style'] === 'adaptive';
// Determine overall confidence based on confidence in choices.
$total_confident = 0;
if (isset($report_data['confidence']['features'][self::NO_FEATURES])) {
foreach ($report_data['confidence']['features'][self::NO_FEATURES] as $choice) {
if ($choice['significant']) {
$total_confident++;
}
}
}
// Determine the overall time running for this agent.
$interval_start = new DateTime();
$interval_start
->setTimestamp($this->agent
->getStartTime());
$interval = date_diff($interval_start, date_create());
// Update the status report data (used for overview report).
foreach ($report_data['status'] as &$report) {
$report['total_lift_positive'] = $report['unformatted']['total_lift'] > self::LIFT_THRESHHOLD && $total_confident > 0;
$report['total_confident'] = $total_confident;
$report['confidence_level'] = $total_confident > 0 ? 'high' : 'low';
$report['time_running'] = isset($interval) ? $interval
->format('%mm, %dd') : '1d';
}
// Update context report data.
$option_numbers = array();
if (isset($report_data['confidence']['features'])) {
foreach ($report_data['confidence']['features'] as $feature_string => $feature) {
// Get the user-friendly feature label from the possible contextual values.
$feature_label = $feature_string;
if (isset($report_data['potential_context'][$feature_string])) {
$feature_label = $report_data['potential_context'][$feature_string]['label'];
}
// This report only shows features that can be targeted.
if (!isset($report_data['targeting'][$feature_string])) {
continue;
}
// Get the data from the targeting report for this feature.
$targeting_data = $report_data['targeting'][$feature_string];
// Create a hash of choice numbers for stability report.
// Don't show system-defined features.
if ($targeting_data['system'] === TRUE) {
continue;
}
foreach ($feature as $choice_id => $choice) {
$report_data['context']['features'][$feature_string][$choice_id] = array(
'counter' => $choice['counter'],
'choice_id' => $choice['choice_id'],
'best' => $isAdaptive && $targeting_data['favored_selection'] === $choice['raw_label'],
'decisions' => $choice['decisions'],
'lift_default' => $choice['control'] ? self::DATA_NA : $choice['lift_default'],
'lift_default_positive' => $choice['unformatted']['lift_default'] > self::LIFT_THRESHHOLD,
'lift_random' => $choice['lift_random'],
'lift_random_positive' => $choice['unformatted']['lift_random'] > self::LIFT_THRESHHOLD,
'control' => $choice['control'],
'feature_label' => $feature_label,
'goals' => $choice['goals'],
'conversion' => $choice['conversion'],
);
$option_numbers[$feature_string . '|' . $choice['raw_label']] = $choice['counter'];
}
}
}
// Build the experiment report data
$report_data['experiment']['choices'] = isset($report_data['confidence']['features'][self::NO_FEATURES]) ? $report_data['confidence']['features'][self::NO_FEATURES] : array();
// Build the stability report data
foreach ($report_data['targeting'] as $feature_string => &$feature) {
if ($feature['system']) {
unset($report_data['targeting'][$feature_string]);
continue;
}
// Get the user-friendly feature label from the possible contextual values.
$feature['feature_label'] = $feature['label'];
if (isset($report_data['potential_context'][$feature_string])) {
$feature['feature_label'] = $report_data['potential_context'][$feature_string]['label'];
}
if (isset($option_numbers[$feature_string . '|' . $feature['favored_selection']])) {
$feature['favored_selection_number'] = $option_numbers[$feature_string . '|' . $feature['favored_selection']];
}
if (!$isAdaptive) {
unset($feature['favored_selection_number']);
unset($feature['favored_selection']);
}
}
}
/**
* Returns a render array representing the overview report for the given dates.
*
* @param array $report_data
* All of the reporting data for the campaign.
* @return array
* A render array representing the overview report.
*/
protected function buildOverviewReport($report_data) {
$report = $report_data['status'];
if ($report === FALSE) {
return array();
}
if ($report_data['today_only']) {
$overview_report = $report_data['status']['today'];
}
else {
$overview_report = $report_data['status']['all'];
}
// Create report renderable.
$build = array();
$build['test_type'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#title' => $overview_report['test_type'],
'#description' => t('test type'),
'#attributes' => array(
'id' => 'acquia-lift-overview-type',
),
);
if (isset($overview_report['time_running'])) {
$build['total_running'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#attributes' => array(
'id' => 'acquia-lift-overview-running',
),
'#title' => $overview_report['time_running'],
'#description' => t('total time running'),
);
}
$build['shown'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#attributes' => array(
'id' => 'acquia-lift-overview-shown',
),
'#title' => $overview_report['total_shown'],
'#description' => format_plural($overview_report['total_shown'], 'time shown', 'times shown'),
);
$build['goals'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#attributes' => array(
'id' => 'acquia-lift-overview-goals',
),
'#title' => $overview_report['total_goals'],
'#description' => t('goals met'),
);
if ($overview_report['total_goals_positive']) {
$build['goals']['#attributes']['class'] = array(
'acquia-lift-report-positive',
);
}
/*
* @todo: Figure out a way to present and explain this information so
* that we can include these figures.
$build['lift'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#attributes' => array(
'id' => 'acquia-lift-overview-lift',
),
'#title' => $overview_report['total_lift'],
'#description' => t('Predicted lift/control'),
'#attributes' => array(
'class' => array(
$overview_report['total_lift_positive'] ? 'acquia-lift-report-positive' : 'acquia-lift-report-negative',
),
),
);
$build['confidence'] = array(
'#type' => 'container',
'#theme' => 'acquia_lift_report_overview',
'#attributes' => array(
'id' => 'acquia-lift-overview-confidence',
),
'#title' => t('Confidence'),
'#description' => $overview_report['confidence_level'] == 'high' ? format_plural($overview_report['total_confident'], 'High confidence, 1 var.', 'High confidence, @count vars.') : t('Low confidence'),
'#attributes' => array(
'class' => array(
$overview_report['confidence_level'] == 'high' ? 'acquia-lift-report-positive' : 'acquia-lift-report-negative',
),
),
'#total_confident' => $overview_report['total_confident'],
);
*/
return $build;
}
/**
* Returns a render array representing the context report.
*
* @param array $report_data
* Reporting data for the selected dates and decision.
* @return array
* A render array representing the variation set report.
*/
protected function buildContextReport($report_data) {
$build = array();
if ($report_data['confidence'] === FALSE || !isset($report_data['context']['features'])) {
return array();
}
$header = array(
t('Var.'),
t('Name'),
t('Context'),
t('Shown'),
t('Goals'),
t('Conversion rate'),
t('Lift over control'),
t('Lift over random'),
);
$rows = array();
foreach ($report_data['context']['features'] as $feature_string => $feature) {
foreach ($feature as $choice) {
$lift_default_classes = array();
if (!$choice['control']) {
$lift_default_classes = $choice['lift_default_positive'] ? 'acquia-lift-report-positive' : 'acquia-lift-report-negative';
}
$row = array();
$row[] = $this
->getVariationLabel($choice['counter'] - 1, $choice['control']);
if ($choice['control']) {
$row[] = t('Control: ') . $choice['choice_id'];
}
else {
$row[] = $choice['choice_id'];
}
$row[] = array(
'data' => $choice['best'] ? $choice['feature_label'] . ' <span class="acquia-lift-best">' . t('best') . '</span>' : $choice['feature_label'],
'class' => $choice['best'] ? array(
'acquia-lift-context-best',
) : array(),
);
$row[] = $choice['decisions'];
$row[] = $choice['goals'];
$row[] = $choice['conversion'];
$row[] = array(
'data' => $choice['lift_default'],
'class' => $lift_default_classes,
);
$row[] = array(
'data' => $choice['lift_random'],
'class' => $choice['lift_random_positive'] ? array(
'acquia-lift-report-positive',
) : array(
'acquia-lift-report-negative',
),
);
$rows[] = array(
'data' => $row,
'class' => $choice['control'] ? array(
'acquia-lift-report-control',
) : array(),
'no_striping' => $choice['control'],
'data-acquia-lift-feature' => $feature_string,
);
}
}
$build['content'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#sticky' => FALSE,
);
return $build;
}
/**
* Returns a render array representing the stability report for targeting
* features for the given dates.
*
* @param array $report_data
* Reporting data for the selected dates and decision.
* @return array
* A render array representing the targeting report
*/
protected function buildStabilityReport($report_data) {
$build = array();
if ($report_data['targeting'] === FALSE) {
return array();
}
$data = $report_data['targeting'];
$rows = array();
$show_favored_selection = FALSE;
foreach ($data as $feature => $f) {
$row_data = array(
$f['feature_label'],
);
if (isset($f['favored_selection_number'])) {
$show_favored_selection = TRUE;
$row_data[] = $this
->getVariationLabel($f['favored_selection_number'] - 1, $f['favored_selection_number'] == 1);
}
$row_data[] = array(
'data' => $f['percent_traffic'],
'class' => array(
$f['percent_traffic_graph'],
),
);
$row_data[] = array(
'data' => $f['stability'],
'class' => $f['stability_positive'] ? array(
'acquia-lift-report-positive',
) : array(
'acquia-lift-report-negative',
),
);
$rows[] = array(
'data' => $row_data,
'data-acquia-lift-feature' => $feature,
);
}
$header[] = t('Context');
if ($show_favored_selection) {
$header[] = t('Best Variation');
}
$header[] = t('Percent of Traffic');
$header[] = t('Stability');
$build['content'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#sticky' => FALSE,
);
return $build;
}
/**
* Returns a form input array for the context selector.
*
* @param array $report_data
* Reporting data for the selected dates and decision.
* @return array
* A render array representing the variation set report.
*/
protected function buildReportContextSelection($report_data) {
if ($report_data['potential_context'] === FALSE || $report_data['targeting'] === FALSE) {
return array();
}
$context_values = array();
foreach ($report_data['targeting'] as $code => $feature) {
if ($feature['system'] === TRUE) {
continue;
}
if (isset($report_data['potential_context'][$code])) {
$type = empty($report_data['potential_context'][$code]['type']) ? t('Other') : $report_data['potential_context'][$code]['type'];
$context_values[$type][$code] = $report_data['potential_context'][$code]['name'];
}
else {
$type = t('Other');
$context_values[$type][$code] = $code;
}
}
if (count($context_values) <= 1) {
return array();
}
return array(
'#title' => t('Context: '),
'#type' => 'select',
'#options' => $context_values,
'#multiple' => TRUE,
);
}
/**
* Extracts the required confidence report data from the items returned by Acquia Lift.
*
* @param $items
* An array of items as return from Acquia Lift.
* @return array
* An associative array with information about the performance of each choice.
*/
protected function extractConfidenceReportData($items) {
if (empty($items)) {
return array();
}
$data = array(
'point' => $items[0]['point'],
'features' => array(),
'goal_value_differential' => FALSE,
);
$last_group = '';
$counter = 1;
foreach ($items as $i => $item) {
// Check to see if we are in a new grouping of choices.
$check = $item['feature'] . '|' . $item['point'];
if ($last_group !== $check) {
$last_group = $check;
$counter = 1;
}
else {
$counter++;
}
$choice = $option_id = $item['choice'];
$choice_id = $choice;
if (strpos($choice, ':') !== FALSE) {
list($decision_name, $option_id) = explode(':', $choice);
// @todo: Would like to get rid of this function call in order to make
// the class unit-testable.
if ($option_label = personalize_get_option_label_for_decision_and_choice($decision_name, $option_id)) {
$choice_id = $option_label;
}
}
$data['features'][$item['feature']][$choice] = array(
'unformatted' => array(
'lift_default' => $item['lift']['default'],
'lift_random' => $item['lift']['random'],
),
'counter' => $counter,
'choice_id' => $choice_id,
'raw_label' => $option_id,
'decisions' => format_plural($item['totals']['count'], '1 time', '@count times'),
'goals' => $item['totals']['goals'],
'value' => $item['totals']['val'],
'estimated_value' => $this
->formatReportNumber($item['vMean'], TRUE, 4),
'estimated_lower' => $this
->formatReportNumber($item['bLo'], TRUE, 4),
'estimated_higher' => $this
->formatReportNumber($item['bHi'], TRUE, 4),
'goals_per_decision' => $item['totals']['goals'] == 0 ? self::DATA_NA : $this
->formatReportNumber($item['totals']['goalsPerDecision'], FALSE),
'value_per_decision' => $item['totals']['goals'] == 0 ? self::DATA_NA : $this
->formatReportNumber($item['totals']['valPerDecision'], FALSE),
'selections' => $item['count'],
'conversion' => $item['totals']['goals'] > 0 ? $this
->formatReportPercentage($item['totals']['goals'] / $item['totals']['count']) : self::DATA_NA,
'confidence' => $counter === 1 ? self::DATA_NA : $this
->formatReportPercentage($item['confidence'] / 100),
'lift_default' => $counter === 1 ? self::DATA_NA : $this
->formatReportPercentage($item['lift']['default'] / 100, TRUE),
'lift_random' => $this
->formatReportPercentage($item['lift']['random'] / 100, TRUE),
'significant' => $item['signif'],
'control' => $counter === 1,
);
if (!$data['goal_value_differential'] && $item['totals']['goals'] != $item['totals']['val']) {
$data['goal_value_differential'] = TRUE;
}
}
return $data;
}
/**
* Extracts the required targeting report data from the items returned by Acquia Lift.
*
* @param $items
* An array of items as return from Acquia Lift.
* @return array
* An associative array with feature codes as keys and associative arrays of info as
* values.
*/
protected function extractTargetingReportData($items) {
if (empty($items)) {
return array();
}
$data = array();
foreach ($items as $item) {
$feature = $item['feature'];
$favored_selection = 0;
foreach ($item['choices'] as $i => $choice) {
// Note: Choices are not in order of option.
if ($choice['score'] > $item['choices'][$favored_selection]['score']) {
$favored_selection = $i;
}
}
$data[$feature] = array(
'raw_label' => $item['label'],
'label' => $item['labelText'],
'favored_selection' => $item['choices'][$favored_selection]['label'],
'percent_traffic' => $this
->formatReportPercentage($item['percentTraffic']),
'percent_traffic_graph' => $this
->getGraphLevelClass($item['percentTraffic']),
'predicted_value' => $item['averageResponseValue'],
'stability' => $this
->formatReportNumber($item['stability']),
'stability_positive' => $item['stability'] > self::STABILITY_THRESHOLD,
'stability_level' => $item['stabilityLevel'],
'system' => strpos($item['label'], '[share-alt]') !== FALSE,
);
}
return $data;
}
/**
* Extracts potential targeting values from the raw data returned by Acquia
* Lift.
*
* @param $items
* An array of raw potential values.
* $return array
* An associative array of potential targeting features keyed by code.
*/
protected function extractPotentialTargetingValues($items) {
$data = array();
if (isset($items['potential']['features']) && !empty($items['potential']['features'])) {
foreach ($items['potential']['features'] as $feature) {
$data[$feature['code']] = array(
'type' => isset($feature['typeName']) ? $feature['typeName'] : '',
'name' => $feature['name'] === '-' || $feature['name'] === '0' ? $feature['code'] : $feature['name'],
);
$data[$feature['code']]['label'] = empty($data[$feature['code']]['type']) ? $data[$feature['code']]['name'] : $data[$feature['code']]['type'] . ': ' . $data[$feature['code']]['name'];
}
}
return $data;
}
/**
* Gets the appropriate class name for a graph indicating percentage.
*
* @param $value
* The percentage value expressed as a number between 0 and 1.
*/
protected function getGraphLevelClass($value) {
if ($value >= 1) {
return 'acquia-lift-graph-level-5';
}
else {
if ($value >= 0.8) {
return 'acquia-lift-graph-level-4';
}
else {
if ($value >= 0.6 && $value < 0.8) {
return 'acquia-lift-graph-level-3';
}
else {
if ($value >= 0.4 && $value < 0.6) {
return 'acquia-lift-graph-level-2';
}
else {
if ($value >= 0.2 && $value < 0.4) {
return 'acquia-lift-graph-level-1';
}
else {
return 'acquia-lift-graph-level-0';
}
}
}
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AcquiaLiftReport:: |
public | function | Implements PersonalizeAgentReportInterface::buildCampaignReports(). | |
AcquiaLiftReport:: |
protected | function | Returns a render array representing the context report. | |
AcquiaLiftReport:: |
protected | function | Returns a render array representing the overview report for the given dates. | |
AcquiaLiftReport:: |
protected | function | Returns a form input array for the context selector. | |
AcquiaLiftReport:: |
protected | function | Returns a render array representing the stability report for targeting features for the given dates. | |
AcquiaLiftReport:: |
protected | function | Alter the report data returned from API calls to combine into data that is ready for presentation within individual campaign reports. | |
AcquiaLiftReport:: |
protected | function | Extracts the required confidence report data from the items returned by Acquia Lift. | |
AcquiaLiftReport:: |
protected | function | Extracts potential targeting values from the raw data returned by Acquia Lift. | |
AcquiaLiftReport:: |
protected | function | Extracts the required targeting report data from the items returned by Acquia Lift. | |
AcquiaLiftReport:: |
protected | function | Gets the appropriate class name for a graph indicating percentage. | |
AcquiaLiftReport:: |
constant | The threshold to use above which lift percentage will be positively noted. | ||
AcquiaLiftReport:: |
protected | function | Loads all of the data necessary to generate the reports for the agent. | |
AcquiaLiftReport:: |
public | function | Implements PersonalizeAgentReportInterface::renderStatsForOptionSet(). | |
AcquiaLiftReport:: |
constant | The threshold to use above which stability will be positively noted. | ||
AcquiaLiftReportBase:: |
protected | property | The Acquia Lift agent instance for reporting on. | |
AcquiaLiftReportBase:: |
protected | property | The confidence measure for determining statistical significance. | |
AcquiaLiftReportBase:: |
protected | property | An instance of AcquiaLiftAPI. | |
AcquiaLiftReportBase:: |
protected | property | The extracted report data for each of the Acquia Lift API calls keyed by date/feature set requested. | |
AcquiaLiftReportBase:: |
protected | function | Builds the conversion reports to show basic conversion metrics for report requested in the report_data. | |
AcquiaLiftReportBase:: |
protected | function | Builds the render array for the metrics portion of the report. | |
AcquiaLiftReportBase:: |
public | function |
Implements AcquiaLiftReportInterface()::buildConversionReport(). Overrides AcquiaLiftReportInterface:: |
|
AcquiaLiftReportBase:: |
protected | function | Build a set of confidence reports from the report data. | |
AcquiaLiftReportBase:: |
protected | function | Builds the render array for the summary portion of the report. | |
AcquiaLiftReportBase:: |
constant | The value to show when report data is not applicable. | ||
AcquiaLiftReportBase:: |
protected | function | Extracts data from the raw confidence detail report that is prepared for use within the conversion report rendering process. | |
AcquiaLiftReportBase:: |
protected | function | Extracts data from the raw aggregate confidence report that is prepared for use within the report rendering process. | |
AcquiaLiftReportBase:: |
protected | function | Extracts the required overview data from the report data returned by Acquia Lift. | |
AcquiaLiftReportBase:: |
protected | function | Formats a number value for use in reports. | |
AcquiaLiftReportBase:: |
protected | function | Formats a percentage value for use in reports. | |
AcquiaLiftReportBase:: |
protected | function | Generates the general report configuration that is used to load any report. | |
AcquiaLiftReportBase:: |
protected | function | Helper function to generate the report options necessary to get a detailed confidence report rather than a summary report. | |
AcquiaLiftReportBase:: |
public | function |
Implements AcquiaLiftReportInterface()::getConfidenceMeasure(). Overrides AcquiaLiftReportInterface:: |
|
AcquiaLiftReportBase:: |
protected | function | Generates an internal raw report name for a confidence report based on the options. | |
AcquiaLiftReportBase:: |
protected | function | Generates a message to show when there is insufficient confidence in the test results. | |
AcquiaLiftReportBase:: |
protected | function | Generates the variation abbreviated label. | |
AcquiaLiftReportBase:: |
protected | function | Loads the agent status raw reporting data. | |
AcquiaLiftReportBase:: |
protected | function | Loads the agent confidence raw reporting data. | |
AcquiaLiftReportBase:: |
protected | function | Loads the context filter raw values into the report data. | |
AcquiaLiftReportBase:: |
protected | function | Loads and formats the necessary reporting data in order to generate a conversion metrics graph/report. | |
AcquiaLiftReportBase:: |
protected | function | Handles all of the logic to load and extract a conversion report. | |
AcquiaLiftReportBase:: |
protected | function | Loads the agent targeting raw reporting data. | |
AcquiaLiftReportBase:: |
constant | The value representing no features applied to an experiment. | ||
AcquiaLiftReportBase:: |
public | function |
Implements AcquiaLiftReportInterface()::setConfidenceMeasure(). Overrides AcquiaLiftReportInterface:: |
|
AcquiaLiftReportBase:: |
function | Constructs an AcquiaLiftReport object |