/**
  * 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;
 }