Limiti delle query: limiti di delega e query

Comprendere il concetto di delega

Power Apps funziona meglio con un'origine dati di back-end quando una query Power Fx può essere completamente tradotta in una query equivalente che può essere eseguita su un'origine dati. Power Apps invia una query che l'origine dati comprende, la query viene eseguita sull'origine dati e i risultati della query vengono restituiti a Power Apps. Ad esempio, l'origine dati potrebbe filtrare i dati sull'origine dati e restituire solo le righe che soddisfano i criteri di filtro. Quando funziona correttamente, diciamo che la query è delegata all'origine dati per svolgere il lavoro della query.

Tuttavia, le query Power Fx non possono sempre essere tradotte in query equivalenti su tutte le origini dati. Per esempio, Dataverse supporta più funzionalità di query rispetto a Excel. Dataverse supporta l'operatore di query "in" (appartenenza) ed Excel no. Diciamo che la query è non delegabile se una query utilizza una funzionalità che l'origine dati non supporta. In generale, se qualsiasi parte di un'espressione di query non è delegabile, non deleghiamo alcuna parte della query.

Quando una query non è delegabile, Power Apps ottiene solo i primi 500 record dall'origine dati e quindi esegue le azioni nella query. Questo limite può essere aumentato fino a 2.000 record Modificare il limite Power Apps limita le dimensioni dei risultati a 500 record per preservare buone prestazioni per Power Apps. In generale, attraverso la sperimentazione abbiamo riscontrato che i set di risultati maggiori di queste dimensioni introducono problemi di prestazioni per la tua app e Power Apps.

Tuttavia, questo limite può rappresentare un problema in quanto la query potrebbe restituire risultati errati se i dati sull'origine dati superano i 500/2.000 record. Ad esempio, considera l'esempio in cui la tua origine dati ha 10 milioni di record e la tua query deve operare sull'ultima parte dei dati. Ad esempio, i cognomi che iniziano con "Z". Tuttavia, la tua query contiene un operatore non delegabile (ad esempio, distinto). In questo caso, ottieni solo i primi 500/2000 record e hai risultati errati.

Crea le tue query Power Fx utilizzando le tabelle delegabili per la tua origine dati. È necessario utilizzare solo funzioni di query che possono essere delegate. È l'unico modo per garantire le prestazioni dell'app e l'accesso di tutti gli utenti alle informazioni di cui hanno bisogno.

Prestare attenzione agli avvisi relativi alle deleghe che segnalano aree in cui la delega non è possibile. Se si usano set di dati di piccole dimensioni (meno di 500 record), è possibile usare qualsiasi origine dati e qualsiasi formula, perché, se la formula non può essere delegata, l'app è in grado di elaborare i dati localmente.

Nota

Gli avvisi di delega consentono di gestire l'app in modo che i dati di questa siano corretti. Se i dati nella tua origine dati superano i 500 record e una funzione non può essere delegata, Power Fx contrassegnerà la formula con una sottolineatura blu.

Origini dati delegabili

La delega è supportata solo per certe origini dati tabulari. Se un'origine dati supporta la delega, la documentazione sul relativo connettore descrive quel supporto. Ad esempio, queste origini dati tabulari sono le più popolari e supportano la delega:

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 Power Apps 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 gli avvisi di delega in ogni formula specifica.

Funzioni di filtro

Filter, Search, First e LookUp possono essere delegate.

All'interno delle funzioni Filter e LookUp è possibile selezionare i record appropriati usando gli elementi seguenti con le colonne della tabella:

  • And (incluso &&), Or (incluso ||), Not (incluso !)
  • In

    Nota

    In è delegato solo per le colonne sulla base origine dati. Ad esempio, se origine dati è la tabella Account, Filter(Accounts, Name in ["name1", "name2"]) delega all'origine dati per la valutazione. Tuttavia, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) non delega perché la colonna Fullname si trova su una tabella diversa (PrimaryContact) di Account. L'espressione viene valutata localmente.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valori costanti che rimangono immutati in tutti i record, ad esempio proprietà dei controlli e variabili globali e di contesto.

È anche possibile usare le parti della formula che restituiscono un valore costante per tutti i record. Ad esempio, Left( Language(), 2 ), Date( 2019, 3, 31 ) e Today() non dipendono da tutte le colonne del record, quindi restituisce lo stesso valore per tutti i record. Questi valori possono essere inviati a origine dati come costante e non bloccano la delega.

L'elenco precedente non include questi elementi importanti:

Limiti delle query

Livelli di ricerca

Power Apps supporta due livelli di ricerca. Ciò significa che un'espressione di query Power Fx può contenere al massimo due funzioni di ricerca. Questo limite serve a preservare le prestazioni. Se un'espressione di query include una ricerca, Power Apps esegue prima una query per ottenere la tabella di base. Quindi esegue una seconda query che espande la prima tabella con le informazioni di ricerca. Supportiamo al massimo un ulteriore livello oltre quello. Per la modalità offline, tuttavia, supportiamo solo l'espansione di un livello di ricerca.

Valutazione dell'espressione: la proprietà dell'entità deve trovarsi sul lato sinistro "LHS" dell'operatore di uguaglianza

È importante posizionare la proprietà di un'entità da confrontare in un'espressione sul lato sinistro "LHS" di un'equazione. Per illustrare, nell'esempio seguente la proprietà dell'entità 'Business unit ID'.Name è un valore di proprietà e deve essere posizionato sul lato sinistro dell'espressione da valutare. La seguente espressione riuscirà:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Tuttavia, questa espressione no:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

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

