Filtrare le Tabelle Pivot per Etichetta o Valore

Introduzione

Le tabelle pivot sono potenti strumenti analitici, ma i riepiloghi grezzi spesso contengono molte più informazioni di quelle che è necessario presentare. Il filtraggio è il meccanismo principale per restringere una tabella pivot alle righe, alle colonne o ai valori che contano per un report specifico. Aspose.Cells for Node.js via Java rispecchia le funzionalità di filtraggio disponibili in Microsoft Excel, esponendole programmaticamente in modo che la generazione dei report possa essere completamente automatizzata. Le seguenti strategie di filtraggio sono trattate in questo articolo:

  1. Filtro per Etichetta — filtra gli elementi dei campi di riga o colonna in base alle loro etichette di testo.
  2. Filtro per Data — filtra i campi di riga o colonna che contengono esclusivamente valori di tipo data-ora (o vuoti).
  3. Filtro per Valore — filtra gli elementi in base ai valori aggregati di un campo dati.
  4. Filtro Top 10 — mostra solo i primi o gli ultimi N elementi classificati in base a un campo valore.
  5. Nascondere/Mostrare gli Elementi Pivot — controlla manualmente la visibilità di ciascun singolo elemento in un campo. Ogni approccio utilizza un metodo diverso sulla classe PivotField o una proprietà sulla classe PivotItem. Dopo aver applicato qualsiasi filtro, è necessario chiamare refreshData() e calculateData() sulla tabella pivot in modo che i dati memorizzati nella cache e i valori calcolati riflettano il nuovo stato del filtro.

Filtro per Etichetta

Un filtro per etichetta consente di filtrare gli elementi di un campo di riga o colonna confrontando le relative didascalie testuali con un pattern. Ciò è utile quando si desidera visualizzare solo i prodotti i cui nomi iniziano con una lettera specifica, contengono una determinata parola o soddisfano un altro criterio basato sulla didascalia. Aspose.Cells espone il filtraggio per etichetta tramite il metodo PivotField.filterByLabel(PivotFilterType, string). L’enumerazione PivotFilterType include valori come CaptionBeginsWith, CaptionContains, CaptionEndsWith, CaptionDoesNotContain, CaptionIsNotBlank, CaptionIsBlank e così via. Il secondo argomento fornisce la stringa dell’etichetta utilizzata per il confronto. L’esempio seguente carica una cartella di lavoro contenente una tabella pivot esistente, applica un filtro per etichetta in modo che solo gli elementi le cui didascalie iniziano con un prefisso specificato rimangano visibili, aggiorna la tabella pivot e salva il risultato.

let fileName = "sample.xlsx";
let prefix = "B";
// Carica la cartella di lavoro esistente contenente una tabella pivot
let workbook = new AsposeCells.Workbook(fileName);
// Accedi al foglio di lavoro tramite indice (primo foglio di lavoro)
let worksheet = workbook.getWorksheets().get(0);
// Accedi alla tabella pivot tramite indice
let pivotTable = worksheet.getPivotTables().get(0);
// Recupera il primo PivotField di riga
let rowField = pivotTable.getRowFields().get(0);
// Applica il filtro delle etichette — mostra solo gli elementi di riga le cui etichette iniziano con il prefisso fornito
rowField.filterByLabel(AsposeCells.PivotFilterType.CaptionBeginsWith, prefix, "");
// Aggiorna e ricalcola i dati della tabella pivot in modo che il filtro abbia effetto
pivotTable.getPivotCache().refresh();
// Salva la cartella di lavoro su disco
workbook.save(fileName);

Filtro per Data

I filtri per data consentono di restringere una tabella pivot in base a criteri basati sulla data, come oggi, la settimana scorsa, questo mese, il prossimo trimestre o un intervallo di date specifico. Sono filtri specializzati che funzionano esclusivamente con campi che memorizzano informazioni di tipo data-ora.

Aspose.Cells espone il filtraggio per data tramite il metodo PivotField.filterByDate(PivotFilterType, params DateTime[] values). L’enumerazione PivotFilterType contiene valori dedicati per le date come Today, Yesterday, LastWeek, ThisWeek, NextWeek, LastMonth, ThisMonth, NextMonth, LastQuarter, ThisQuarter, NextQuarter, LastYear, ThisYear, NextYear e Between. A seconda del tipo di filtro scelto, si passano uno o due valori DateTime (per Between, si passano la data di inizio e quella di fine). L’esempio seguente carica una cartella di lavoro con una tabella pivot la cui area delle righe contiene un campo data, applica un filtro per data che limita gli elementi visibili a un determinato intervallo di date, aggiorna la tabella pivot e salva la cartella di lavoro.

