filter('AddColumnsProcessedMetrics'); * * @api */ class AddColumnsProcessedMetrics extends BaseFilter { protected $invalidDivision = 0; protected $roundPrecision = 2; protected $deleteRowsWithNoVisit = true; /** * Constructor. * * @param DataTable $table The table to eventually filter. * @param bool $deleteRowsWithNoVisit Whether to delete rows with no visits or not. */ public function __construct($table, $deleteRowsWithNoVisit = true) { $this->deleteRowsWithNoVisit = $deleteRowsWithNoVisit; parent::__construct($table); } /** * Adds the processed metrics. See {@link AddColumnsProcessedMetrics} for * more information. * * @param DataTable $table */ public function filter($table) { if ($this->deleteRowsWithNoVisit) { $this->deleteRowsWithNoVisit($table); } $extraProcessedMetrics = $table->getMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME); $extraProcessedMetrics[] = new ConversionRate(); $extraProcessedMetrics[] = new ActionsPerVisit(); $extraProcessedMetrics[] = new AverageTimeOnSite(); $extraProcessedMetrics[] = new BounceRate(); $table->setMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME, $extraProcessedMetrics); } private function deleteRowsWithNoVisit(DataTable $table) { foreach ($table->getRows() as $key => $row) { $nbVisits = Metric::getMetric($row, 'nb_visits'); $nbActions = Metric::getMetric($row, 'nb_actions'); if ($nbVisits == 0 && $nbActions == 0 ) { // case of keyword/website/campaign with a conversion for this day, but no visit, we don't show it $table->deleteRow($key); } } } }