Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Talend Cloud AWS EU Scheduled Outage: Starting Tues 26 May 21:00 CEST with expected completion Wed 27 May 01:00 CEST
cancel
Showing results for 
Search instead for 
Did you mean: 
MoKa
Creator
Creator

Dateneditor Ladereihenfolge Excel-Dateien

Hallo,

es wird monatlich eine Excel-Datei mit Personaldaten in einem Windows-Ordner gespeichert.
Alle Dateien werden in Sense geladen   ..... FROM.... *.xlsx

Bei einer Namensänderung habe ich in zwei Monaten unterschiedliche Namen. Beim Umwandeln wird der erst-geladene Name (alte Name) ausgewiesen.

Besteht die Möglichkeit auf einfacher Weise die Ladereihenfolge der Dateien festzulegen?

Im Voraus vielen Dank für die Hilfe.

 

Labels (1)
1 Solution

Accepted Solutions
marcus_sommer

Wenn es vergleichsweise geringe Datei- und Datenmengen sind, müsste man nicht zwingend bereits Vorfeld definieren, welche Datei(en) geladen werden, sondern man lädt halt alle und und filtert und/oder flaggt dann die gewünschten Informationen, z.B. mit:

t: load MA, Datum from [Pfad\*.xlsx] (ooxml, ...);
    inner join(t) load max(Datum) as Datum resident t;

Hierbei blieben nur die Daten übrig, mit dem aktuellsten Datum.

Um Informationen aus dem Dateinamen zu berücksichtigen, könnte man folgendes verwenden:

for each file in filelist('Pfad\*.xlsx')
   t:
   load *, date(date#(subfield(FileName, '_', 1), 'YYYY-MM-DD')) as Datum;
   load '$(file)' as FullPath, subfield('$(file)', '\', -1) as FileName autogenerate 1;
next

und mit den diversen String-Funktionen extrahiert man sich die benötigten Informationen aus der Variable file und kann dann später so eine Tabelle entsprechend filtern, sortieren, ... und loopt dann hierüber.

View solution in original post

4 Replies
marcus_sommer

Ich denke, dass das so nicht möglich ist, denn Windows liefert die Dateien in seiner Standard-Reihenfolge, also alphanumerisch aufsteigend sortiert. Etwaige User-Sortierungen im Explorer haben hier keinen Einfluss - denkbar wären aber Anpassungen in der Registry. Der praktikabelste Weg wäre auf dieser Ebene alle Dateien entsprechend umzubenennen, so dass sie in der gewünschten Reihenfolge geladen werden.

Um unabhängig hiervon in Qlik die Lade-Reihenfolge zu bestimmen braucht es jetzt drei Zusatzschritte. Im ersten wird per filelist() loop das Verzeichnis ausgelesen und mit dem Dateinamen auch die Perioden-Information aus dem Dateinamen extrahiert und/oder per filetime() das Speicherdatum ermittelt und in einer Tabelle gespeichert. Anschließend wird diese Tabelle dann resident geladen und hierbei entsprechend über die Datumsinformation sortiert. Anschließend kommt dann ein loop über diese Tabelle die dann jeweils den Dateinamen raus-pickt.

Ich könnte mir aber vorstellen, dass man das hierfür gar nicht benötigt, sondern die benötigte Sortierung im Load-Prozess festlegt und/oder aber vielleicht in einem Zusatzschritt dort die Perioden + Key Information sowie den MA-Namen in eine - wiederum sortierte - Mapping-Tabelle lädt, die man dann später wie benötigt ausliest.   

MoKa
Creator
Creator
Author

Ich würde gerne in Qlik die Ladereihenfolge bestimmen. Da ich mit filelist loop noch nie gearbeitet habe, bräuchte ich Hilfe wie ich dies im Skript umsetzen kann.
Die Namen der Dateien beinhalten das Datum:
2023-06-30_Personal,
2023-07-31_Personal usw.
In den Dateien gibt es u.a. das Feld "MA-Name" und "Datum". Das Datum ist immer das Datum aus dem jeweiligen Dateinamen.
Bsp.: In der Datei "2023-07-31_Personal" steht im Feld "Datum" immer der 31.07.2023

marcus_sommer

Wenn es vergleichsweise geringe Datei- und Datenmengen sind, müsste man nicht zwingend bereits Vorfeld definieren, welche Datei(en) geladen werden, sondern man lädt halt alle und und filtert und/oder flaggt dann die gewünschten Informationen, z.B. mit:

t: load MA, Datum from [Pfad\*.xlsx] (ooxml, ...);
    inner join(t) load max(Datum) as Datum resident t;

Hierbei blieben nur die Daten übrig, mit dem aktuellsten Datum.

Um Informationen aus dem Dateinamen zu berücksichtigen, könnte man folgendes verwenden:

for each file in filelist('Pfad\*.xlsx')
   t:
   load *, date(date#(subfield(FileName, '_', 1), 'YYYY-MM-DD')) as Datum;
   load '$(file)' as FullPath, subfield('$(file)', '\', -1) as FileName autogenerate 1;
next

und mit den diversen String-Funktionen extrahiert man sich die benötigten Informationen aus der Variable file und kann dann später so eine Tabelle entsprechend filtern, sortieren, ... und loopt dann hierüber.

MoKa
Creator
Creator
Author

Ich hab jetzt eine einfachere Lösung gefunden indem ich die Daten mit "Order By Date desc" nochmals lade.

Trotzdem vielen Dank für die Hilfe.