Alcune funzioni aggregate possono essere delegate a seconda del supporto sul back-end. È possibile delegare le funzioni Sum, Average, Min e Max. Le funzioni di conteggio, come CountRows e Count possono essere delegate. Queste funzioni per la delega sono attualmente supportatate solo da un numero limitato di origini dati. Per ulteriori informazioni, vedi Elenco deleghe.

Il supporto della delega di RemoveIf e UpdateIf è in fase sperimentale e disattivato per impostazione predefinita.

funzioni non delegabili

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

limiti non delegabili

Le formule che non possono essere delegate verranno elaborate in locale. L'elaborazione locale consente di sfruttare il linguaggio delle formule di Power Apps 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 si sia arrestata in modo anomalo.

Per evitare questo problema, Power Apps impone un limite sulla quantità di dati che possono essere elaborati localmente: 500 record per impostazione predefinita. 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 contenente un milione di record. Poiché il filtro viene applicato in locale, vengono analizzati solo i primi 500 record. Se il record che interessa è il numero 501 o 500.001, non viene considerato né restituito da Filter.

Anche le funzioni di aggregazione possono provocare confusione. Si supponga di usare Average per una colonna della stessa origine dati con un milione di record. Average non può essere delegato in questo caso poiché l'espressione non è delegata (vedi la nota precedente), quindi viene calcolata la media soltanto dei primi 500 record. Se non si presta attenzione, un utente dell'applicazione può interpretare una risposta parziale come risposta completa.

Modifica del limite

il numero predefinito di record è 500, ma è possibile modificare questo numero per un'intera app:

  1. Selezionare Impostazioni.
  2. In Generale, cambia l'impostazione Limite per le righe di dati da 1 a 2000.

In alcuni casi, un valore pari a 2.000 (o 1.000 oppure 1.500) è sufficiente per le esigenze dello scenario specifico. Con un po' di attenzione è possibile incrementare questo numero per adattarlo allo scenario specifico. Man mano che si incrementa questo numero, le prestazioni dell'app possono peggiorare, in particolare per tabelle di grandi dimensioni con molte colonne. La risposta migliore è comunque delegare quanto più possibile.

Per assicurarsi che sia possibile ridimensionare l'app per adattarla a set di dati di grandi dimensioni, ridurre questa impostazione a 1. Eventuali elementi che non possono essere delegati restituiscono un singolo record, che dovrebbe essere facile da individuare durante il test dell'app. Ciò può contribuire a evitare eventi imprevisti quando si prova a passare in produzione un'app modello di verifica.

Avvisi di delega

Per capire più facilmente per quali elementi è attiva la delega e per quali non lo è, Power Apps visualizza un avviso (triangolo giallo) quando si crea una formula che contiene un elemento che non può essere delegato.

Gli avvisi di delega vengono visualizzati solo per le formule che interessano origini dati delegabili. Se non viene visualizzato un avviso 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 in precedenza in questo articolo.

Esempi

Per questo esempio, verrà generata automaticamente un'app di tre schermate basata su una tabella SQL Server denominata [dbo].[Fruit]. Per informazioni su come generare l'app, è possibile applicare a SQL Server principi analoghi a quelli dell'articolo relativo a Dataverse.

App con tre schermate.

La proprietà Items della raccolta è impostata su una formula che contiene le funzioni SortByColumns e Search, che possono essere entrambe delegate.

Nella casella di ricerca, digitare "Apple".

Nella parte superiore della schermata vengono visualizzati temporaneamente alcuni punti mentre l'app comunica con SQL Server per elaborare la richiesta di ricerca. Vengono visualizzati tutti i record che soddisfano i criteri di ricerca, anche se l'origine dati contiene milioni di record.

Controllo Search text-input.

I risultati della ricerca includono "Mele" e "Ananas" perché la funzione Ricerca cerca ovunque all'interno di una colonna di testo. Se si vogliono individuare solo i record che contengono 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 maggiore semplicità, rimuovere la chiamata a SortByColumns.

Rimozione della chiamata a SortByColumns.

I nuovi risultati includono "Mele" ma non "Ananas". Un triangolo giallo, tuttavia, compare accanto alla raccolta (e nell'anteprima della schermata se la barra di spostamento a sinistra visualizza le anteprime) e sotto una parte della formula viene visualizzata una linea ondulata di colore blu. Ognuno di questi elementi indica un avviso. Se si posiziona il puntatore del mouse sul triangolo giallo accanto alla raccolta, viene visualizzato questo messaggio:

Passaggio del mouse su un avviso di delega.

SQL Server è un'origine dati delegabile e Filter è una funzione delegabile. Mid e Len, tuttavia, non possono essere delegate ad alcuna origine dati.

Ma ha funzionato, no? In un certo senso. Ecco perché è visualizzato un avviso e non una linea rossa ondulata.

  • Se la tabella contiene meno di 500 record, la formula funziona perfettamente. Tutti i record vengono aggiunti al dispositivo e la funzione Filter viene applicata in locale.
  • Se la tabella contiene più di 500 record, la formula non restituisce i record successivi al numero 500, neanche se soddisfano i criteri.

Vedi anche

Impatto dell'utilizzo di funzioni non delegabili e limiti di righe di dati inappropriato sulle prestazioni
Suggerimenti e procedure migliori per utilizzare la delega

Nota

Puoi indicarci le tue preferenze di lingua per la documentazione? Partecipa a un breve sondaggio. (il sondaggio è in inglese)

Il sondaggio richiederà circa sette minuti. Non viene raccolto alcun dato personale (Informativa sulla privacy).