PowerApps include un potente set di funzioni per il filtro, l'ordinamento e la strutturazione delle tabelle di dati: Filter, Sort e AddColumns sono alcune delle funzioni del set. Con queste funzioni è possibile offrire agli utenti un accesso mirato alle informazioni di cui necessitano. Per chi è abituato a lavorare con i database, usare queste funzioni equivale a scrivere una query di database.

La chiave per la creazione di applicazioni efficienti è ridurre al minimo la quantità di dati che si devono trasferire al dispositivo. Forse sono necessari solo alcuni dei milioni di record gestiti oppure un singolo valore aggregato può rappresentare migliaia di record. O forse si può recuperare solo il primo set di record e lasciare da parte il resto finché l'utente non dimostra di volerne altri. Limitare il campo di azione può ridurre notevolmente la potenza di elaborazione, la memoria e la larghezza di banda della rete necessarie per l'app e, di conseguenza, ottimizzare i tempi di risposta per gli utenti, anche su telefoni connessi attraverso una rete mobile.

La delega è il punto di incontro tra la "capacità espressiva" delle formule di PowerApps e la necessità di ridurre la quantità di dati in movimento sulla rete. In breve, significa che PowerApps delega l'elaborazione dei dati all'origine dati, anziché spostare i dati nell'app per l'elaborazione locale.

Quando il processo diventa complicato, ed è il motivo per cui esiste questo articolo, significa che non tutto ciò che si può esprimere in una formula di PowerApps può essere delegato a ogni origine dati. Il linguaggio di PowerApps simula il linguaggio delle formule di Excel, progettato con accesso completo e immediato a una cartella di lavoro completa in memoria, con un'ampia gamma di funzioni numeriche e di modifica del testo. Di conseguenza, il linguaggio di PowerApps è molto più ricco rispetto a quello che la maggior parte delle origini dati è in grado di supportare, inclusi potenti motori di database come SQL Server.

L'uso di grandi set di dati richiede l'uso di origini dati e formule che si possono delegare. È l'unico modo per garantire un funzionamento sempre corretto dell'app e la possibilità per gli utenti di accedere a tutte le informazioni necessarie. Fare attenzione ai suggerimenti con il punto blu che contrassegnano i punti in cui la delega non è possibile. Se si lavora con piccoli set di dati (meno di 500 record), è possibile usare qualsiasi origine dati e qualsiasi formula perché si può eseguire l'elaborazione localmente se la formula non può essere delegata.

Origini dati delegabili

Vedere l'elenco delle deleghe per sapere quali sono le origini dati che supportano la delega e in quale misura.

Microsoft continua ad aggiungere supporto per la delega alle origini dati esistenti nonché altre origini dati.

Le cartelle di lavoro di Excel importate usando l'origine di dati "Aggiungi dati statici all'app", le raccolte e le tabelle archiviate in variabili di contesto non richiedono la delega. Tutti questi dati sono già in memoria e può essere applicato il linguaggio di PowerApps completo.

Funzioni delegabili

Il passaggio successivo è usare solo le formule che si possono delegare. Sono inclusi gli elementi delle formule che possono essere delegati. Tuttavia, ogni origine dati è diversa e non tutte supportano tutti questi elementi. Controllare i suggerimenti con il punto blu nella formula specifica.

Questi elenchi cambiano nel tempo. Stiamo lavorando per supportare altre funzioni e operatori con la delega.

Funzioni di filtro

Filter, Search e LookUp possono essere delegate.

All'interno delle funzioni Filter e LookUp si possono usare i seguenti elementi con le colonne della tabella per selezionare i record appropriati:

Possono essere usate anche le parti della formula che restituiscono un valore costante per tutti i record. Ad esempio, Left( Language(), 2 ) non dipende da tutte le colonne del record, quindi restituisce lo stesso valore per tutti i record. Di fatto è una costante. L'uso di variabili di contesto, raccolte e segnali può non essere costante e pertanto impedisce la delega di Filter e LookUp.

Alcuni elementi importanti non inclusi nell'elenco precedente:

Funzioni di ordinamento

Sort e SortByColumns si possono delegare.

In Sort la formula può solo essere il nome di una singola colonna e non può includere altri operatori o funzioni.

Funzioni di aggregazione

È possibile delegare le funzioni Sum, Average, Min e Max. Questa delega è attualmente supportata solo da un numero limitato di origini dati. Per altri dettagli, vedere l'elenco di deleghe.

Non è possibile delegare le funzioni di conteggio, come CountRows, CountA e Count.

Non è possibile delegare altre funzioni di aggregazione, come StdevP e VarP.

Altre funzioni

Tutte le altre funzioni non supportano la delega, incluse queste funzioni importanti:

