/** * Adds ratio metrics if possible. * * @param DataTable $dataTable * @return DataTable */ protected function manipulateDataTable($dataTable) { if (!empty($this->report) && !$this->report->getDimension() && !$this->isAllMetricsReport()) { // we currently do not calculate the total value for reports having no dimension return $dataTable; } $this->totals = array(); $firstLevelTable = $this->makeSureToWorkOnFirstLevelDataTable($dataTable); $metricsToCalculate = Metrics::getMetricIdsToProcessReportTotal(); $metricNames = array(); foreach ($metricsToCalculate as $metricId) { $metricNames[$metricId] = Metrics::getReadableColumnName($metricId); } foreach ($firstLevelTable->getRows() as $row) { $columns = $row->getColumns(); foreach ($metricNames as $metricId => $metricName) { $this->sumColumnValueToTotal($columns, $metricId, $metricName); } } $dataTable->setMetadata('totals', $this->totals); return $dataTable; }
private function sumColumnValueToTotal(Row $row, $metricId, $totalValues) { $value = $this->getColumn($row, $metricId); if (false === $value) { return $totalValues; } $metricName = Metrics::getReadableColumnName($metricId); if (array_key_exists($metricName, $totalValues)) { $totalValues[$metricName] += $value; } else { $totalValues[$metricName] = $value; } return $totalValues; }