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.