Optimieren der App-Leistung
Mit einer geringeren App-Größe, vereinfachten Datenmodellen und der strategischen Nutzung der Aggregierung mit Auswahlformeln lässt sich die App-Leistung steigern. In diesem Abschnitt erfahren Sie, wie Sie Leistungsprobleme vermeiden können, indem Sie auf Bereiche achten, die zu einer Beeinträchtigung der Leistung führen können. Zudem wird gezeigt, wie Sie die App-Leistung bewerten und überwachen können.
Im Leistungsbeurteilungs-Tool können Sie die Leistung Ihrer App einsehen. Weitere Informationen finden Sie unter App-Leistungsbeurteilung.
App-Komplexität
Diese nicht fest definierten Kategorien können Sie bei der Diagnose von Problemen unterstützen. Je komplexer die Apps, desto geringer ist ihre Leistung.
Einfache Apps:
- Enthalten keine Aggregierung mit Auswahlformeln oder If()-Anweisungen.
- Enthalten keine großen Tabellen.
- Nutzen ein einfaches Datenmodell.
- Enthalten einfache Berechnungen.
- Können große Datenmengen umfassen.
Mäßig komplexe Apps:
- Enthalten ein Datenmodell mit vielen Tabellen, befolgen aber Best Practices.
- Verwenden Aggregierung mit Auswahlformeln und mehrere If()-Anweisungen.
- Enthalten große oder breite Tabellen in Arbeitsblättern (mindestens 15 Spalten).
Komplexe Apps:
-
Weisen ein sehr komplexes Datenmodell auf.
- Stellen Verbindungen zu großen Datenmengen her.
- Enthalten komplexe Berechnungen, Diagramme und Tabellen.
Große Datenmengen
Diese Architekturstrategien können Sie verwenden, wenn Sie eine Verbindung zu großen Datenmengen herstellen.
Segmentierung
Sie können QVDs nach Dimensionen wie Zeitrahmen, Region oder Aggregierungsebene segmentieren. Beispiel: Sie verfügen über die folgenden Dateien:
- Eine QVD, die Daten der letzten zwei Jahre enthält.
- Eine QVD, die Verlaufsdaten für einen längeren Zeitraum als zwei Jahre enthält.
Eine QVD, die alle auf einer höheren Ebene aggregierten Daten enthält. Beispielsweise wurde nach Monat statt nach Datum oder nach Land statt nach einzelnen Kunden aggregiert.
- Eine große QVD mit allen Daten, die nur von einem kleinen Teil der Benutzer verwendet wird.
Auf ähnliche Weise können Sie die App segmentieren. Kleinere Apps reichen für den Analysebedarf der meisten Benutzer aus. Dadurch lassen sich Kosten einsparen.
Sie können auch mehrere Apps mit Schwerpunkten auf verschiedene Regionen haben. So brauchen die Benutzer keine App mit Daten zu öffnen, an denen sie kein Interesse oder für die sie keine Zugriffsberechtigung haben. Auch Daten, auf die nicht über Abschnittszugriff zugegriffen werden kann, benötigen Arbeitsspeicher.
Generierung von On-Demand-Apps (ODAG)
In Qlik Sense On-Demand-Apps erhalten die Benutzer zusammenfassende Ansichten von großen Datenspeichern. Sie können die relevanten Teilmengen der Daten identifizieren und für eine detaillierte Analyse laden.
Aus Benutzerperspektive gibt es zwei Apps:
- Einen Einkaufswagen mit aggregierten Daten.
- Eine leere Vorlagen-App, in der Details angezeigt werden können.
Der Benutzer trifft Auswahlen in der Einkaufswagen-App. Nachdem ein Schwellenwert erreicht ist, wird ein benutzerdefiniertes LOAD-Skript erstellt, das die Vorlagen-App mit den angeforderten Details füllt. Weitere Informationen finden Sie unter Big Data mit On-Demand-Apps verwalten.
Anwendungsverkettung
Anwendungsverkettung (in QlikView als Dokumentverkettung bezeichnet) bedeutet, dass eine aggregierte App vorhanden ist, die von den Benutzern regelmäßig genutzt wird. Wenn ein Benutzer weitere Details benötigt, können Auswahlen von der aggregierten App an eine Detail-App übergeben werden, wo die Daten auf einer detaillierteren Granularitätsebene angezeigt werden können. Dadig genuurch wird Arbeitsspeicher gespart, weil die Benutzer keine unnötig detaillierten Daten laden. Zur Anwendungsverkettung fügen Sie Schaltflächenobjekte zu einem Arbeitsblatt hinzu. Weitere Informationen finden Sie unter Anwendungsverkettung.
Anwendungsverkettung wird auch über APIs unterstützt. Beispielsweise können Sie die App Integration API verwenden, um benutzerdefinierte Anwendungsverkettung zu erstellen. Weitere Informationen finden Sie unter App Integration API (nur auf Englisch).
Dynamische Ansichten
Durch dynamische Ansichten erhalten Sie aktuelle Visualisierungen für große Datenvolumen oder schnell wechselnde Datenszenarios. Beachten Sie Folgendes bei der Arbeit mit dynamischen Ansichten:
Wenn Sie dynamische Ansichten aktualisieren, wird die Datenquelle direkt geladen. Die Aktualisierungsleistung wird durch die Leistung der zugrunde liegenden Datenquelle beeinflusst.
Vorlagen-Apps für dynamische Ansichten können Sie beim Erstellen dynamischer Diagramme unterstützen.
Weitere Informationen zum Verwenden von dynamischen Ansichten finden Sie unter Verwalten von Daten mit dynamischen Ansichten.
Direct Query
Die Verwendung von In-Memory-Apps wird empfohlen, aber Direct Query lässt auch das Aufbewahren der Daten in ihrer Originalquelle zu. Beachten Sie Folgendes, um Ihre Direct Query-Nutzung zu optimieren:
Die Leistung von Direct Query wird stark durch die Leistung der zugrunde liegenden Datenquelle beeinflusst.
Halten Sie Ihr Direct Query-Datenmodell so einfach wie möglich, da komplexe Abfragen zu Leistungsproblemen führen könnten.
Weitere Informationen zu Direct Query finden Sie unter Direkter Zugriff auf Cloud-Datenbanken mit Direct Query.
Leistung des Datenmodells
Diese Indikatoren können sich auf die Leistung des Datenmodells auswirken. Jeder ist eine Best Practice, die die Nutzbarkeit der App verbessert.
Aktion | Beschreibung |
---|---|
Synthetische Schlüssel entfernt | Qlik Sense erstellt synthetische Schlüssel, wenn zwei oder mehr Datentabellen zwei oder mehr gemeinsame Felder haben. Das kann bedeuten, dass ein Fehler im Skript oder im Datenmodell vorliegt. Informationen zur Diagnose von synthetischen Schlüsseln finden Sie unter Synthetische Schlüssel. |
Zirkelbezüge aus Datenmodell entfernt | Zirkelbezüge treten auf, wenn zwei Felder mehr als eine Zuordnung aufweisen. Qlik Sense versucht, diese aufzulösen, indem die Verbindung zu einer der Tabellen geändert wird. Es sollten jedoch alle Zirkelbezugwarnungen gelöst werden, siehe Zirkelbezüge und Auflösen von Zirkelbezügen. |
Geeignete Datengranularität | Sie sollten nur die benötigten Daten laden. Beispiel: Eine Gruppe von Benutzern benötigt nur Daten aufgeteilt nach Woche, Monat und Jahr. Sie können entweder die aggregierten Daten laden oder die Daten innerhalb des Ladeskripts aggregieren, um Arbeitsspeicher zu sparen. Wenn ein Benutzer Daten auf einer detaillierteren Granularitätsebene visualisieren muss, können Sie ODAG oder Dokumentverkettung verwenden. |
QVDs nach Möglichkeit verwendet | Eine QVD-Datei enthält Datentabellen, die aus Qlik Sense exportiert wurden. Dieses Dateiformat ist für schnelles Einlesen von Daten aus einem Skript optimiert, aber dennoch sehr kompakt. Das Einlesen von Daten aus QVD-Dateien ist etwa 10-100 Mal schneller als das Einlesen aus anderen Datenquellen. Weitere Informationen finden Sie unter Arbeiten mit QVD-Dateien. |
Beim Laden optimierte QVD-Dateien | QVD-Dateien können in zwei Modi gelesen werden: Standard (schnell) und optimiert (schneller). Der ausgewählte Modus ergibt sich automatisch aus dem Skriptmodul. Das optimierte Laden unterliegt bestimmten Einschränkungen. Es ist möglich, Felder umzubenennen, aber mit allen folgenden Vorgängen wird das Standardladen ausgeführt:
|
Nutzen des inkrementellen Ladens | Wenn Ihre App eine Verbindung mit großen Datenmengen aus Datenbanken herstellt, die kontinuierlich aktualisiert werden, dann kann das erneute Laden des gesamten Datenbestands zeitaufwändig sein. Verwenden Sie stattdessen inkrementelles Laden, um neue oder geänderte Datensätze aus der Datenbank abzurufen. Weitere Informationen finden Sie unter Laden von neuen und aktualisierten Datensätzen mit inkrementellem Laden. |
Konsolidiertes Snowflake -Modell | Wenn Sie mit einem Snowflake-Datenmodell arbeiten, können Sie möglicherweise die Anzahl der Datentabellen verringern, indem Sie einige von ihnen mit dem Präfix Join oder mit einer anderen Zuordnung verknüpfen. Dies ist besonders bei großen Faktentabellen von Bedeutung. Als generelle Regel sollte nur eine große Tabelle verwendet werden. Weitere Informationen finden Sie unter To Join or Not to Join (Verknüpfen oder nicht verknüpfen). |
Tabellen mit einer kleinen Anzahl Felder sind denormalisiert | Wenn Sie zwei Tabellen mit wenigen Feldern haben, kann die Leistung besser werden, wenn Sie sie verknüpfen. Weitere Informationen finden Sie unter Kombinieren von Tabellen mit Join und Keep. |
Denormalisierte Lookup-(Leaf-)Tabellen mit Zuordnungs-Ladevorgängen | Sie sollten den Zusatz Join nicht verwenden, wenn Sie nur ein Feld aus einer Tabelle in einer anderen Tabelle hinzufügen möchten. Dafür sollten Sie die Lookup-Funktion ApplyMap verwenden, siehe Don't join - use ApplyMap (Nicht verknüpfen - ApplyMap verwenden). |
Entfernte oder vom Datumsfeld entkoppelte Zeitstempel | Datumsfelder können viel Platz belegen, wenn der Zeitstempel vorhanden ist, da die Zeichenfolgendarstellung und die Anzahl der distinkten Werte größer sind. Wenn die Präzision für Ihre Analyse nicht erforderlich ist, können Sie den Zeitstempel beispielsweise auf die nächste Stunde runden, indem Sie Timestamp(Floor(YourTimestamp,1/24)) verwenden, oder die Zeitkomponenten mit Date(Floor(YourTimestamp)) vollständig entfernen. Wenn Sie den Zeitstempel verwenden möchten, können Sie ihn vom Datum entkoppeln. Verwenden Sie die gleiche Floor()-Funktion und erstellen Sie dann ein neues Feld mit der extrahierten Zeit, in etwa wie folgt: Time(Frac(YourTimestamp)). |
Unnötige Felder aus dem Datenmodell entfernt | Laden Sie nur erforderliche Felder in Ihr Datenmodell. Vermeiden Sie die Verwendung von Load * und SELECT. Folgende Felder müssen Sie beibehalten:
|
Link-Tabellen bei Handhabung großer Datenmengen vermieden | Sie sollten sooft wie möglich Link-Tabellen verwenden. Bei großen Datenmengen können zusammengefasste Tabellen jedoch eine bessere Leistung als Link-Tabellen aufweisen. |
Zusammengefasste Dimensionen in neue Felder aufgeteilt | Teilen Sie zusammengefasste Dimensionen in getrennte Felder auf. Dadurch wird die Anzahl der eindeutigen Vorkommen von Werten in Ihren Feldern reduziert. Das Verfahren ist ähnlich wie beim Optimieren von Zeitstempeln. |
AutoNumber nach Möglichkeit verwendet | Sie können einen optimierten Ladevorgang erstellen, indem Sie die Daten zuerst aus einer QVD-Datei laden und dann den AutoNumber-Befehl verwenden, um die Werte in Symbolschlüssel zu konvertieren.Weitere Informationen finden Sie unter AutoNumber. |
Dateninseln vermieden | Dateninseln können nützlich sein, beeinträchtigen aber meist die Leistung. Verwenden Sie Variablen, um Inseln für Auswahlwerte zu erstellen. |
QVDs werden in inkrementellen Zeitrahmen gespeichert | Sie sollten QVDs in Segmenten speichern, z. B. monatlich. Diese kleineren monatlichen QVDs können dann viele verschiedene Apps unterstützen, die möglicherweise nicht alle Daten benötigen. |
Arbeitsblattleistung
Die folgenden Best Practices verbessern die Leistung von Arbeitsblättern und Visualisierungen.
Aktion | Beschreibung |
---|---|
Die If()-Funktion wird nach Möglichkeit vermieden | Wenn die Funktion If() innerhalb einer Aggregierungsfunktion verwendet wird, funktioniert sie auf Datensatzebene und wird viele Male ausgewertet. Wenn Sie beispielsweise 1000 Datensätze in einer Aggregierung haben, wird eine If()-Bedingung 1000 Mal ausgewertet. Das kann schnell ausufern, wenn Sie Befehle verschachteln. Stattdessen sollten Sie Aggregierung mit Auswahlformeln verwenden. Ein Filter für die Aggregierung mit Auswahlformeln wird vor der Aggregierung angewendet, was die Antwortzeit verkürzt. Diese Antworten können mit Aggregierung für Auswahlformeln auch im Zwischenspeicher gespeichert werden, was mit If() nicht möglich ist. Sie können auch andere Funktionen und Änderungen am Datenmodell in Betracht ziehen. |
Felder aus unterschiedlichen Tabellen innerhalb einer Aggregierungstabelle werden nach Möglichkeit vermieden. | Wenn eine Aggregierung bewertet wird, durchläuft die Berechnung zwei Schritte:
Der Single-Threaded-Teil kann erhebliche Auswirkungen auf die Leistung haben. Ein Beispiel sind zahlreiche Felder innerhalb einer Aggregierung, zum Beispiel Sum(Quantity*ListPrice). Wenn sich Quantity in der Fakttabelle und ListPrice in der Master-Produkttabelle befindet, muss die Engine zuerst die beiden Tabellen verknüpfen, um die Kombinationen zu suchen, bevor sie mit dem Summieren des Produkts beginnen kann. Die Verknüpfung ist der Single-Threaded-Teil, das Summieren der Multi-Threaded-Teil. Wenn beide Felder sich in der gleichen Tabelle befinden, ist keine Verknüpfung erforderlich, und die Aggregierung wird erheblich schneller ausgewertet. |
Aggr()- und verschachtelte Aggr()-Funktionen werden so selten wie möglich verwendet | Die Aggr()-Funktion beeinträchtigt die Leistung stark. Eine falsche Nutzung kann zu ungenauen Ergebnissen führen. Das kann zum Beispiel in einer Tabelle mit Dimensionen vorkommen, die von den Dimensionen innerhalb der Aggr()-Funktion abweichen. Weitere Informationen finden Sie unter When should AGGR not be used? (Wann sollte AGGR nicht verwendet werden?) |
Aggregierung mit Auswahlformeln wird nach Möglichkeit verwendet | Aggregierung mit Auswahlformeln bietet eine Möglichkeit, einen Satz von Datenwerten zu definieren, der sich vom normalen, durch die aktuellen Auswahlen definierten Satz unterscheidet. Weitere Informationen finden Sie unter Aggregierung mit Auswahlformeln. |
String-Vergleiche nach Möglichkeit vermieden | String-Vergleiche sind nicht so effizient wie Aggregierung mit Auswahlformeln. Beispielsweise sollten Sie Match(), MixMatch(), WildMatch() und Pick() vermeiden. Erstellen Sie stattdessen Flags im Skript oder verwenden Sie Aggregierung mit Auswahlformeln. Weitere Informationen finden Sie unter Konditionalfunktionen und Performance of conditional aggregations (Leistung von bedingten Aggregierungen). |
Berechnungsbedingungen werden für Objekte mit umfangreichen Berechnungen verwendet | Sie können Visualisierungen mit zahlreichen Datensätzen haben, wenn keine Auswahlen vorhanden sind. Als Best Practice können Sie Berechnungsbedingungen so zu Objekten hinzufügen, dass diese erst dann gerendert werden, nachdem bestimmte Auswahlen getroffen wurden. Damit wird die Erstellung von sehr großen Hypercubes vermieden. Hier ein Beispiel: GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1. In diesem Szenario wird die Visualisierung erst dann gerendert, wenn der Benutzer ein einziges Land auswählt bzw. andere Auswahlen trifft, für die nur ein Land möglich ist. |
Kennzahlen werden im Skript nach Möglichkeit vorab berechnet | Alle Kennzahlen, die sich auf der niedrigsten Granularitätsebene im Datenmodell befinden, sollten im Skript berechnet werden. Wenn beispielsweise im gleichen Datensatz in einer Tabelle Sales und Cost vorhanden sind, können Sie die Marge ableiten, indem Sie Sales - Cost AS Margin berechnen. Sie können auch andere Werte vorab aggregieren, wenn Sie wissen, dass sie nicht basierend auf der Auswahl variieren oder an eine andere Granularitätsebene gebunden sind. |
Tabellen haben weniger als 15 Spalten und weisen Berechnungsbedingungen auf | Eine Tabelle mit 15 Spalten kann als breit bezeichnet werden. Wenn Ihre Tabellen viele Datensätze enthalten, sollten Sie berechnete Bedingungen für das Tabellenobjekt verwenden, damit es erst gerendert wird, nachdem bestimmte Auswahlen oder Kriterien erfüllt sind. Wenn Ihre Tabelle sehr breit ist, haben Sie folgende Möglichkeiten:
|
Arbeitsblätter enthalten nicht zu viele Objekte | Objekte werden berechnet, wenn der Benutzer zum Arbeitsblatt navigiert. Jedes Mal, wenn ein Benutzer eine Auswahl in diesem Arbeitsblatt trifft, wird jedes Objekt neu berechnet, dessen aktueller Status nicht im Zwischenspeicher vorhanden ist. Wenn Sie ein Arbeitsblatt mit zahlreichen Diagrammen haben, muss der Benutzer bei fast jeder Auswahl warten, bis jedes einzelne Objekt berechnet ist. Dadurch wird die Engine stark belastet. Als Best Practice sollten Sie das Konzept Dashboard/Analysis/Reporting (DAR) befolgen, um eine übersichtliche und minimale App zu erstellen. Weitere Informationen finden Sie unter DAR methodology (DAR-Methode). |
Numerische Flags werden im Skript genutzt, um sie in Aggregierung mit Auswahlformeln einzusetzen | Aggregierung mit Auswahlformeln mit Flags kann effizienter als String-Vergleiche und Multiplikationen sein. |
Master-Elemente ermöglichen das Ziehen und Ablegen von gesteuerten Metriken und garantieren, dass Formeln im Zwischenspeicher gespeichert werden. Beispielsweise unterscheidet sich Sum(Sales) von SUM(Sales). Formeln werden mit ihrer Schreibweise (auch Groß- und Kleinschreibung) gespeichert und müssen genau übereinstimmen, damit sie wiederverwendet werden können. |
Leistung des Datenladevorgangs
Die Optimierung des Datenladevorgangs ist wichtig für eine reibungslose und responsive Erfahrung bei der Arbeit mit Apps in Qlik Cloud. In diesem Abschnitt wird auf einige Faktoren eingegangen, die sich auf die Leistung auswirken. Daneben finden Sie hier Tipps zur Vermeidung von Leistungsproblemen.
Qlik Data Gateway - Direct Access
Wenn Sie Qlik Data Gateway - Direct Access verwenden, um Daten in Ihrer App neu zu laden, wirken sich die folgenden Faktoren auf die Leistung aus:
Verbindungsgeschwindigkeit und Latenz zwischen dem Computer, der das Daten-Gateway hostet, und der Datenbank.
Verbindungsgeschwindigkeit und Latenz zwischen dem Computer, der das Daten-Gateway hostet, und dem Qlik Cloud Mandanten. Im Idealfall sollten Sie das Daten-Gateway in der gleichen Region wie den Qlik Cloud Mandanten hosten, um eine bessere Leistung zu erzielen.
Datenbankspeicher
Langsame Speicherverbindungen können die Ladezeiten verlängern. Beachten Sie Folgendes für Datenbanken, die lokal oder in der Cloud gehostet werden:
Lokal: Wenn Ihre Datenbank lokal gespeichert ist und den Server mit anderen Anwendungen teilt, kann ihre Leistung von den Aktivitäten dieser anderen Anwendungen beeinträchtigt werden.
Cloud: Wenn sie angemessen dimensioniert sind, bieten Cloud-Datenbanken in der Regel bessere Leistung als lokale Datenbanken. Wählen Sie für optimale Ergebnisse eine Region für Ihren Cloud-Speicher, die in der Nähe Ihres Qlik Cloud Mandanten liegt.