let inputPath = "sample.xlsx";
let outputPath = "output_filtered.xlsx";
if (!fs.existsSync(inputPath))
{
    throw new Error("Source workbook not found. Path: " + inputPath);
}
// Carica il foglio di lavoro esistente che contiene la tabella pivot
var workbook = new AsposeCells.Workbook(inputPath);
// Accedi al foglio di lavoro che contiene la tabella pivot (per indice)
var worksheet = workbook.getWorksheets().get(0);
// Accedi alla tabella pivot per indice
var pivotTable = worksheet.getPivotTables().get(0);
// Recupera il PivotField della data dall'area delle righe
// (Il filtro data funziona solo quando l'area di riga/colonna contiene solo celle di data-ora o vuote)
let dateField = pivotTable.getRowFields().get(0);
// Definisci il criterio di data per il filtro Between
let startDate = new Date(2020, 0, 1);
let endDate = new Date(2020, 11, 31);
// Applica il filtro data sul campo pivot
dateField.filterByDate(AsposeCells.PivotFilterType.DateBetween, startDate, endDate);
// Aggiorna e ricalcola la tabella pivot affinché il filtro abbia effetto
pivotTable.getPivotCache().refresh();
// Salva il foglio di lavoro
workbook.save(outputPath);

Filtro per Valore

I filtri per valore operano sui valori aggregati che una tabella pivot calcola nella propria area dati. Invece di confrontare le etichette di testo, confrontano i totali numerici rispetto a una soglia. Casi d’uso tipici includono la visualizzazione solo dei prodotti la cui somma delle vendite supera un importo target, oppure solo delle regioni il cui conteggio delle transazioni rientra in un intervallo. Aspose.Cells espone il filtraggio per valore tramite il metodo PivotField.filterByValue(PivotField valueField, PivotFilterType filterType, params object[] values). Il parametro filterType utilizza valori come ValueGreaterThan, ValueLessThan, ValueBetween, ValueEqual, ValueNotEqual, ValueGreaterThanOrEqual e ValueLessThanOrEqual. Il parametro valueField specifica quale campo dati deve essere valutato, e l’argomento o gli argomenti finali forniscono i valori di soglia. L’esempio seguente carica una cartella di lavoro con una tabella pivot, applica un filtro per valore che mantiene solo gli elementi le cui vendite aggregate superano una soglia numerica, aggiorna la tabella pivot e salva la cartella di lavoro.

var workbook = new AsposeCells.Workbook("sample.xlsx");
var worksheet = workbook.getWorksheets().get(0);
var pivotTable = worksheet.getPivotTables().get(0);
var rowField = pivotTable.getRowFields().get(0);
var dataField = pivotTable.getDataFields().get(0);
// Trova manualmente l'indice del campo dati poiché PivotFieldCollection non ha IndexOf
var dataFieldIndex = -1;
for (var i = 0; i < pivotTable.getDataFields().getCount(); i++)
{
    if (pivotTable.getDataFields().get(i) == dataField)
    {
        dataFieldIndex = i;
        break;
    }
}
if (dataFieldIndex >= 0)
{
    rowField.filterByValue(dataFieldIndex, AsposeCells.Pivot.PivotFilterType.ValueGreaterThan, 5000, Number.MAX_VALUE);
}
pivotTable.getPivotCache().refresh();
workbook.save("output.xlsx");

Filtro Top 10

Il filtro top 10 è una forma specializzata di filtro per valore che mantiene solo gli N elementi più alti o più bassi in base a un campo valore scelto. È comunemente utilizzato per i report di classificazione come “i 10 prodotti principali per ricavo” o “le 5 regioni peggiori per conteggio delle vendite”.

Aspose.Cells espone il filtraggio top 10 tramite il metodo PivotField.filterTop10(int itemCount, bool isTop, PivotField valueField, PivotFilterType filterType). Il parametro itemCount definisce quanti elementi mantenere, isTop indica se mantenere gli elementi più alti (true) o più bassi (false), valueField fa riferimento al campo dati utilizzato per la classificazione e filterType controlla il modo in cui il valore viene calcolato (in genere Sum, ma anche Count e Percent). L’esempio seguente carica una cartella di lavoro con una tabella pivot che contiene un campo valore, applica un filtro top 10 per mantenere solo i 10 elementi più alti in base alla somma delle vendite, aggiorna la tabella pivot e salva la cartella di lavoro.