Un modello comune consiste nell'usare AddColumns e LookUp per unire le informazioni da una tabella a un'altra, operazione nota come "join" in termini di database. Ad esempio:

  • AddColumns( Products, "Nome fornitore", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

Anche se Products e Suppliers possono essere origini dati delegabili e LookUp è una funzione delegabile, la funzione AddColumns non può essere delegata. Il risultato dell'intera formula sarà limitato alla prima parte dell'origine dati Products.

Poiché la funzione LookUp e la relativa origine dati sono delegabili, è possibile trovare una corrispondenza per Suppliers ovunque nell'origine dati, anche se è di grandi dimensioni. Un potenziale svantaggio è dato dal fatto che LookUp effettuerà chiamate separate all'origine dati per ognuno dei primi record in Products, generando molto traffico sulla rete. Se Suppliers è abbastanza piccola e non cambia spesso, è possibile memorizzare l'origine dati nella cache dell'app con una chiamata a Collect all'avvio dell'app, usando OnVisible nella schermata iniziale, ed eseguire lì la ricerca.

Limiti non delegabili

Le formule che non possono essere delegate verranno elaborate in locale. Ciò consente di sfruttare il linguaggio delle formule di PowerApps in tutta la sua ampiezza. Ma a un prezzo: tutti i dati devono prima essere trasferiti nel dispositivo e questo potrebbe richiedere il recupero di una grande quantità di dati sulla rete. L'operazione può richiedere tempo, dando l'impressione che l'applicazione sia lenta o bloccata.

Per evitare questo problema, PowerApps impone un limite sulla quantità di dati che possono essere elaborati localmente: 500 record. Abbiamo scelto questo numero in modo che sia comunque possibile accedere ai set di dati di piccole dimensioni e circoscrivere l'uso dei set di dati di dimensioni maggiori visualizzando i risultati parziali.

Ovviamente è necessario fare attenzione quando si usa questo servizio perché può generare confusione per gli utenti. Si consideri ad esempio una funzione Filter con una formula di selezione che non può essere delegata per un'origine dati con un milione di record. Poiché il filtro viene applicato in locale, verranno analizzati solo i primi 500 record su un milione. Se il record che interessa è il 501 o 500.001, non verrà considerato né restituito da Filter.

Un altro punto in cui ciò può generare confusione sono le funzioni di aggregazione. Si supponga di usare Average per una colonna della stessa origine dati con un milione di record. Poiché Average non può ancora essere delegata, la media verrà calcolata solo per i primi 500 record. Occorre prestare attenzione per evitare che una risposta parziale venga interpretata come una risposta completa da un utente dell'applicazione.

Suggerimenti con punto blu

Per fare in modo che sia più facile sapere che cosa viene e non viene delegato, durante il processo di creazione vengono visualizzati suggerimenti con un punto blu quando una formula contiene un elemento che non può essere delegato.

I punti blu vengono visualizzati solo per le formule che interessano le origini dati delegabili. Se non viene visualizzato un punto blu e si ritiene che la formula non sia correttamente delegata, verificare che il tipo di origine dati sia presente nell'elenco delle origini dati delegabili riportato sopra.

Esempi

In questo esempio, si userà una tabella di SQL Server che contiene prodotti, in particolare frutta, denominata [dbo].[Products]. Nella schermata Nuovo PowerApps crea un'app di base con tre schermate connessa a questa origine dati:

Si noti la formula della proprietà Items della raccolta. Vengono usate le funzioni SortByColumns e Search, entrambe delegabili.

Digitare "Apple" nel controllo di input di testo di ricerca. Osservando bene, si vedranno scorrere per alcuni istanti dei punti nella parte superiore dello schermo durante l'elaborazione della nuova voce nella nuova ricerca. I punti indicano che è in corso la comunicazione con SQL Server:

Poiché sono tutti elementi delegabili, anche se la tabella [dbo].[Products] contiene milioni di record, sarà comunque possibile trovarli tutti, usando il paging nella raccolta mentre l'utente scorre i risultati.

Si noterà che viene visualizzata una corrispondenza sia per "Apple" che per "Pineapple". La funzione Search troverà un termine di ricerca ovunque in una colonna di testo. Si supponga invece di voler trovare solo il termine di ricerca all'inizio del nome del frutto. È possibile usare un'altra funzione delegabile, Filter, con un termine di ricerca più complesso. Per motivi di semplicità verrà rimossa la chiamata a SortByColumns:

Apparentemente l'operazione ha funzionato, ora appare solo "Apples" e "Pineapple" non appare. Tuttavia, accanto al nome della raccolta appare un punto blu e sotto una parte della formula c'è una linea blu ondulata. Si vede anche un punto blu nell'anteprima della schermata. Se si passa il mouse sopra il punto blu accanto alla raccolta, viene visualizzato quanto segue:

Anche se si usa la funzione delegabile Filter con SQL Server che è un'origine dati delegabile, la formula usata all'interno della funzione Filter non può essere delegata. Mid e Len non possono essere delegate ad alcuna origine dati.

Ma ha funzionato, no? In un certo senso. E questo è il motivo per cui appare un punto blu anziché un'icona gialla di pericolo icona e un errore evidenziato in rosso. Se la tabella [dbo].[Products] contenesse meno di 500 record, la formula funzionerebbe perfettamente. Tutti i record verrebbero aggiunti al dispositivo e la funzione Filter verrebbe applicata in locale.

Se invece questa tabella contiene più di 500 record, solo i nomi dei frutti che iniziano con "Apple" nei primi 500 record della tabella verranno visualizzati nella raccolta. Se "Apple, Fuji" appare come nome nel record 501 o 500.001 non verrà trovato.