protected function finishImpl(array &$records = NULL) {
        parent::finishImpl($records);

        if (!isset($records)) {
            return;
        }

        $valueMin = $valueMax = NULL;
        // preparing minimum and maximum values
        foreach ($records as $record) {
            if (!isset($record[$this->valueColumnName])) {
                continue;
            }

            $value = $record[$this->valueColumnName];

            $valueMin = MathHelper::min($valueMin, $value);
            $valueMax = MathHelper::max($value, $valueMax);
        }
        $valueRange = $valueMax - $valueMin;

        // generating weighted grade
        foreach ($records as &$record) {
            if (!isset($record[$this->valueColumnName])) {
                continue;
            }

            $value = $record[$this->valueColumnName];

            $rank = ($valueRange == 0) ? 1 : ($value - $valueMin) / $valueRange;
            $record[$this->memberRankColumnName] = $rank;
        }
        unset($record);
    }
    protected function finishImpl(array &$records = NULL) {
        parent::finishImpl($records);

        if (!isset($records)) {
            return;
        }

        // first row in a table is list of column names
        $columnNames = $this->columnNames;
        if (!isset($columnNames)) {
            foreach ($this->assembledColumnNames as $columnName => $index) {
                $columnNames[$index] = $columnName;
            }
        }
        array_unshift($records, $columnNames);
    }