Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
Rainbow
Contributor II
Contributor II

Benutzen von Variablen im Ladescript

Hallo zusammen,

ich möchte eine Textdatei mit mehreren Feldern laden.

Beim Laden der einzelnen Sätze steht in machen Sätzen im Feld "Message" ein Dateiname.

Ich möchte, sobald sich der Dateiname ändert, alle nachfolgenden Sätze ebenfalls mit dem neuen Dateinamen versehen,

so dass ich dann über den Dateinamen alle dazugehörenden Sätze (auch die, die keinen Dateinamen enthalten, aber dazugehören) auswerten kann.

Ich weiß, dass ich mit set und let Variablen zuweisen kann, aber kann ich diese dann auch während des Ladens verändern bzw. zuordnen?

Vielleicht kann jemand helfen😊

Labels (1)
3 Solutions

Accepted Solutions
MarcoWedel

Hallo Rainbow,

dafür brauchst Du keine Variablen per Set oder Let zuzuweisen.

In Deinem Load kannst Du das Feld Dateiname einfach wie folgt aus der Message erzeugen:

If(Len(Trim(Message)),Message,Peek(DateiName)) as DateiName


Gruß

Marco

View solution in original post

MarcoWedel

Hallo Jörg,

schön, dass es funktioniert.
Peek() schaut nach dem zuletzt geladenen Wert eines Feldes.
Die If()-Funktion weist also dem Feld "Dateiname" den Dateinamen aus der Message zu, wenn die Bedingung erkennt, dass dieser Dateiname in der Message enthalten ist, ansonsten gibt die Peek()-Funktion einfach den Wert des Feldes Dateiname aus der vorherigen Zeile zurück. Dies immer so weiter, bis der nächste Dateiname gefunden wird.

Gruß

Marco

View solution in original post

Rainbow
Contributor II
Contributor II
Author

Hallo Marco,

danke für Deine Antwort.

Die Peek-Funktion habe ich bisher nicht benutzt, weil mir der Nutzen nicht klar war.

Gruß

Jörg

View solution in original post

6 Replies
MarcoWedel

Hallo Rainbow,

dafür brauchst Du keine Variablen per Set oder Let zuzuweisen.

In Deinem Load kannst Du das Feld Dateiname einfach wie folgt aus der Message erzeugen:

If(Len(Trim(Message)),Message,Peek(DateiName)) as DateiName


Gruß

Marco

Rainbow
Contributor II
Contributor II
Author

Hallo Marco,

vielen Dank für Deine Antwort.

Ich möchte mein Problem noch ein wenig präzisieren.

Ich werte Logfiles von Produktionsmaschinen aus und möchte für jeden Auftrag (Dateiname) die Anzahl an Fehlern ermitteln.

Im Logfile steht im Feld Message der zu produzierende Dateiname oder der Fehlertext.

Der Dateiname steht nur beim Start des Auftrages im Feld Message, alle folgenden Fehlermeldung enthalten Fehlertext, die aber zur produzierenden Datei gehören und von mir gezählt werden müssen.

Ich möchte im Modell über den Dateinamen alle Fehlermeldungen auswerten können.

Siehe Beispieldatei

 

Gruß Jörg (Rainbow)

 

MarcoWedel

Hallo Jörg,

dafür kannst Du ebenfalls den Ausdruck aus meinem Beispiel nehmen.
Nur die Bedingung ist anzupassen, um die Zeilen zu identifizieren, die tatsächlich Dateinamen enthalten.

Beispielsweise wie folgt:

tabMessages:
First 9
LOAD Date(Datum) as Datum, 
     Time(Zeit) as Zeit, 
     Message,
     If(Message like '*.txt',Message,Peek(DateiName)) as DateiName
FROM [https://community.qlik.com/cyjdu72974/attachments/cyjdu72974/qlikview-app-development/1224055/1/Beispieldatei.xlsx](ooxml, embedded labels, table is Tabelle1, filters(Remove(Row, Pos(Top, 1))));

 

MarcoWedel_0-1687293064852.png

Gruß

Marco

Rainbow
Contributor II
Contributor II
Author

Hallo Marco,

sorry für die falsche Anrede (Mark statt Marco).

Ich habe Deinen Vorschlag umgesetzt und tatsächlich, trotz aller Skepsis, es hat funktioniert.

Ich habe das Script anpassen müssen, weil ich in meiner Bespieldatei mein Problem vereinfacht dargestellt habe.

Im Original sieht mein Logfile so aus:

Rainbow_0-1687344145512.png

 

 

Im Ladescript sieht Dein Vorschlag dann so aus:

If(Messages like '*.txt*',
     If(len(Messages)=58, mid(Messages,46,12),
           If(len(Messages)=59, mid(Messages,47,12),
                If(rtrim(len(Messages)) =60, mid(Messages,48,12),
                     If(len(Messages)=57, mid(Messages,45,12),'')))),Peek(DateiName))                    as DateiName,

 

 

Weil meine Dateinamen irgendwo im Text stehen.

 

Es funktioniert, aber ich verstehe die Arbeitsweise der Funktion Peek() nicht. Welche Bedeutung hat „Dateiname“?

Vielen Dank für Dein Hilfe.

Gruß

Jörg

MarcoWedel

Hallo Jörg,

schön, dass es funktioniert.
Peek() schaut nach dem zuletzt geladenen Wert eines Feldes.
Die If()-Funktion weist also dem Feld "Dateiname" den Dateinamen aus der Message zu, wenn die Bedingung erkennt, dass dieser Dateiname in der Message enthalten ist, ansonsten gibt die Peek()-Funktion einfach den Wert des Feldes Dateiname aus der vorherigen Zeile zurück. Dies immer so weiter, bis der nächste Dateiname gefunden wird.

Gruß

Marco

Rainbow
Contributor II
Contributor II
Author

Hallo Marco,

danke für Deine Antwort.

Die Peek-Funktion habe ich bisher nicht benutzt, weil mir der Nutzen nicht klar war.

Gruß

Jörg