NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Trend agreguje hodnotu v čase po intervaloch (bucketoch) zvolenej jednotky a vráti mapu trends s kľúčmi podľa intervalu:

use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
use RoundlyConsulting\Metrics\Facades\Metrics;

Metrics::trend()
    ->count(User::query(), 'created_at')
    ->daily()
    ->range(Period::MonthToDate)
    ->toArray();
// result => ['trends' => ['2024-06-01' => 12.0, '2024-06-02' => 0.0, ...]]

Jednotky

Jednotku nastavíte cez unit() — prípad enumu Unit alebo jeho reťazec — alebo pomocnou metódou. Predvolená je DAY, pokiaľ nezmeníte metrics.default_unit; neznámy reťazec sa ignoruje a zostane aktuálna jednotka:

use RoundlyConsulting\Metrics\Enums\Unit;

$metric->unit(Unit::Hour);   // or ->unit('HOUR')
$metric->perMinute();
$metric->hourly();
$metric->daily();            // the default (config: metrics.default_unit)
$metric->weekly();
$metric->monthly();
$metric->yearly();
HodnotaPrípad enumuPomocníkKľúč intervalu
MINUTEUnit::MinuteperMinute()Y-m-d H:i:00
HOURUnit::Hourhourly()Y-m-d H:00
DAYUnit::Daydaily()Y-m-d
WEEKUnit::Weekweekly()o-W — ISO rok a týždeň, napr. 2022-52
MONTHUnit::Monthmonthly()Y-m
YEARUnit::Yearyearly()Y

Dopĺňanie medzier

Výstup obsahuje každý interval zvoleného obdobia — prázdne intervaly sa doplnia nulou, takže grafy majú súvislú os. Os začína intervalom, ktorý obsahuje začiatok obdobia (ISO týždeň 1. januára pri týždennom YTD, mesiac začiatku pri mesačnom období 90), takže interval s aktuálnym okamihom je v nej vždy. Ak chcete len intervaly s dátami, dopĺňanie vypnite:

Metrics::trend()->count(User::query(), 'created_at')->daily()->withoutGapFilling()->toArray();

$metric->withoutGapFilling();          // only buckets that have rows
$metric->withoutGapFilling(false);     // re-enable filling (the default)

Pri období ALL sa rozsah odvodí z prvého a posledného intervalu s dátami.

Viac sérií

Trend rozdelíte podľa dimenzie cez groupBy(). Súčty zostanú pod trends a nový kľúč series obsahuje sadu intervalov pre každú hodnotu dimenzie — každú doplnenú cez rovnaké obdobie, takže všetky série zdieľajú rovnaké intervaly:

Metrics::trend()->count(User::query(), 'created_at')->daily()->groupBy('plan')->toArray();
// result => [
//   'trends' => ['2024-01-01' => 30.0, ...],            // totals across series
//   'series' => [
//     'pro'  => ['2024-01-01' => 20.0, ...],
//     'free' => ['2024-01-01' => 10.0, ...],
//   ],
// ]

Podpora databáz

Zoskupovanie používa SQL výraz pre dátum špecifický pre databázu. MySQL, MariaDB, PostgreSQL a SQLite sú podporované hneď po inštalácii, takže ten istý trend beží bez zmien vo vývoji aj v produkcii. Týždenné intervaly sú na každom driveri podľa ISO-8601 — vrátane SQLite, ktoré natívny ISO týždeň nemá. Akýkoľvek iný driver vyhodí MissingTrendQueryExpressionException, kým preň nenamapujete výraz v config('metrics.trend_drivers') (pozri Rozšírenie).

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.