ساکانجو / laravel-easy-metrics
轻松精确地生成指标。
此包的规范存储库似乎已丢失,因此已冻结该包。
v1.0.9
2024-08-06 16:51 UTC
Requires
- php: ^8.0
- illuminate/database: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.13
- orchestra/testbench: ^8.14
- pestphp/pest: ^2.24
- phpstan/phpstan: ^1.10
README
🔥 简单指标
轻松为您的应用程序创建指标。
✨ 通过赞助我来帮助支持此包的维护。
设计用于与 Laravel、Filament、Easy enum 和更多内容一起使用。
🚀 支持的指标
- 条形图 指标
- 饼图 指标
- 折线图 指标
- 饼图 指标
- 极坐标图 指标
- 趋势 指标
- 值 指标
目录
📦 安装
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