let inputPath = "input.xlsx";
let outputPath = "output.xlsx";
let workbook = new AsposeCells.Workbook(inputPath);
// Accedi al foglio di lavoro che contiene la tabella pivot (indice 0)
let worksheet = workbook.getWorksheets().get(0);
// Accedi alla tabella pivot tramite indice
let pivotTable = worksheet.getPivotTables().get(0);
// Verifica che ci sia almeno un PivotField di valore nell'area dati
if (pivotTable.getDataFields().getCount() == 0)
{
    throw new Error("Pivot table has no value (data) PivotField.");
}
let valueField = pivotTable.getDataFields().get(0);
// Recupera il PivotField di riga di destinazione (il campo su cui vogliamo applicare Top 10)
let rowField = pivotTable.getRowFields().get(0);
// Il primo (e unico) campo dati è all'indice 0; Top 10 classifica in base ad esso.
let valueFieldIndex = 0;
// Applica il filtro Top 10 sul campo riga:
//   - itemCount   = 10
//   - filterType  = PivotFilterType.Sum
//   - isTop       = true (top N; false significherebbe bottom N)
//   - valueFieldIndex = l'indice del campo dati utilizzato per classificare gli elementi
rowField.filterTop10(10, AsposeCells.PivotFilterType.Sum, true, valueFieldIndex);
// Aggiorna i dati della tabella pivot e ricalcola in modo che il filtro abbia effetto
pivotTable.getPivotCache().refresh();
// Salva la cartella di lavoro
workbook.save(outputPath);

Filtrare Nascondendo o Mostrando gli Elementi Pivot

Oltre alle API strutturate per il filtraggio, Aspose.Cells consente di controllare direttamente la visibilità di ciascun singolo elemento pivot. Iterando attraverso la raccolta PivotItems di un PivotField e attivando la proprietà IsHidden, è possibile sopprimere selettivamente elementi specifici senza applicare un filtro basato su formule. Impostando IsHidden = true l’elemento viene nascosto nella tabella pivot; impostando IsHidden = false l’elemento viene mostrato nuovamente e reso visibile. Questo approccio è utile quando la regola di filtraggio è irregolare o specifica per gli elementi, come nascondere un piccolo numero di categorie denominate che non devono apparire in un determinato report. L’esempio seguente carica una tabella pivot, nasconde un elemento specifico per nome, mostra come mostrarlo nuovamente, aggiorna la tabella pivot e salva la cartella di lavoro.

let workbook = new AsposeCells.Workbook("pivot_table_sample.xlsx");
// Accedi al primo foglio di lavoro che contiene la tabella pivot
let sheet = workbook.getWorksheets().get(0);
// Accedi alla tabella pivot per indice (la prima tabella pivot sul foglio)
let pivotTable = sheet.getPivotTables().get(0);
// Recupera il PivotField di destinazione (il primo campo etichetta di riga in cui nasconderemo/mostreremo gli elementi)
let pivotField = pivotTable.getRowFields().get(0);
// Itera attraverso la collezione PivotItems del PivotField selezionato
let itemCount = pivotField.getPivotItems().getCount();
for (let i = 0; i < itemCount; i++) {
    let item = pivotField.getPivotItems().get(i);
    // Nascondi gli elementi pivot che corrispondono a un nome/criterio specifico
    if (item.getName() == "Item1" || item.getName() == "Item2") {
        item.setIsHidden(true);
    }
    // Dimostra come mostrare nuovamente: rimostra un elemento pivot precedentemente nascosto
    if (item.getName() == "Item3") {
        item.setIsHidden(false);
    }
}
// Aggiorna e ricalcola la tabella pivot affinché le modifiche abbiano effetto
pivotTable.getPivotCache().refreshData();
// Salva la cartella di lavoro — gli elementi nascosti rimangono nei dati sottostanti
// ma sono esclusi dall'output della tabella pivot visualizzata
workbook.save("output_pivot_filtered.xlsx");

Aspose.Cells for Node.js via Java fornisce un set completo di funzionalità di filtraggio delle tabelle pivot che corrispondono a quelle presenti in Microsoft Excel. I filtri per etichetta, per data e per valore coprono gli scenari analitici più comuni, mentre il filtro top 10 gestisce i report di classificazione. Quando la regola di filtraggio è irregolare, la proprietà PivotItem.IsHidden offre un fallback flessibile a livello di singolo elemento. Combinando queste strategie — ad esempio applicando un filtro per etichetta e poi nascondendo elementi specifici — è possibile costruire report su tabelle pivot estremamente mirati interamente da codice.

Articoli Correlati