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,columnsevalues. - 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*(perCOUNT(*)); 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=truenon 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 aggiuntiveviewDefinition.groupByColumns[]→ emitGROUP BYclause- Auto-inferenza GROUP BY se
aggregationspresenti senzagroupByColumnsesplicito
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 uncolumnMappingobbligatorio: per ogni canonical alias del block 0, il block N specificasourceQualified(colonna del block) oconstantValue(literal SQL come'CLIENTE') oformula(espressione SQL per cast cross-block) - Toggle UNION ALL / UNION: default
unionAll: true(no dedup, performance migliore);falseperUNION 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



