Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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😊
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
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
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
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
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)
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))));
Gruß
Marco
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:
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
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
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