In PL-200 il data modeling su Dataverse non si limita a creare tabelle e colonne: devi saper scegliere come i dati arrivano nel modello e dove far vivere i valori derivati. Questa unità mette a fuoco due decisioni ricorrenti: quando esporre dati esterni con una virtual table invece di importarli, e quale tipo di colonna calcolata usare tra rollup, calculated e formula (Power Fx).
Virtual table: dati esterni senza copia fisica
Una virtual table (tabella virtuale) espone in Dataverse dati che risiedono in un sistema esterno (SQL, un servizio OData, un’API) senza copiarli fisicamente. I record vengono letti a runtime tramite un virtual connector provider o un provider custom; Dataverse funge da facciata, mentre la source of truth resta il sistema originale.
Questo la distingue nettamente dalle alternative di ingestione:
- Import (data import wizard, dataflow one-time): copia i dati dentro Dataverse. Ottieni una snapshot statica che invecchia.
- Dataflow (Power Query schedulato): copia e rinfresca i dati su pianificazione. È persistenza gestita, ma resta una replica.
- Virtual table: nessuna replica, sempre allineata alla sorgente in lettura.
Scegli la virtual table quando i dati devono restare autoritativi altrove e vuoi evitare sincronizzazioni. Attenzione ai limiti architetturali che l’esame ama testare: molti provider sono read-only (o con write limitato), le virtual table non supportano audit, rollup, business rule complete né molte funzionalità offline, e le performance dipendono dalla latenza della sorgente. Se ti serve scrivere, applicare logica pesante o lavorare offline, valuta import/dataflow invece.
Rollup, calculated e formula column a confronto
Sono tutti valori derivati, ma con motori e tempi di calcolo diversi.
Calculated column
Calcolata al volo in fase di lettura (query time), sul singolo record. Combina campi della stessa riga o di righe parent collegate (es. concatenare nome e cognome, calcolare un margine). Non aggrega record figli e non persiste il valore.
Rollup column
Aggrega dati provenienti da record correlati (tipicamente righe figlie in una relazione 1:N o su una gerarchia): SUM, COUNT, MIN, MAX, AVG. Esempio classico: totale delle opportunity aperte per un account. Il valore è persistito e ricalcolato da un job asincrono di sistema, non in tempo reale.
Formula column (Power Fx)
La più recente: usa Power Fx per esprimere la logica, con sintassi più ricca e leggibile delle calculated column. Come la calculated, valuta in tempo reale alla lettura e opera su valori della riga/relazioni parent; è la scelta moderna preferita rispetto alle vecchie calculated column per la maggior parte dei casi single-row.
Regola pratica d’esame: aggregazione di record figli → rollup; derivazione real-time sulla riga → formula column (o calculated).
I limiti dei rollup: asincronia, filtro/ordinamento, delegation
Il punto più insidioso è l’aggiornamento asincrono. Un rollup non si aggiorna nell’istante in cui cambia un record figlio: viene ricalcolato da un job pianificato che gira, per default, ogni ora (mass calculate + online recalculation incrementale). Puoi forzare l’aggiornamento con il pulsante Recalculate sul record, ma non è tempo reale. Non progettare mai automazioni che leggono un rollup subito dopo aver modificato i figli aspettandosi il valore aggiornato.
Altri vincoli tecnici:
- Profondità gerarchica: un rollup su gerarchia risale un numero limitato di livelli.
- Nessun rollup su altri rollup o su calculated column che a loro volta dipendono da valori non deterministici.
- Filtro/ordinamento e delegation: nelle app canvas e nel filtro, calculated/rollup possono comportarsi come non-delegable, spingendo la valutazione lato client. Su dataset grandi questo produce risultati troncati al limite di delega (es. 500/2000 righe). Per filtri/sort performanti conviene persistere il valore (rollup) o usare colonne standard indicizzabili anziché derivate on-read.
Trappole tipiche d’esame
- Scenario: serve il totale delle righe figlie sempre aggiornato al secondo. → I rollup NON sono real-time: ricalcolano su schedule (default ogni ora) o con Recalculate manuale; se serve immediatezza usa una Power Automate flow / plugin che scrive un valore, non un rollup.
- Scenario: dati devono restare autoritativi in un SQL esterno, sola lettura, niente sync. → Virtual table, non import né dataflow (che copiano i dati).
- Scenario: concatenare campi della stessa riga o calcolare un valore per record. → Formula (Power Fx) o calculated column, non un rollup (che serve solo ad aggregare record correlati).
- Scenario: filtro/ordinamento in una canvas app su una colonna derivata restituisce risultati incompleti. → Problema di delegation: le colonne calculated/rollup non sono delegabili; persisti il dato o filtra su colonne standard.
- Scenario: servono audit, offline o business rule complete su dati esterni. → La virtual table non li supporta: opta per import/dataflow.