Pivot Table — Pro Demo
Showing data for 2026
Try it: click any cell to drill down into raw records · change Aggregation (Sum / Avg / Count / Min / Max) · sort columns by clicking headers · export to CSV or Excel · notice the heatmap colors and trend arrows between adjacent quarters.
Category
Product
Quarter
Month
| Category | Product |
2026-Q1
|
2026-Q2
|
Total
|
||||
|---|---|---|---|---|---|---|---|---|
|
2026-01
|
2026-02
|
2026-03
|
Σ |
2026-04
|
Σ | |||
|
Furniture - Living Room
|
—
|
|
|
—
|
|
|
||
|
Tables
|
—
|
|
|
—
|
|
|
||
|
Wardrobes
|
—
|
|
|
—
|
|
|
||
|
Chairs
|
—
|
|
|
—
|
|
|
||
|
Sofas
|
—
|
|
|
—
|
|
|
||
|
Footwear - Men - Sports
|
—
|
|
|
—
|
|
|
||
|
Sneakers
|
—
|
|
|
—
|
|
|
||
|
Sandals
|
—
|
|
|
—
|
|
|
||
|
Running Shoes
|
—
|
|
|
—
|
|
|
||
|
Boots
|
—
|
|
|
—
|
|
|
||
|
Electronics - Mobile Devices
|
—
|
|
|
—
|
|
|
||
|
Laptops
|
—
|
|
|
—
|
|
|
||
|
Headphones
|
—
|
|
|
—
|
|
|
||
|
Phones
|
—
|
|
|
—
|
|
|
||
|
Tablets
|
—
|
|
|
—
|
|
|
||
|
Clothing - Women - Casual
|
—
|
|
|
—
|
|
|
||
|
Pants
|
—
|
|
|
—
|
|
|
||
|
Shirts
|
—
|
|
|
—
|
|
|
||
|
Jackets
|
—
|
|
|
—
|
|
|
||
|
T-Shirts
|
—
|
|
|
—
|
|
|
||
| Grand Total | ||||||||
Details
pivot-table::pivot-table.loading
Widget Integration
Use the pivot table as a Livewire widget on any Filament page.
@livewire('pivot-table-widget', [
'name' => 'sales-pivot',
'model' => \App\Models\Sale::class,
'availableFields' => [
['name' => 'category', 'label' => 'Category', 'type' => 'string'],
['name' => 'product', 'label' => 'Product', 'type' => 'string'],
['name' => 'region', 'label' => 'Region', 'type' => 'string'],
['name' => 'quarter', 'label' => 'Quarter', 'type' => 'string'],
['name' => 'cost', 'label' => 'Cost', 'type' => 'numeric'],
],
'rowDimensions' => ['category', 'product'],
'columnDimensions' => ['quarter'],
'aggregationField' => 'cost',
'aggregationType' => 'sum',
'valuePrefix' => '$',
'drillDownEnabled' => true,
'drillDownColumns' => [
['name' => 'id', 'label' => 'ID', 'type' => 'numeric'],
['name' => 'date', 'label' => 'Date', 'type' => 'string'],
['name' => 'product', 'label' => 'Product', 'type' => 'string'],
['name' => 'region', 'label' => 'Region', 'type' => 'string'],
['name' => 'cost', 'label' => 'Cost', 'type' => 'numeric'],
],
'showTrends' => true,
'showHeatMap' => true,
])
Resource Integration
Add a pivot table page to any Filament resource.
use PtPlugins\FilamentPivotTable\Pages\ListPivotRecords;
class SaleResource extends Resource
{
public static function getPages(): array
{
return [
'index' => Pages\ListSales::route('/'),
'pivot' => ListPivotRecords::route('/pivot'),
];
}
}
Standalone Page
Create a dedicated Filament page for your pivot table.
<x-filament-panels::page>
@livewire('pivot-table-widget', [
'model' => \App\Models\Sale::class,
'rowDimensions' => ['category', 'product'],
'columnDimensions' => ['quarter'],
'aggregationField' => 'cost',
'aggregationType' => 'sum',
])
</x-filament-panels::page>