Modelli di dati di query ottimizzati

Il modello di query dei dati più semplice e veloce è:

  1. Tabella o visualizzazione singola
  2. Prefiltrato sul server in base a ciò di cui hai bisogno
  3. Le colonne vengono indicizzate correttamente per le query previste

Quando progetti la tua app, devi pensare a come interrogare rapidamente i dati. Il modo migliore per eseguire query sui dati è utilizzare una singola tabella o visualizzazione che contenga tutte le informazioni necessarie e filtrarle sul server prima di visualizzarle nella tua app. È inoltre necessario assicurarsi che le colonne utilizzate per filtrare oppure ordinare i dati siano indicizzate correttamente. Ciò rende la tua app più veloce e fluida.

Ad esempio, supponiamo di avere una raccolta che mostra un elenco di clienti e dei relativi venditori. Se memorizzi le informazioni sul cliente e sul venditore in tabelle separate, devi utilizzare le ricerche per ottenere il nome del venditore per ciascun cliente. Ciò rallenta la tua app perché deve eseguire molte query sull'altra tabella. Un modo migliore è creare una visualizzazione che combini le informazioni sul cliente e sul venditore in un'unica tabella e utilizzare tale visualizzazione come origine dati per la tua raccolta. Quindi la tua app dovrà eseguire solo una query per ottenere tutti i dati di cui ha bisogno.

Esiste un compromesso tra la velocità delle query e la normalizzazione dei dati. La normalizzazione dei dati significa che i dati vengono archiviati una sola volta ed evitano la duplicazione. Ciò aiuta a mantenere i dati coerenti e accurati. Tuttavia, a volte è necessario duplicare alcuni dati per rendere le query più rapide e semplici. È necessario bilanciare questi due obiettivi nella progettazione dell'app e nella struttura della tabella. Altrimenti la tua app sarà lenta e ritardata perché deve svolgere numerosi lavori per filtrare e unire i dati da tabelle diverse.

Utilizza visualizzazioni lato server

Le visualizzazioni sono probabilmente lo strumento più comune per bilanciare questi obiettivi. Presentano un'unica struttura di tabella per le query, prefiltrano i dati per ciò che ti serve nella query e abilitano ricerche e unioni ad altre tabelle. Poiché i filtri, le ricerche e i join per la vista vengono calcolati sul server, sia il carico utile che il calcolo lato client sono ridotti al minimo.

Una raccolta può visualizzare molti record da un'origine dati. Ma a volte è necessario mostrare informazioni aggiuntive da un'altra origine dati correlata a quella originale. Ad esempio, hai una raccolta che mostra un elenco di clienti e desideri mostrare il nome del venditore assegnato a ciascun cliente. Il nome del venditore è archiviato in un'origine dati diversa dalle informazioni del cliente. Per mostrare il nome del venditore, è necessario utilizzare una funzione di ricerca che trovi il record corrispondente nell'altra origine dati. Ciò espande la tabella originale con i valori di ricerca.

Tuttavia, l'espansione della tabella può essere molto lenta se sono presenti molti record e numerose ricerche. Per ogni record nella raccolta, l'app deve eseguire una query separata sull'altra origine dati e ottenere il valore di ricerca. Ciò significa che l'app potrebbe dover eseguire molte query per ogni record, il che può richiedere molto tempo e influire sulle prestazioni dell'app. Questo anti-modello è talvolta noto come "N al quadrato, (n^2)" o problema "N+1".

Usa Filtra con StartsWith

Power Fx fornisce diversi modi per cercare i dati. In generale, utilizza un'espressione che sfrutta un indice come StartsWith oppure Filter invece di uno che legge l'intera tabella come In. L'operatore In va bene per le raccolte in memoria o se la tabella esterna dell'origine dati è molto piccola.

Consideriamo la duplicazione dei dati

A volte l'accesso ai dati in una query è lento perché sono archiviati in una posizione o in un formato diverso. Per rendere la query più veloce, è possibile copiare i dati lenti e archiviarli localmente in una tabella facile e veloce da interrogare. Tuttavia, ciò significa che i dati locali potrebbero non essere la versione più aggiornata dei dati originali. Quindi esegui un altro processo per aggiornare periodicamente i dati locali. Questo processo può essere un flusso Power Automate, un plugin, una stored procedure o qualsiasi altro metodo che possa spostare i dati da un luogo a un altro.

Il requisito di frequenza per l'aggiornamento dei dati locali dipende dalle esigenze aziendali. Quanto devono essere aggiornati i dati per la tua app? Supponiamo, ad esempio, che lavori per Contoso, un'azienda che vende biciclette. L'elenco delle biciclette disponibili è archiviato in un database Prodotti a cui puoi accedere tramite un'API in un connettore personalizzato. Ma supponiamo che la chiamata API sia lenta e quindi decidi di copiare i dati del prodotto e archiviarli localmente in una tabella. Quindi crei una vista che combina la tua tabella con altri dati rilevanti per la tua app. Crei anche un flusso Power Automate che viene eseguito ogni giorno e aggiorna la tua tabella con i dati di prodotto più recenti dall'API. Quindi la tua app può eseguire query sui dati locali più velocemente e i dati risalgono al massimo a un giorno fa.

La duplicazione dei dati è un tipo di tecnica comune nelle applicazioni di livello aziendale per garantire buone prestazioni. Puoi usare plug-in Dataverse, stored procedure o spostamento di dati per duplicare i dati in un'unica tabella ottimizzata per l'esecuzione di query. La domanda chiave è: quanto devono essere aggiornati questi dati? Se puoi permetterti un ritardo, puoi utilizzare questa tecnica per velocizzare la tua app.

Suggerimenti

Per raggiungere questo obiettivo, considera le seguenti domande e suggerimenti:

  1. Quanto è importante per un cliente vedere il valore dei dati in una raccolta o in una griglia di dati? Sarebbe accettabile selezionare prima un record e poi mostrare i dati in un modulo?
  2. Una vista può eseguire le operazioni preliminari necessarie per visualizzare i dati nel formato corretto?
  3. Stai utilizzando un operatore "IN" dove funzionerà "StartsWith"?
  4. Quanto devono essere aggiornati i tuoi dati? Esiste una strategia di duplicazione dei dati che puoi utilizzare per far funzionare la tua query su una singola tabella per impostazione predefinita?