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