Saltar al contenido principal

Resúmenes

Introducción​

Puedes renderizar una sección de "resumen" debajo del contenido de tu tabla. Esto es útil para mostrar resultados de cálculos como promedios, sumas, conteos y rangos de los datos en tu tabla.

Por defecto, habrá una sola línea de resumen para la página actual de datos, y una línea adicional para el total de todos los datos si hay múltiples páginas. También puedes agregar resúmenes para grupos de registros, ver "Resumir grupos de filas".

Los objetos "Summarizer" pueden añadirse a cualquier columna de tabla usando el método summarize():

use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;

TextColumn::make('rating')
->summarize(Average::make())

Múltiples "summarizers" pueden ser añadidos a la misma columna:

use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;

TextColumn::make('rating')
->numeric()
->summarize([
Average::make(),
Range::make(),
])

La primera columna de una tabla no puede usar summarizers. Esa columna se usa para renderizar el título y subtítulos de la sección de resumen.

Summarizers disponibles​

Filament incluye cuatro tipos de summarizer:

También puedes crear tus propios summarizers personalizados.

Average​

Se usa para calcular el promedio de todos los valores:

use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;

TextColumn::make('rating')
->summarize(Average::make())

Count​

Se usa para contar el número total de valores en el dataset:

use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\Summarizers\Count;
use Illuminate\Database\Query\Builder;

IconColumn::make('is_published')
->boolean()
->summarize(
Count::make()->query(fn (Builder $query) => $query->where('is_published', true)),
),

Contar ocurrencia de íconos​

Con columnas tipo ícono, puedes usar icons():

use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\Summarizers\Count;

IconColumn::make('is_published')
->boolean()
->summarize(Count::make()->icons()),

Range​

Se usa para calcular el mínimo y el máximo:

use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;

TextColumn::make('price')
->summarize(Range::make())

Rango de fechas​

TextColumn::make('created_at')
->dateTime()
->summarize(Range::make()->minimalDateTimeDifference())

Rango de texto​

TextColumn::make('sku')
->summarize(Range::make()->minimalTextualDifference())

Incluir valores nulos​

TextColumn::make('sku')
->summarize(Range::make()->excludeNull(false))

Sum​

Calcular la suma total:

use Filament\Tables\Columns\Summarizers\Sum;
use Filament\Tables\Columns\TextColumn;

TextColumn::make('price')
->summarize(Sum::make())

Configurar etiqueta​

TextColumn::make('price')
->summarize(Sum::make()->label('Total'))

Limitar dataset con query​

use Filament\Tables\Columns\Summarizers\Average;
use Illuminate\Database\Query\Builder;

TextColumn::make('rating')
->summarize(
Average::make()->query(fn (Builder $query) => $query->where('is_published', true)),
),

Formateo​

Números​

TextColumn::make('rating')
->summarize(Average::make()->numeric(decimalPlaces: 0))

Con locale:

TextColumn::make('rating')
->summarize(Average::make()->numeric(locale: 'nl'))

Moneda​

TextColumn::make('price')
->summarize(Sum::make()->money('EUR'))

Dividir por 100:

TextColumn::make('price')
->summarize(Sum::make()->money('EUR', divideBy: 100))

Limitar longitud​

TextColumn::make('sku')
->summarize(Range::make()->limit(5))

Prefijo y sufijo​

use Illuminate\Support\HtmlString;

TextColumn::make('volume')
->summarize(Sum::make()
->prefix('Total volume: ')
->suffix(new HtmlString(' m³'))
)

Resúmenes personalizados​

use Filament\Tables\Columns\Summarizers\Summarizer;
use Illuminate\Database\Query\Builder;

TextColumn::make('name')
->summarize(Summarizer::make()
->label('First last name')
->using(fn (Builder $query): string => $query->min('last_name')))

Ocultar condicionalmente​

TextColumn::make('sku')
->summarize(Summarizer::make()
->hidden(fn (Builder $query): bool => ! $query->exists()))

Visibilidad opuesta:

TextColumn::make('sku')
->summarize(Summarizer::make()
->visible(fn (Builder $query): bool => $query->exists()))

Resumir grupos de filas​

Puedes usar summaries con groups:

public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('views_count')
->summarize(Sum::make()),
TextColumn::make('likes_count')
->summarize(Sum::make()),
])
->defaultGroup('category')
->groupsOnly();
}