ساکانجو/laravel-easy-metrics

轻松精确地生成指标。

此包的规范存储库似乎已丢失,因此已冻结该包。

v1.0.9 2024-08-06 16:51 UTC

This package is auto-updated.

Last update: 2024-08-06 16:57:13 UTC


README

Easy metrics banner

Workflow status Laravel v10.x PHP 8.0

🔥 简单指标

轻松为您的应用程序创建指标。

✨ 通过赞助我来帮助支持此包的维护。

设计用于与 LaravelFilamentEasy enum 和更多内容一起使用。

Preview

🚀 支持的指标

  • 条形图 指标
  • 饼图 指标
  • 折线图 指标
  • 饼图 指标
  • 极坐标图 指标
  • 趋势 指标
  • 指标

目录

📦 安装

composer require sakanjo/laravel-easy-metrics

🦄 使用

值指标

use SaKanjo\EasyMetrics\Metrics\Value;
use App\Models\User;

$data = Value::make(User::class)
    ->count();

查询类型

当前支持的聚合函数,用于计算与上一个时间间隔/范围相比的给定列

最小值
Value::make(User::class)
    ->min('age');
最大值
Value::make(User::class)
    ->max('age');
总和
Value::make(User::class)
    ->sum('age');
平均值
Value::make(User::class)
    ->average('age');
计数
Value::make(User::class)
    ->count();

饼图指标

use SaKanjo\EasyMetrics\Metrics\Doughnut;
use App\Models\User;

[$labels, $data] = Doughnut::make(User::class)
    ->count('gender');

查询类型

当前支持的聚合函数,用于计算与上一个时间间隔/范围相比的给定列

最小值
Doughnut::make(User::class)
    ->min('age', 'gender');
最大值
Doughnut::make(User::class)
    ->max('age', 'gender');
总和
Doughnut::make(User::class)
    ->sum('age', 'gender');
平均值
Doughnut::make(User::class)
    ->average('age', 'gender');
计数
Doughnut::make(User::class)
    ->count('gender');

趋势指标

use SaKanjo\EasyMetrics\Metrics\Trend;
use App\Models\User;

[$labels, $data] = Trend::make(User::class)
    ->countByMonths();

查询类型

当前支持的聚合函数,用于计算与上一个时间间隔/范围相比的给定列

最小值
$trend->minByYears('age'); 
$trend->minByMonths('age'); 
$trend->minByWeeks('age');  
$trend->minByDays('age');  
$trend->minByHours('age');  
$trend->minByMinutes('age');  
最大值
$trend->maxByYears('age'); 
$trend->maxByMonths('age'); 
$trend->maxByWeeks('age');  
$trend->maxByDays('age');  
$trend->maxByHours('age');  
$trend->maxByMinutes('age');  
总和
$trend->sumByYears('age'); 
$trend->sumByMonths('age'); 
$trend->sumByWeeks('age');  
$trend->sumByDays('age');  
$trend->sumByHours('age');  
$trend->sumByMinutes('age');  
平均值
$trend->averageByYears('age'); 
$trend->averageByMonths('age'); 
$trend->averageByWeeks('age');  
$trend->averageByDays('age');  
$trend->averageByHours('age');  
$trend->averageByMinutes('age');  
计数
$trend->countByYears(); 
$trend->countByMonths(); 
$trend->countByWeeks();  
$trend->countByDays();  
$trend->countByHours();  
$trend->countByMinutes();  

其他指标

  • 条形图扩展趋势
  • 折线图扩展趋势
  • 饼图扩展饼图
  • 极坐标图扩展饼图

范围

每个指标类都包含一个 ranges 方法,它将根据其日期列确定结果的范围。

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'
    ]);

可用的自定义范围

  • Range::TODAY
  • Range::YESTERDAY
  • Range::MTD
  • Range::QTD
  • Range::YTD
  • Range::ALL

增长率

增长率,以 百分比 的形式表示,衡量数量随 时间 的变化,显示其在绝对和相对意义上的扩张或收缩速度。

使用 指标

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();

使用 趋势 指标

use SaKanjo\EasyMetrics\Metrics\Trend;
use App\Models\User;

[$labels, $data, $growth] = Trend::make(User::class)
    ->withGrowthRate()
    ->countByYears();

使用 饼图 指标

use SaKanjo\EasyMetrics\Metrics\Doughnut;
use App\Models\User;

[$labels, $data, $growth] = Doughnut::make(User::class)
    ->withGrowthRate()
    ->count('gender');

可用的增长率类型

  • GrowthRateType::Value
  • GrowthRateType::Percentage

🔥 提示

使用 getLabel

您可以使用 getLabel 方法自定义检索数据标签,例如

<?php

namespace App\Enums;

use SaKanjo\EasyEnum;

enum ExampleEnum: int
{
    use EasyEnum; // Includes getLabel method

    case Active = 0;
    case Disabled = 1;
}

🔥 实际示例

Filamentphp v3 小部件

<?php

namespace App\Filament\Widgets\Admin;

use App\Models\User;
use Filament\Widgets\ChartWidget;
use SaKanjo\EasyMetrics\Metrics\Trend;

class UsersCountChart extends ChartWidget
{
    protected static ?string $heading = 'Users count trend';

    protected function getData(): array
    {
        [$labels, $data] = Trend::make(User::class)
            ->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',
        ];
    }
}

💖 支持开发

您喜欢这个项目吗?通过捐赠来支持它

点击此存储库顶部的"💖 赞助"

©️ 致谢

📄 许可

MIT 许可 © 2023-PRESENT Salah Kanjo