getSelectsFromRangedColumn() публичный статический Метод

**Note:** The result of this function is meant for use in the $additionalSelects parameter in one of the query... methods (for example {@link queryVisitsByDimension()}). **Example** summarize one column $visitTotalActionsRanges = array( array(1, 1), array(2, 10), array(10) ); $selects = LogAggregator::getSelectsFromRangedColumn('visit_total_actions', $visitTotalActionsRanges, 'log_visit', 'vta'); summarize another column in the same request $visitCountVisitsRanges = array( array(1, 1), array(2, 20), array(20) ); $selects = array_merge( $selects, LogAggregator::getSelectsFromRangedColumn('visitor_count_visits', $visitCountVisitsRanges, 'log_visit', 'vcv') ); perform the query $logAggregator = // get the LogAggregator somehow $query = $logAggregator->queryVisitsByDimension($dimensions = array(), $where = false, $selects); $tableSummary = $query->fetch(); $numberOfVisitsWithOneAction = $tableSummary['vta0']; $numberOfVisitsBetweenTwoAnd10 = $tableSummary['vta1']; $numberOfVisitsWithVisitCountOfOne = $tableSummary['vcv0'];
public static getSelectsFromRangedColumn ( string $column, array $ranges, string $table, string $selectColumnPrefix, boolean $restrictToReturningVisitors = false ) : array
$column string The name of a column in `$table` that will be summarized.
$ranges array The array of ranges over which the data in the table will be summarized. For example, ``` array( array(1, 1), array(2, 2), array(3, 8), array(8) // everything over 8 ) ```
$table string The unprefixed name of the table whose rows will be summarized.
$selectColumnPrefix string The prefix to prepend to each SELECT expression. This prefix is used to differentiate different sets of range summarization SELECTs. You can supply different values to this argument to summarize several columns in one query (see above for an example).
$restrictToReturningVisitors boolean Whether to only summarize rows that belong to visits of returning visitors or not. If this argument is true, then the SELECT expressions returned can only be used with the {@link queryVisitsByDimension()} method.
Результат array An array of SQL SELECT expressions, for example, ``` array( 'sum(case when log_visit.visit_total_actions between 0 and 2 then 1 else 0 end) as vta0', 'sum(case when log_visit.visit_total_actions > 2 then 1 else 0 end) as vta1' ) ```
Пример #1
0
 protected function aggregateGeneralGoalMetrics()
 {
     $prefixes = array(self::VISITS_UNTIL_RECORD_NAME => 'vcv', self::DAYS_UNTIL_CONV_RECORD_NAME => 'vdsf');
     $selects = array();
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn(self::VISITS_COUNT_FIELD, self::$visitCountRanges, self::LOG_CONVERSION_TABLE, $prefixes[self::VISITS_UNTIL_RECORD_NAME]));
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn(self::DAYS_SINCE_FIRST_VISIT_FIELD, self::$daysToConvRanges, self::LOG_CONVERSION_TABLE, $prefixes[self::DAYS_UNTIL_CONV_RECORD_NAME]));
     $query = $this->getLogAggregator()->queryConversionsByDimension(array(), false, $selects);
     if ($query === false) {
         return;
     }
     $totalConversions = $totalRevenue = 0;
     $goals = new DataArray();
     $visitsToConversions = $daysToConversions = array();
     $conversionMetrics = $this->getLogAggregator()->getConversionsMetricFields();
     while ($row = $query->fetch()) {
         $idGoal = $row['idgoal'];
         unset($row['idgoal']);
         unset($row['label']);
         $values = array();
         foreach ($conversionMetrics as $field => $statement) {
             $values[$field] = $row[$field];
         }
         $goals->sumMetrics($idGoal, $values);
         if (empty($visitsToConversions[$idGoal])) {
             $visitsToConversions[$idGoal] = new DataTable();
         }
         $array = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::VISITS_UNTIL_RECORD_NAME]);
         $visitsToConversions[$idGoal]->addDataTable(DataTable::makeFromIndexedArray($array));
         if (empty($daysToConversions[$idGoal])) {
             $daysToConversions[$idGoal] = new DataTable();
         }
         $array = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::DAYS_UNTIL_CONV_RECORD_NAME]);
         $daysToConversions[$idGoal]->addDataTable(DataTable::makeFromIndexedArray($array));
         // We don't want to sum Abandoned cart metrics in the overall revenue/conversions/converted visits
         // since it is a "negative conversion"
         if ($idGoal != GoalManager::IDGOAL_CART) {
             $totalConversions += $row[Metrics::INDEX_GOAL_NB_CONVERSIONS];
             $totalRevenue += $row[Metrics::INDEX_GOAL_REVENUE];
         }
     }
     // Stats by goal, for all visitors
     $numericRecords = $this->getConversionsNumericMetrics($goals);
     $this->getProcessor()->insertNumericRecords($numericRecords);
     $this->insertReports(self::VISITS_UNTIL_RECORD_NAME, $visitsToConversions);
     $this->insertReports(self::DAYS_UNTIL_CONV_RECORD_NAME, $daysToConversions);
     // Stats for all goals
     $nbConvertedVisits = $this->getProcessor()->getNumberOfVisitsConverted();
     $metrics = array(self::getRecordName('conversion_rate') => $this->getConversionRate($nbConvertedVisits), self::getRecordName('nb_conversions') => $totalConversions, self::getRecordName('nb_visits_converted') => $nbConvertedVisits, self::getRecordName('revenue') => $totalRevenue);
     $this->getProcessor()->insertNumericRecords($metrics);
 }
Пример #2
0
 public function aggregateDayReport()
 {
     // these prefixes are prepended to the 'SELECT as' parts of each SELECT expression. detecting
     // these prefixes allows us to get all the data in one query.
     $prefixes = array(self::TIME_SPENT_RECORD_NAME => 'tg', self::PAGES_VIEWED_RECORD_NAME => 'pg', self::VISITS_COUNT_RECORD_NAME => 'vbvn', self::DAYS_SINCE_LAST_RECORD_NAME => 'dslv');
     // collect our extra aggregate select fields
     $selects = array();
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn('visit_total_time', self::getSecondsGap(), 'log_visit', $prefixes[self::TIME_SPENT_RECORD_NAME]));
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn('visit_total_actions', self::$pageGap, 'log_visit', $prefixes[self::PAGES_VIEWED_RECORD_NAME]));
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn('visitor_count_visits', self::$visitNumberGap, 'log_visit', $prefixes[self::VISITS_COUNT_RECORD_NAME]));
     $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn('visitor_days_since_last', self::$daysSinceLastVisitGap, 'log_visit', $prefixes[self::DAYS_SINCE_LAST_RECORD_NAME], $restrictToReturningVisitors = true));
     $query = $this->getLogAggregator()->queryVisitsByDimension(array(), $where = false, $selects, array());
     $row = $query->fetch();
     foreach ($prefixes as $recordName => $selectAsPrefix) {
         $cleanRow = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_VISITS, $selectAsPrefix);
         $dataTable = DataTable::makeFromIndexedArray($cleanRow);
         $this->getProcessor()->insertBlobRecord($recordName, $dataTable->getSerialized());
     }
 }