Wie löscht man in einer QlikView-Applikation nicht benötigte Felder um Ressourcen zu sparen.
Die Ausgangssituation:
Sie haben Ihre QlikView-Applikation oder QVDs erstellt, mit denen Sie Daten aus Ihrem Quellsystem, Ihrer Datenbank laden. Nun haben Sie einige Tabellen und Felder in QlikView von denen Sie einige (vorerst) nicht benötigen, möchten aber Ihre Load-Scripts nicht ändern, da sie die Daten vielleicht in Kürze für weitere Analysen benötigen werden; dennoch möchten Sie Speicherplatz am Server/in Ihrer QlikView-Applikation sparen und nicht benötigte Felder dynamisch droppen/löschen.
Dafür habe ich nun die Lösung:
In der nachfolgend präsentierten Lösung können Sie in Ihrer QlikView-Applikation durch Verwendung einer Konfigurations-Datei dynamisch Felder löschen/droppen.
Schritt 1:
Im meinem Beispiel lade ich Daten von QVDs die Tabellen „Kunden“ und „Bestellungen“:
Folgende Felder werden nicht benötigt:
- PersonalNr
- PersonalNrBestell
- Länderkennz
- Fax
Nun erstelle ich als nächstes in der QlikView-Applikation ein Tabellendigramm mithilfe der Systemfelder, in dem alle Felder, die momentan verwendet werden, exportiert werden können. Zusätzlich zu den zwei Spalten „Table“ und „Field“ füge ich eine dritte, leere Spalte hinzu:
Diese Tabelle kann ich nun leicht in Excel exportieren (XL Icon) um dort die Felder in der Spalte DropIt mit einem „X“ zu markieren, die ich in weiterer Folge löschen möchte.
Schritt 2:
Nun füge ich folgendes Script am Ende meines Load-Scripts hinzu:
// Load the values from the excel-sheet into a temporary table
// called "DropFields" for later usage ...
//
// Before using this script in your application just check if the
// path to "DropField_Definition.xls" is correct!
DropFields:
LOAD
Table,
Field,
DropIt
FROM DropField_Definition.xls (biff, embedded labels, table is Sheet1$);
Trace ----------------------------------------------------------;
Trace Starting to drop fields ...;
// now iterate through all the values in the temporary table "DropFields"
for i = 0 to (NoOfRows('DropFields')-1);
// read the values in the current row
LET vTable = peek('Table', i);
LET vField = peek('Field', i);
Let vSysDeleteIt = upper(peek('DropIt',i));
if (vSysDeleteIt = 'X') then
SET ErrorMode = 0; //prevent errors if field does not exist
Trace DROP FIELD $(vField) from $(vTable);
// drop the field by name
drop field $(vField) from $(vTable);
SET ErrorMode = 1; //reset errorMode to default
end if
next
Trace ### - finished dropping fields;
Trace ----------------------------------------------------------;
// finally drop the temporary table "DropFields"
DROP TABLE DropFields;
Beim nächsten Reload werden nun die im Excel definierten Felder automatisch gelöscht:
Vorteile:
- Wenn ich davon ausgehe, dass diese Lösung bei einem täglichen Ladeprozess am Ende ausgeführt wird, lukriere ich den Vorteil, dass ich zeitweilig nicht benötigte Felder jederzeit sehr schnell wieder „aktivieren“ (nicht mehr löschen) kann und somit einerseits an Flexibilität gewinne, andererseits doch Speicherplatz am QlikView-Server (wie es wohl meistens der Fall sein wird) einspare.
Nachteile
- Dieser Prozess braucht natürlich Rechenzeit; natürlich wäre es effizienter, die Felder, die wir durch diese Lösung wieder löschen, gleich nicht zu laden, um sie anschliessend wieder zu löschen; in Situationen, wo es darum geht, den Load-Prozess möglichst kurz zu halten, würde ich daher diese Lösung nicht einsetzen.
P.S.: Auf wen das ursprüngliche Copyright dieser Idee geht, weiß ich leider nicht; ich habe diese Idee mal aufgeschnappt, umgesetzt und verfeinert und wende dies nun regelmäßig an und bin happy damit
Beispieldateien zu diesem Beitrag (ZIP, 914 KB)
Possibly related posts:
- QlikTip #9: Löschen von Variablen
Variablen können in Qlikview auf drei Varianten gelöscht werden: Löschen über die Benutzeroberfläche/den Windows Client Löschen im Load-Script Löschen mit einem Makro Variante 1: Löschen über den Windows-Client Das Löschen über die Benutzeroberfläche erfolgt über... - QlikTip #11: Einlesen von Ini-Dateien
QlikView bietet eine Reihe von Funktionalitäten an, wie man xml-, Excel-, csv-,txt-Dateien, usw. strukturiert einlesen kann. Dieser Tip zeigt, wie man auch .ini-Dateien sinnvoll auslesen kann. “Typische” Ini-Dateien haben folgende Struktur (siehe auch http://en.wikipedia.org/wiki/INI_file): [Section1]... - QlikTip #3: Überprüfen, ob ein Feld existiert
Dieser Beitrag zeigt, wie man in einem Lade-Script feststellen kann, ob ein Feld in einer bereits geladenen Tabelle existiert oder nicht.... - QlikTip #5: Suchen in Systemfeldern
Bei umfangreichen Applikationen erstelle ich eigentlich standardmäßig ein verstecktes Sheet, in dem ich die Systemfelder anzeigen lasse. Bei der Vorstellung des neuen Objektes „Suchbox“ stellte sich mir die Frage, wie man da sinnvoll die Suchbox... - QlikTip #7: Überprüfen, ob eine Tabelle existiert
Im QlikTip #3 habe ich ja bereits ausgeführt, wie man im Load-Script überprüfen kann, ob ein Feld existiert oder nicht. Wie kann man nun aber überprüfen, ob eine Tabelle existiert oder nicht, dies habe ich... - QlikTip #12: Erweiterung des Store Into-Befehls in QlikView 9
STORE INTO konnte bis dato zur Speicherung einer Tabelle in eine QVD-Datei verwendet werden. // Store table Customers into Qvd-file STORE Customers INTO Customers.qvd (qvd); Dabei ist (auch in vorherigen Versionen) der Parameter nach dem... - QlikTip #13: Verschlüsselung von Daten
QlikView Dokumente beinhalten oftmals äußerst sensitive und heikle Daten. Was tun, wenn Sie die Daten dennoch „außer Haus“ geben wollen und müssen, z.B. wenn Sie auf Ihrem Laptop weiterentwickeln wollen, wenn Sie eine Beispielapplikation an...





Mag. Stefan WALTHER
4 Comments
Hallo Stefan!
Danke für Österreichs wohl ersten Qlikview Blog!
Ich hab gleich den RSS Feed abonniert, und kann hoffentlich von deinen Tipps etwas lernen
Hallo Roland,
freut mich, dass Du hierher gefunden hast!
Schöne Grüsse
Stefan
Sounds interesting, but I cannot really understand the content of this article (German only
).
Could you please translate this!
V.
Best regards
Stefan