Overview

View/Pivot builder

Il Pivot Builder consente di costruire viste analitiche dinamiche partendo dalle route metadata, senza scrivere query manuali lato UI.

Screenshot reference

  • manual__pivot_builder__01.png: configurazione e risultato del builder in runtime.
  • manual__pivot_builder__02.png: dettaglio dialog di creazione tabella materializzata e opzioni operative.

Funzionalità principali

  • Selezione campi in area rows, columns e values.
  • Aggregazioni disponibili sui valori (somma, conteggio, media, minimo, massimo).
  • Raggruppamento multidimensionale con ordinamento per dimensione.
  • Filtri interattivi per ridurre il dataset analizzato.
  • Aggiornamento vista pivot in tempo reale dopo cambio layout o metrica.
  • Esportazione/riuso della configurazione pivot nel contesto operativo.

View Builder Tab — Aggregazioni e GROUP BY (Tier 1, 2026-05-08)

Il Tab 1 "View Builder" oltre a tabelle/JOIN ora permette di emettere GROUP BY con aggregazioni SUM/COUNT/AVG/MIN/MAX/COUNT(DISTINCT) direttamente dalla ViewDefinition, senza passare in modalità manualSql.

Pannello sotto il canvas:

  • Aggregazioni: form per aggiungere funzione(colonna) AS alias. La colonna source può essere qualsiasi colonna del canvas o * (per COUNT(*)); l'alias output è auto-generato se vuoto.
  • GROUP BY: checkbox per ogni colonna selezionata sui nodi del canvas. Se nessuna è marcata esplicitamente, il backend deduce le dimensioni dalle colonne selected=true non aggregate.
  • CASE WHEN per pivoting: per pattern come SUM(CASE WHEN bucket='X' THEN importo ELSE 0 END) usa una colonna formula (right-click → Edit formula) come source dell'aggregazione. La formula viene emessa come argomento dell'aggregato.

Output backend (`MetaService.previewViewDefinition`):

  • viewDefinition.aggregations[] → emit <FN>(<col|formula>) AS <alias> come colonne SELECT aggiuntive
  • viewDefinition.groupByColumns[] → emit GROUP BY clause
  • Auto-inferenza GROUP BY se aggregations presenti senza groupByColumns esplicito

UNION blocks (Tier 2, 2026-05-08)

Un'estensione successiva permette di concatenare più SELECT con UNION o UNION ALL direttamente da una singola ViewDefinition:

  • Block 0 = top-level (le tabelle/joins/aggregations sul canvas) → definisce il vocabolario canonico di colonne SELECT
  • Block N (N≥1) = ogni unionBlocks[] aggiuntivo è una sub-definition single-table con un columnMapping obbligatorio: per ogni canonical alias del block 0, il block N specifica sourceQualified (colonna del block) o constantValue (literal SQL come 'CLIENTE') o formula (espressione SQL per cast cross-block)
  • Toggle UNION ALL / UNION: default unionAll: true (no dedup, performance migliore); false per UNION DISTINCT
  • TOP/LIMIT: applicato all'intera UNION, wrappata in subquery SELECT TOP N * FROM (<union>) AS u

UI sotto il canvas: select route + bottone "Add UNION block" → ogni block compare come accordion con header (caption + route) + matrix column-mapping (per canonical alias: dropdown source col del block, oppure input constant SQL).

Limiti v0: ogni block UNION è single-table (no JOIN within block). Per cross-block JOIN (es. categoria 'ENTRAMBI' di vw_anagrafica_unificata che richiede clienti INNER JOIN fornitori ON piva) serve Tier 2.5.

Flusso operativo consigliato

1. Apri la route pivot builder.

2. Seleziona datasource/route metadata di partenza.

3. Trascina i campi nelle zone rows, columns, values.

4. Configura l'aggregazione per ogni metrica.

5. Applica filtri e verifica i totali.

6. Salva o riusa la configurazione secondo il flusso applicativo.

Pulsanti azione

Crea vista

  • Genera una vista SQL a partire dalla configurazione pivot corrente.
  • Utile quando vuoi riusare il risultato come sorgente dati stabile in altre route/report.
  • Mantiene la logica centralizzata nel DB, evitando di ricostruire ogni volta il layout manualmente.

Crea tabella materializzata

  • Crea una tabella fisica con i dati aggregati della configurazione pivot.
  • Utile per dataset grandi o dashboard dove servono tempi di lettura rapidi.
  • Scaffolda automaticamente la route associata alla tabella fisica creata e genera una schedulazione per refresh/allineamento dati.
  • Premendo Aggiorna sulla grid nella route associata forza un run della schedulazione.

Note di utilizzo

  • Per analisi coerenti, usare colonne con tipologia dati corretta (numeriche per metriche, testuali/date per dimensioni).
  • In presenza di grandi volumi, preferire filtri e aggregazioni mirate prima di espandere il dettaglio.

Screenshot

pivot-builder / animation
pivot-builder / animation
pivot-builder / main
pivot-builder / main
pivot-builder / materialized table dialog
pivot-builder / materialized table dialog
pivot-builder / walkthrough
pivot-builder / walkthrough