Informazioni sulla delegaUnderstand delegation

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.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Con queste funzioni è possibile offrire agli utenti un accesso mirato alle informazioni di cui necessitano.With these functions, you can provide your users with focused access to the information they need. Per chi è abituato a lavorare con i database, usare queste funzioni equivale a scrivere una query di database.For those with a database background, using these functions is the equivalent of writing a database query.

La chiave per la creazione di applicazioni efficienti è ridurre al minimo la quantità di dati che si devono trasferire al dispositivo.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Forse sono necessari solo alcuni dei milioni di record gestiti oppure un singolo valore aggregato può rappresentare migliaia di record.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. 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.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. 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.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

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.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. In breve, significa che PowerApps delega l'elaborazione dei dati all'origine dati, anziché spostare i dati nell'app per l'elaborazione locale.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

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.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. 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.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. 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.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

L'uso di grandi set di dati richiede l'uso di origini dati e formule che si possono delegare.Working with large data sets requires using data sources and formulas that can be delegated. È l'unico modo per garantire un funzionamento sempre corretto dell'app e la possibilità per gli utenti di accedere a tutte le informazioni necessarie.It is the only way to keep your app performing well and ensure users can access all the information they need. Fare attenzione ai suggerimenti con il punto blu che contrassegnano i punti in cui la delega non è possibile.Take heed of blue-dot suggestions that flag places where delegation is not possible. 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.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Origini dati delegabiliDelegable data sources

Vedere l'elenco delle deleghe per sapere quali sono le origini dati che supportano la delega e in quale misura.See the delegation list for the full list of which data sources support delegation and to what extent.

Microsoft continua ad aggiungere supporto per la delega alle origini dati esistenti nonché altre origini dati.We are continuing to add delegation support to existing data sources, as well as add more data sources.

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.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Tutti questi dati sono già in memoria e può essere applicato il linguaggio di PowerApps completo.All of this data is already in memory, and the full PowerApps language can be applied.

Funzioni delegabiliDelegable functions

Il passaggio successivo è usare solo le formule che si possono delegare.The next step is to use only those formulas that can be delegated. Sono inclusi gli elementi delle formule che possono essere delegati.Included here are the formula elements that could be delegated. Tuttavia, ogni origine dati è diversa e non tutte supportano tutti questi elementi.However, every data source is different, and not all of them support all of these elements. Controllare i suggerimenti con il punto blu nella formula specifica.Check for blue-dot suggestions in your particular formula.

Questi elenchi cambiano nel tempo.These lists will change over time. Stiamo lavorando per supportare altre funzioni e operatori con la delega.We're working to support more functions and operators with delegation.

Funzioni di filtroFilter functions

Filter, Search e LookUp possono essere delegate.Filter, Search, and LookUp can be delegated.

All'interno delle funzioni Filter e LookUp si possono usare i seguenti elementi con le colonne della tabella per selezionare i record appropriati:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Possono essere usate anche le parti della formula che restituiscono un valore costante per tutti i record.Portions of your formula that evaluate to a constant value for all records can also be used. Ad esempio, Left( Language(), 2 ) non dipende da tutte le colonne del record, quindi restituisce lo stesso valore per tutti i record.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Di fatto è una costante.It is effectively a constant. L'uso di variabili di contesto, raccolte e segnali può non essere costante e pertanto impedisce la delega di Filter e LookUp.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Alcuni elementi importanti non inclusi nell'elenco precedente:Some notable items missing from the above list:

Funzioni di ordinamentoSorting functions

Sort e SortByColumns si possono delegare.Sort and SortByColumns can be delegated.

In Sort la formula può solo essere il nome di una singola colonna e non può includere altri operatori o funzioni.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Funzioni di aggregazioneAggregate functions

È possibile delegare le funzioni Sum, Average, Min e Max.Sum, Average, Min, and Max can be delegated. Questa delega è attualmente supportata solo da un numero limitato di origini dati. Per altri dettagli, vedere l'elenco di deleghe.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Non è possibile delegare le funzioni di conteggio, come CountRows, CountA e Count.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Non è possibile delegare altre funzioni di aggregazione, come StdevP e VarP.Other aggregate functions such as StdevP and VarP cannot be delegated.

Altre funzioniOther functions

