https://github.com/sakanjo/laravel-easy-metrics
Generate metrics with ease and precision.
https://github.com/sakanjo/laravel-easy-metrics
charts laravel metrics reports
Last synced: 5 months ago
JSON representation
Generate metrics with ease and precision.
- Host: GitHub
- URL: https://github.com/sakanjo/laravel-easy-metrics
- Owner: sakanjo
- License: mit
- Created: 2023-10-06T17:51:53.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2025-04-03T11:54:26.000Z (6 months ago)
- Last Synced: 2025-04-12T18:52:21.287Z (6 months ago)
- Topics: charts, laravel, metrics, reports
- Language: PHP
- Homepage:
- Size: 334 KB
- Stars: 308
- Watchers: 5
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README

đĨ Easy metrics
Easily create metrics for your application.
> ⨠Help support the maintenance of this package by [sponsoring me](https://github.com/sponsors/sakanjo).
> Designed to work with **Laravel**, **Filament**, [Easy enum](https://github.com/sakanjo/laravel-easy-enum), and more.

## đ Supported metrics
- **Bar** metric
- **Doughnut** metric
- **Line** metric
- **Pie** metric
- **Polar** metric
- **Trend** metric
- **Value** metricTable of contents
=================* [Install](#-install)
* [Usage](#-usage)
* [Value metric](#value-metric)
* [Doughnut metric](#doughnut-metric)
* [Trend metric](#trend-metric)
* [Other metrics](#other-metrics)
* [Ranges](#ranges)
* [Available custom ranges](#available-custom-ranges)
* [Growth rates](#growth-rates)
* [Using value metric](#using-value-metric)
* [Using trend metric](#using-trend-metric)
* [Using doughnut metric](#using-doughnut-metric)
* [Available growth rate types](#available-growth-rate-types)
* [Tips](#-tips)
* [using getLabel](#using-getLabel)
* [Practical examples](#-practical-examples)
* [Filamentphp v3 widgets](#filamentphp-v3-widgets)
* [Support the development](#-support-the-development)
* [Credits](#%EF%B8%8F-credits)
* [License](#-license)## đĻ Install
```
composer require sakanjo/laravel-easy-metrics
```## đĻ Usage
### Value metric
```php
use SaKanjo\EasyMetrics\Metrics\Value;
use App\Models\User;$data = Value::make(User::class)
->count();
```#### Query types
The currently supported aggregate functions to calculate a given column compared to the previous time interval / range
##### Min
```php
Value::make(User::class)
->min('age');
```##### Max
```php
Value::make(User::class)
->max('age');
```##### Sum
```php
Value::make(User::class)
->sum('age');
```##### Average
```php
Value::make(User::class)
->average('age');
```##### Count
```php
Value::make(User::class)
->count();
```### Doughnut metric
```php
use SaKanjo\EasyMetrics\Metrics\Doughnut;
use App\Models\User;[$labels, $data] = Doughnut::make(User::class)
->count('gender');
```#### Query types
The currently supported aggregate functions to calculate a given column compared to the previous time interval / range
##### Min
```php
Doughnut::make(User::class)
->min('age', 'gender');
```##### Max
```php
Doughnut::make(User::class)
->max('age', 'gender');
```##### Sum
```php
Doughnut::make(User::class)
->sum('age', 'gender');
```##### Average
```php
Doughnut::make(User::class)
->average('age', 'gender');
```##### Count
```php
Doughnut::make(User::class)
->count('gender');
```### Trend metric
```php
use SaKanjo\EasyMetrics\Metrics\Trend;
use App\Models\User;[$labels, $data] = Trend::make(User::class)
->countByMonths();
```#### Query types
The currently supported aggregate functions to calculate a given column compared to the previous time interval / range
##### Min
```php
$trend->minByYears('age');
$trend->minByMonths('age');
$trend->minByWeeks('age');
$trend->minByDays('age');
$trend->minByHours('age');
$trend->minByMinutes('age');
```##### Max
```php
$trend->maxByYears('age');
$trend->maxByMonths('age');
$trend->maxByWeeks('age');
$trend->maxByDays('age');
$trend->maxByHours('age');
$trend->maxByMinutes('age');
```##### Sum
```php
$trend->sumByYears('age');
$trend->sumByMonths('age');
$trend->sumByWeeks('age');
$trend->sumByDays('age');
$trend->sumByHours('age');
$trend->sumByMinutes('age');
```##### Average
```php
$trend->averageByYears('age');
$trend->averageByMonths('age');
$trend->averageByWeeks('age');
$trend->averageByDays('age');
$trend->averageByHours('age');
$trend->averageByMinutes('age');
```##### Count
```php
$trend->countByYears();
$trend->countByMonths();
$trend->countByWeeks();
$trend->countByDays();
$trend->countByHours();
$trend->countByMinutes();
```### Other metrics
- `Bar extends Trend`
- `Line extends Trend`
- `Doughnut extends Pie`
- `Polar extends Pie`## Ranges
Every metric class contains a ranges method, that will determine the range of the results based on it's date column.
```php
use SaKanjo\EasyMetrics\Metrics\Trend;
use SaKanjo\EasyMetrics\Metrics\Enums\Range;
use App\Models\User;Value::make(User::class)
->range(30)
->ranges([
15, 30, 365,
Range::TODAY, // Or 'TODAY'
]);
```### Available custom ranges
- `Range::TODAY`
- `Range::YESTERDAY`
- `Range::MTD`
- `Range::QTD`
- `Range::YTD`
- `Range::ALL`## Growth rates
Growth rate, expressed as both a **value** and a **percentage**, measures the change in a quantity over **time**, showing the speed of its expansion or contraction in both absolute and relative terms.
### Using **Value** metric
```php
use SaKanjo\EasyMetrics\Metrics\Value;
use SaKanjo\EasyMetrics\Enums\GrowthRateType;
use App\Models\User;[$value, $growth] = Value::make(User::class)
->withGrowthRate()
->growthRateType(GrowthRateType::Value) // default is `Percentage`
->count();
```### Using **Trend** metric
```php
use SaKanjo\EasyMetrics\Metrics\Trend;
use App\Models\User;[$labels, $data, $growth] = Trend::make(User::class)
->withGrowthRate()
->countByYears();
```### Using **Doughnut** metric
```php
use SaKanjo\EasyMetrics\Metrics\Doughnut;
use App\Models\User;[$labels, $data, $growth] = Doughnut::make(User::class)
->withGrowthRate()
->count('gender');
```### Available growth rate types
- `GrowthRateType::Value`
- `GrowthRateType::Percentage`## đĨ Tips
#### Using getLabel
You can use the `getLabel` method to customize the retreived data labels, for example:
```php
range($this->filter)
->rangesFromOptions($this->getFilters())
->countByMonths();return [
'datasets' => [
[
'label' => 'Users',
'data' => $data,
],
],
'labels' => $labels,
];
}protected function getType(): string
{
return 'line';
}protected function getFilters(): ?array
{
return [
15 => '15 Months',
30 => '30 Months',
60 => '60 Months',
];
}
}```
## đ Support the development
**Do you like this project? Support it by donating**
Click the ["đ Sponsor"](https://github.com/sponsors/sakanjo) at the top of this repo.
## ÂŠī¸ Credits
- [Salah Kanjo](https://github.com/sakanjo)
- [All Contributors](../../contributors)## đ License
[MIT License](https://github.com/sakanjo/laravel-easy-metrics/blob/master/LICENSE) Š 2023-PRESENT [Salah Kanjo](https://github.com/sakanjo)