'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( 'FLOOR(log_visit.visitor_seconds_since_last / 86400)', 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()); } } public function aggregateMultipleReports() { $dataTableRecords = array( self::TIME_SPENT_RECORD_NAME, self::PAGES_VIEWED_RECORD_NAME, self::VISITS_COUNT_RECORD_NAME, self::DAYS_SINCE_LAST_RECORD_NAME ); $columnsAggregationOperation = null; $this->getProcessor()->aggregateDataTableRecords( $dataTableRecords, $maximumRowsInDataTableLevelZero = null, $maximumRowsInSubDataTable = null, $columnToSortByBeforeTruncation = null, $columnsAggregationOperation, $columnsToRenameAfterAggregation = null, $countRowsRecursive = array()); } /** * Transforms and returns the set of ranges used to calculate the 'visits by total time' * report from ranges in minutes to equivalent ranges in seconds. */ public static function getSecondsGap() { $secondsGap = array(); foreach (self::$timeGap as $gap) { if (count($gap) == 3 && $gap[2] == 's') // if the units are already in seconds, just assign them { $secondsGap[] = array($gap[0], $gap[1]); } else if (count($gap) == 2) { $secondsGap[] = array($gap[0] * 60, $gap[1] * 60); } else { $secondsGap[] = array($gap[0] * 60); } } return $secondsGap; } }