Tutte le altre funzioni non supportano la delega, incluse queste funzioni importanti:All other functions do not support delegation, including these notable functions:

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.A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Ad esempio:For example:

  • AddColumns( Products, "Nome fornitore", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )AddColumns( Products, "Supplier Name", 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.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Il risultato dell'intera formula sarà limitato alla prima parte dell'origine dati Products.The result of the entire formula will be limited to the first portion of the Products data source.

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.Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. 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.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. 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.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Limiti non delegabiliNon-delegable limits

Le formule che non possono essere delegate verranno elaborate in locale.Formulas that cannot be delegated will be processed locally. Ciò consente di sfruttare il linguaggio delle formule di PowerApps in tutta la sua ampiezza.This allows for the full breadth of the PowerApps formula language to be used. 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.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. L'operazione può richiedere tempo, dando l'impressione che l'applicazione sia lenta o bloccata.That can take time, giving the impression that your app is slow or possibly hung.

Per evitare questo problema, PowerApps impone un limite sulla quantità di dati che possono essere elaborati localmente: 500 record.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. 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.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Ovviamente è necessario fare attenzione quando si usa questo servizio perché può generare confusione per gli utenti.Obviously care must be taken when using this facility as it can be confusing for users. 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.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Poiché il filtro viene applicato in locale, verranno analizzati solo i primi 500 record su un milione.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Se il record che interessa è il 501 o 500.001, non verrà considerato né restituito da Filter.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Un altro punto in cui ciò può generare confusione sono le funzioni di aggregazione.Another place where this can be confusing is aggregate functions. Si supponga di usare Average per una colonna della stessa origine dati con un milione di record.Take Average over a column of that same million record data source. Poiché Average non può ancora essere delegata, la media verrà calcolata solo per i primi 500 record.Since Average cannot yet be delegated, only the first 500 records will be averaged. Occorre prestare attenzione per evitare che una risposta parziale venga interpretata come una risposta completa da un utente dell'applicazione.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Suggerimenti con punto bluBlue dot suggestions

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.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

I punti blu vengono visualizzati solo per le formule che interessano le origini dati delegabili.Blue dots are only shown on formulas that operate on delegable data sources. 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.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

EsempiExamples

In questo esempio, si userà una tabella di SQL Server che contiene prodotti, in particolare frutta, denominata [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. Nella schermata Nuovo PowerApps crea un'app di base con tre schermate connessa a questa origine dati:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Si noti la formula della proprietà Items della raccolta.Note the formula for the Gallery's Items property. Vengono usate le funzioni SortByColumns e Search, entrambe delegabili.It is using SortByColumns and Search functions, both of which can be delegated.

Digitare "Apple" nel controllo di input di testo di ricerca.Let's type "Apple" into the search text-input control. Osservando bene, si vedranno scorrere per alcuni istanti dei punti nella parte superiore dello schermo durante l'elaborazione della nuova voce nella nuova ricerca.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. I punti indicano che è in corso la comunicazione con SQL Server:The marching dots indicate that we are communicating with the 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.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

Si noterà che viene visualizzata una corrispondenza sia per "Apple" che per "Pineapple".You will notice that we are seeing a match for both "Apple" and "Pineapple". La funzione Search troverà un termine di ricerca ovunque in una colonna di testo.The Search function will find a search term anywhere in a text column. Si supponga invece di voler trovare solo il termine di ricerca all'inizio del nome del frutto.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. È possibile usare un'altra funzione delegabile, Filter, con un termine di ricerca più complesso. Per motivi di semplicità verrà rimossa la chiamata a SortByColumns:We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Apparentemente l'operazione ha funzionato, ora appare solo "Apples" e "Pineapple" non appare.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Tuttavia, accanto al nome della raccolta appare un punto blu e sotto una parte della formula c'è una linea blu ondulata.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Si vede anche un punto blu nell'anteprima della schermata.There is even a blue dot showing in the screen thumbnail. Se si passa il mouse sopra il punto blu accanto alla raccolta, viene visualizzato quanto segue:If we hover over the blue dot next to the gallery, we see the following:

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.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Mid e Len non possono essere delegate ad alcuna origine dati.Mid and Len cannot be delegated to any data source.

Ma ha funzionato, no?But it worked, didn't it? In un certo senso.Well, kind of. E questo è il motivo per cui appare un punto blu anziché un'icona gialla di pericolo icona e un errore evidenziato in rosso.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Se la tabella [dbo].[Products] contenesse meno di 500 record, la formula funzionerebbe perfettamente.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Tutti i record verrebbero aggiunti al dispositivo e la funzione Filter verrebbe applicata in locale.All records were brought to the device and the Filter was applied locally.

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.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Se "Apple, Fuji" appare come nome nel record 501 o 500.001 non verrà trovato.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.