1. Go to this page and download the library: Download andrewdyer/metrics library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use AndrewDyer\Metrics\Value;
use AndrewDyer\Metrics\Results\ValueResult;
use DateTimeImmutable;
class TotalNewUsers extends Value
{
public function calculate(): ValueResult
{
return $this->count(User::query());
}
public function getStartDate(): DateTimeImmutable
{
return new DateTimeImmutable('first day of this month');
}
public function getEndDate(): DateTimeImmutable
{
return new DateTimeImmutable('last day of this month');
}
}
$metric = new TotalNewUsers();
$result = $metric->calculate();
$result->getResult(); // e.g. 42
public function getName(): string
{
return 'Total New Users';
}
public function getDescription(): string
{
return 'The total number of users who signed up this month.';
}
public function getRoundingPrecision(): int
{
return 2;
}
public function getRoundingMode(): int
{
return PHP_ROUND_HALF_UP;
}
$this->count(Product::query()); // no date filter — all records returned
$this->count(Product::query(), null, 'released_at'); // filtered by released_at
$this->sum(User::query(), 'revenue');
$this->average(User::query(), 'revenue');
$this->min(User::query(), 'revenue');
$this->max(User::query(), 'revenue');
use AndrewDyer\Metrics\Trend;
use AndrewDyer\Metrics\Enums\Frequency;
use AndrewDyer\Metrics\Results\TrendResult;
use DateTimeImmutable;
class UserSignupsOverTime extends Trend
{
public function calculate(): TrendResult
{
return $this->count(User::query(), null, 'created_at');
}
public function getFrequency(): Frequency
{
return Frequency::Monthly;
}
public function getStartDate(): DateTimeImmutable
{
return new DateTimeImmutable('first day of january this year');
}
public function getEndDate(): DateTimeImmutable
{
return new DateTimeImmutable('last day of december this year');
}
}
use AndrewDyer\Metrics\Partition;
use AndrewDyer\Metrics\Results\PartitionResult;
use DateTimeImmutable;
class UsersByCountry extends Partition
{
public function calculate(): PartitionResult
{
return $this->count(User::query(), 'country');
}
public function getStartDate(): DateTimeImmutable
{
return new DateTimeImmutable('first day of this year');
}
public function getEndDate(): DateTimeImmutable
{
return new DateTimeImmutable('today');
}
}