Optimizing app performance
Le prestazioni delle app possono essere migliorate riducendone le dimensioni, semplificando i modelli dati e mediante l'uso strategico di Set Analysis. Questa sezione contribuisce a evitare problemi di prestazioni indicando aree con un potenziale impatto sulle prestazioni e segnalando come valutare e monitorare le prestazioni delle app.
Complessità delle app
Di seguito sono riportate le categorie isolate che possono contribuire a diagnosticare problemi. Le app più complesse forniscono prestazioni inferiori.
App semplici:
- Non includono Set Analysis complesse o istruzioni If().
- Non includono tabelle di grandi dimensioni.
- Utilizzano un modello dati semplice.
- Includono calcoli semplici.
- Possono presentare grandi volumi di dati.
App medie:
- Presentano un modello dati con molte tabelle, ma seguono le procedure consigliate.
- Utilizzano Set Analysis e svariate istruzioni If().
- Presentano tabelle grandi o ampie sui fogli (almeno 15 colonne).
App complesse:
-
Presentano un modello dati molto complesso.
- Si connettono a grandi volumi di dati.
- Contengono calcoli, grafici e tabelle complessi.
Dettagli delle app
È necessario considerare il proprio ambiente hardware rapportandolo alle dimensioni delle app, dato che influisce sulle prestazioni della propria distribuzione di Qlik Sense. Ad esempio, in caso di mancata ottimizzazione, le app potrebbero richiedere maggiori risorse hardware.
Il monitoraggio delle dimensioni delle app aiuterà a:
- Comprendere le attuali prestazioni.
- Comprendere l'impatto sulle prestazioni della distribuzione di una nuova app.
- Comprendere l'impatto sulle prestazioni della modifica di un'app esistente.
- Risolvere problemi di prestazioni.
- Pianificare la crescita futura.
Qlik fornisce strumenti che possono aiutare l'utente a valutare le proprie app. Per ulteriori informazioni, vedere: Prestazioni e scalabilità in Qlik Sense Enterprise (solo in lingua inglese).
Di seguito sono riportati gli elementi di base delle app in grado di influire sulle prestazioni:
Funzionalità | Descrizione |
---|---|
Dimensioni su disco delle app (MB) | È possibile trovare le dimensioni delle app in QMC. Andare in App, e aprire il Selettore colonne sul lato destro, accanto ad Azioni. Fare clic sul pulsante di opzione accanto a Dimensione file (MB). Se si sta utilizzando Qlik Sense Desktop, è possibile trovare le dimensioni delle app in Windows Explorer. La cartella predefinita è %USERPROFILE%\Documenti\Qlik\Sense\App. La cartella App elenca tutti i nomi delle app e le dimensioni dei file. |
Dimensioni delle app a livello di RAM (GB) |
È possibile determinare l'impronta base di un'app a livello di RAM nel seguente modo:
È possibile utilizzare App Metadata Analyzer per individuare questa metrica se si sta utilizzando Qlik Sense June 2018 o una versione successiva. Per ulteriori informazioni, vedere App Metadata Analyzer (solo in lingua inglese). |
Righe totali delle app (M) |
È possibile utilizzare i campi del sistema per calcolare le righe totali. Creare un KPI con la misura Sum($Rows). Per ulteriori informazioni, vedere Campi di sistema. |
Campi totali delle app | È possibile utilizzare i campi del sistema per calcolare i campi totali. Creare un KPI con la misura Sum($Fields). Per ulteriori informazioni, vedere Campi di sistema. |
Tabelle totali delle app | È possibile utilizzare i campi del sistema per calcolare le tabelle totali. Creare un KPI con la misura Count(DISTINCT $Table). Per ulteriori informazioni, vedere Campi di sistema. |
Monitoraggio della propria app
Qlik Management Console (QMC) include varie app per il monitoraggio delle prestazioni del sistema e l'utilizzo su Qlik Sense Enterprise on Windows:
-
L'app Operations Monitor offre informazioni sull'uso dell'hardware, quali la memoria server e l'utilizzo della CPU, gli utenti attivi e le operazioni di caricamento. Fornisce inoltre un riepilogo e informazioni dettagliate su errori, avvisi e attività di registrazione che si verificano nell'ambiente server Qlik Sense.
-
L'app License Monitor tiene traccia dell'uso delle licenze e favorisce il monitoraggio delle modifiche all'allocazione delle licenze.
- L'app Log Monitor presenta quasi tutti i dati di registrazione disponibili e consente l'analisi dei trend e la risoluzione dei problemi.
- L'app Sessions Monitor mostra i dati di registrazione relativi all'utilizzo delle app.
- L'app Reloads Monitor presenta informazioni dettagliate sui dati di caricamento, sia da QMC sia dalle app aperte nell'hub.
- L'app Sense System Performance Analyzer mostra le prestazioni di Qlik Sense tra tutti i nodi.
- L'app Sense Connector Logs Analyzer fornisce informazioni strategiche sull'utilizzo e gli errori di connettori Qlik specifici.
- L'app App Metadata Analyzer fornisce una visualizzazione olistica di tutte le proprie app Qlik Sense, inclusi dettagli di livello granulare di un modello dati delle app e del relativo utilizzo delle risorse.
Per ulteriori informazioni, vedere Monitoraggio di un sito Qlik Sense Enterprise on Windows (solo in lingua inglese).
Grandi volumi di dati
Tali strategie di architettura possono essere impiegate al momento di connettersi a grandi volumi di dati.
Segmentazione
È possibile segmentare QVDs in base alle dimensioni, come un intervallo di tempo, una regione o un livello di aggregazione. Ad esempio, è possibile avere:
- Un QVD contenente dati relativi ai due anni più recenti.
- Un QVD contenente dati cronologici che si spingono oltre quei due anni.
-
Un QVD contenente tutti i dati aggregati su un livello superiore. Ad esempio, per mese invece della data o per paese invece di singoli clienti.
- Un QVD di grandi dimensioni con tutti i dati, utilizzato solo da un piccolo sottogruppo di utenti.
È possibile segmentare le app in un modo simile. Le app più piccole risponderanno alle esigenze analitiche di gran parte degli utenti. Ciò consente di risparmiare memoria.
È inoltre possibile avere più app focalizzate su regioni diverse. In questo modo, gli utenti non apriranno un'app con dati a cui non sono interessati o per i quali non dispongono dei diritti di accesso. I dati non accessibili tramite Section Access hanno comunque un impatto sulla memoria.
Generazione di app on-demandODAG
Le app on-demand di Qlik Sense forniscono agli utenti viste aggregate degli archivi di big data. Possono identificare e caricare sottogruppi rilevanti di dati per svolgere analisi dettagliate.
Dalla prospettiva di un utente, sono presenti due app:
- Un carrello con dati aggregati.
- Un'app modello vuota utilizzata per visualizzare i dettagli.
L'utente effettua selezioni nell'app del carrello. Una volta raggiunta una soglia, viene creato uno script LOAD personalizzato che popola l'app modello con i dettagli richiesti. Per ulteriori informazioni, vedere Gestione dei big data con le app on demand.
Concatenamento di applicazioni
Il concatenamento di applicazioni (noto come concatenamento di documenti in QlikView) prevede la presenza di un'app aggregata, che gli utenti utilizzano regolarmente. Se un utente richiede maggiori dettagli, è possibile inoltrare le selezioni dall'app aggregata a un'app dettagliata, in modo da consentire la visualizzazione di un livello inferiore di granularità. Ciò consente di risparmiare memoria, dato che gli utenti non caricano dettagli non necessari. Il concatenamento di applicazioni può essere eseguito aggiungendo oggetti pulsante a un foglio. Per ulteriori informazioni, vedere Pulsante.
Il concatenamento di applicazioni è supportato anche tramite APIs. Ad esempio, è possibile usare le App Integration API per creare un concatenamento di app personalizzato. Per ulteriori informazioni, vedere App Integration API (solo in lingua inglese).
Prestazioni del modello dati
Gli indicatori riportati di seguito possono avere un impatto sulle prestazioni del modello dati. Ciascuno rappresenta una procedura consigliata che migliorerà l'usabilità delle app.
Azione | Descrizione |
---|---|
Rimozione delle chiavi sintetiche |
Qlik Sense crea chiavi sintetiche quando due o più tabelle di dati hanno due o più campi in comune. Ciò può significare che è presente un errore nello script o nel modello dati. Per sottoporre a diagnosi le chiavi sintetiche, vedere Chiavi sintetiche. |
Rimozione dei riferimenti circolari dal modello dati |
I riferimenti circolari si verificano quando due campi presentano più di un'associazione. Qlik Sense cercherà di risolverli modificando la connessione a una delle tabelle. Tuttavia, è consigliabile risolvere tutti gli avvisi relativi a riferimenti circolari, vedere Comprensione e risoluzione dei riferimenti circolari. |
Granularità appropriata dei dati |
Si consiglia di caricare soltanto i dati necessari. Ad esempio: un gruppo di utenti necessita soltanto di dati divisi per settimana, mese e anno. È possibile caricare i dati aggregati o aggregare i dati all'interno dello script di caricamento per risparmiare memoria. Se un utente necessita di visualizzare i dati a un livello di granularità inferiore, è possibile utilizzare ODAG o il concatenamento dei documenti. |
Utilizzo dei QVDs laddove possibile |
Un QVD è un file contenente una tabella di dati esportati da Qlik Sense. Questo formato di file è ottimizzato per la velocità di lettura dei dati da uno script, rimanendo comunque molto compatto. La lettura di dati da un file QVD è in genere 10-100 volte più veloce rispetto alla lettura da altre sorgenti dati. Per ulteriori informazioni, vedere Utilizzo dei file QVD. |
Ottimizzazione dei file QVD al caricamento |
I file QVD possono essere letti in due modalità: standard (veloce) e ottimizzata (più veloce). La modalità selezionata viene determinata automaticamente dal motore degli script. Vi sono alcune limitazioni riguardo ai caricamenti ottimizzati. È possibile rinominare i campi, tuttavia ognuna di queste operazioni comporterà un caricamento standard:
|
Utilizzo di carichi incrementali |
Se la propria app si connette a un numero elevato di dati provenienti da database in costante aggiornamento, il ricaricamento dell'intera serie di dati può richiedere diverso tempo. È invece consigliabile utilizzare il carico incrementale per recuperare record nuovi o modificati dal database. Per ulteriori informazioni, vedere Caricamento di record nuovi e aggiornati mediante il carico incrementale. |
Consolidamento del modello Snowflake |
Se si dispone di un modello dati snowflake, potrebbe essere necessario ridurre il numero di tabelle dati unendone alcune mediante il prefisso Join o un'altra mappatura. Ciò risulta particolarmente importante per le grandi tabelle dei fatti. In genere è preferibile avere solo una grande tabella. Per ulteriori informazioni vedere Unire o non unire. |
Denormalizzazione delle tabelle con un numero ridotto di campi |
Se si dispone di due tabelle con pochi campi, la loro unione potrebbe migliorare le prestazioni. Per ulteriori informazioni, vedere Prossimi passaggi nello scripting. |
Denormalizzazione delle tabelle di ricerca (foglia) con carichi di mappatura |
È consigliabile non utilizzare il prefisso Join se è necessario aggiungere un solo campo da una tabella a un'altra. Si consiglia invece di utilizzare la funzione di ricerca ApplyMap , vedere Non unire - utilizzare ApplyMap. |
Rimozione o disaccoppiamento delle indicazioni di data/ora dal campo data |
I campi data possono riempire lo spazio in presenza di un'indicazione di data/ora, dato che la rappresentazione stringa è più grande, così come il numero di valori distinti. Se la precisione non è necessaria per la propria analisi, è possibile arrotondare l'indicazione di data/ora, p. es. all'ora più vicina, usando Timestamp(Floor(YourTimestamp,1/24)) oppure rimuovendo completamente il componente ora usando Date(Floor(YourTimestamp)). Se non si desidera l'indicazione di data/ora, è possibile disaccoppiarla dalla data stessa. È possibile utilizzare la stessa funzione Floor(), dopodiché creare un nuovo campo con l'ora estratta usando qualcosa di simile a: Time(Frac(YourTimestamp)). |
Rimozione di campi non necessari dal modello di dati |
Si consiglia di caricare soltanto i campi necessari nel proprio modello di dati. Evitare l'utilizzo di Load * e SELECT. Assicurarsi di mantenere:
|
Esclusione delle tabelle dei collegamenti al momento di occuparsi di grandi volumi di dati |
Laddove possibile, utilizzare le tabelle dei collegamenti. Tuttavia, se ci si sta occupando di grandi volumi di dati, le tabelle concatenate possono fornire prestazioni migliori rispetto alle tabelle dei collegamenti. |
Scomposizione delle dimensioni concatenate in nuovi campi |
Si consiglia di scomporre le dimensioni concatenate in campi separati. Tale operazione riduce il numero di occorrenze univoche dei valori nei propri campi. Ciò risulta simile al modo in cui è possibile ottimizzare le indicazioni di data e ora. |
Utilizzo di AutoNumber laddove possibile |
È possibile creare un caricamento ottimizzato caricando prima i dati da un file QVD e poi utilizzando l'istruzione AutoNumber per convertire i valori in chiavi di simboli. Per ulteriori informazioni, vedere AutoNumber. |
Esclusione delle isole di dati |
Le isole di dati possono risultare utili, ma in genere influiscono negativamente sulle prestazioni. Se si stanno creando isole per i valori di selezione, utilizzare le variabili. |
Archiviazione di QVD in base a intervalli di tempo incrementali |
Si consiglia di archiviare i QVD in segmenti, ad esempio mensili. I QVD mensili, di dimensioni ridotte, possono quindi supportare più app diverse che potrebbero non necessitare di tutti i dati. |
Prestazioni dei fogli
Di seguito vengono riportate procedure consigliate che miglioreranno le prestazioni di fogli e visualizzazioni.
Azione | Descrizione |
---|---|
Esclusione della funzione If() laddove possibile |
Se la funzione If() viene utilizzata all'interno di una funzione di aggregazione, opererà a livello di record e verrà valutata molte volte. Ad esempio, se si dispone di 1000 record in un'aggregazione, una condizione If() verrà valutata 1000 volte. Tale situazione potrebbe incrementare rapidamente in presenza di istruzioni nidificate. Si consiglia invece l'utilizzo di Set Analysis. L'applicazione di un filtro Set Analysis avviene prima dell'aggregazione, comportando una risposta più rapida. Tali risposte possono anche essere memorizzate nella cache mediante Set Analysis, a differenza di If(). È inoltre possibile considerare altre funzioni e modifiche al modello dati. |
I campi da tabelle diverse all'interno di una tabella di aggregazione vengono evitati ove possibile. |
Quando viene valutata un'aggregazione, il calcolo attraversa due passaggi:
La parte a thread singolo può influire considerevolmente sulle prestazioni. Un esempio riguarda la presenza di più campi all'interno dell'aggregazione, ad esempio Sum(Quantity*ListPrice). Se Quantity si trova nella tabella dei fatti, e ListPrice è contenuto nella tabella dei prodotti principali, per prima cosa l'engine ha bisogno di unire le due tabelle per trovare le combinazioni prima che possa iniziare a sommare il prodotto. L'unione è la parte a thread singolo, mentre la somma è a thread multiplo. Se entrambi i campi si trovano nella stessa tabella, non è necessaria alcuna unione, e l'aggregazione è valutata in modo considerevolmente più rapido. |
Utilizzo minimo delle funzioni Aggr() e Aggr() nidificate |
La funzione Aggr() influisce enormemente sulle prestazioni. Un utilizzo errato può fornire risultati imprecisi. Ad esempio, in una tabella con dimensioni diverse rispetto alle dimensioni all'interno della funzione Aggr(). Per ulteriori informazioni, vedere Quando non dovrebbe essere utilizzata la funzione AGGR? |
Utilizzo di Set Analysis laddove possibile |
È possibile utilizzare Set Analysis per definire una serie di valori di dati diversa dalla serie standard definita dalle selezioni correnti. Per ulteriori informazioni, vedere Analisi di gruppo. |
Esclusione dei confronti tra stringhe laddove possibile |
I confronti tra le stringhe non sono efficaci tanto quanto Set Analysis. Ad esempio, è consigliabile evitare Match(), MixMatch(), WildMatch() e Pick(). Creare contrassegni nello script oppure utilizzare Set Analysis. Per ulteriori informazioni, vedere Funzioni condizionali e Prestazioni delle aggregazioni condizionali. |
Utilizzo delle condizioni di calcolo sugli oggetti contenenti calcoli intensivi |
È possibile disporre di visualizzazioni con molti record in assenza di selezioni. Come procedura consigliata, aggiungere condizioni di calcolo agli oggetti, in modo che il loro rendering possa avvenire solo dopo aver effettuato determinate selezioni. Ciò impedisce la creazione di ipercubi di dimensioni molto elevate. Ad esempio: GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1. In questo scenario, la visualizzazione non presenterà un rendering a meno che l'utente non selezioni un singolo paese, oppure effettui altre selezioni in cui è possibile un solo paese. |
Precalcolo delle misure nello script laddove possibile |
Nello script si consiglia di calcolare qualsiasi misura che si trova al livello inferiore di granularità del modello dati. Ad esempio, se nello stesso record in una tabella si dispone di Sales e Cost, è possibile derivare il margine calcolando il Sales - Cost AS Margin. È anche possibile aggregare altri valori in anticipo se non varieranno in base alla selezione, oppure valori vincolati a un livello diverso di granularità. |
Tabelle con meno di 15 colonne e condizioni di calcolo |
Una tabella con 15 colonne può essere considerata ampia. Se le proprie tabelle sono composte da molti record, è consigliabile utilizzare le condizioni calcolate su tale oggetto di tabella in modo che il rendering avvenga solo dopo aver soddisfatto determinate selezioni o criteri. Se la propria tabella è molto ampia, considerare quanto segue:
|
Fogli che non presentano un numero eccessivo di oggetti |
Gli oggetti vengono calcolati quando l'utente naviga nel foglio. Ogni volta che un utente effettua una selezione in tale foglio, se tale stato corrente non esiste nella cache, ciascun oggetto verrà ricalcolato. Se si dispone di un foglio con molti grafici, l'utente dovrà attendere che venga calcolato ogni oggetto in quasi ogni selezione Ciò comporta un carico significativo sul motore. Come procedura consigliata, seguire il concept Dashboard/Analysis/Reporting (DAR) per sviluppare un'app pulita e minimale. Per ulteriori informazioni, vedere Metodologia DAR. |
Sfruttamento dei contrassegni numerici nello script per l'uso in Set Analysis |
Set Analysis può risultare più efficiente con dei contrassegni rispetto all'utilizzo di confronti o della moltiplicazione di stringhe. |
Le voci principali consentono il trascinamento delle metriche governate e garantiscono la memorizzazione nella cache delle espressioni. Ad esempio, Sum(Sales) risulta diverso da SUM(Sales). Le espressioni vengono memorizzate nella cache mantenendo ortografia e uso di maiuscole e minuscole, pertanto devono corrispondere esattamente per poter essere riutilizzate. |