Hallo Leute,
ich möchte folgenden Workflow bauen und benötige dazu etwas Unterstützung.
Ich lese die Daten aus einer csv-Datei ein und ergänze diese um eine Spalte, in der ich das Datum der Dateierzeugung eintragen lasse. Diese Daten sollen dann nach Anpassung der Typen in eine Datenbank geschrieben werden. (ohne die zusätzliche Spalte mit dem Erzeugungsdatum)
Bis hierhin ist es klar.
Jetzt möchte zusätzlich folgendes in den Workflow einbauen:
1. es soll eine zweite Datenbanktabelle ausgegeben werden, aber nur dann, wenn der Wochentag in der Spalte „Erzeugungsdatum“ ein Montag ist.
2. in dieser zweiten Tabelle sollen zwei zusätzliche Spalten gefüllt werden:
- die Nummer der vorherigen Kalenderwoche des Erzeugungsdatums.
- das zur ausgegebenen Kalenderwochen zugehörige Jahr
3. Es soll eine dritte Datenbanktabelle ausgegeben werden, aber nur dann, wenn das „Erzeugungsdatum“ an einem Monats-Ersten war.
4. in dieser dritten Tabelle sollen zusätzlich zwei Spalten gefüllt werden:
- die Nummer des vorherigen Monats
- das zum ausgegebenen Monat gehörige Jahr
Beispiel: Erzeugungsdatum = 04.01.2021
dann soll laut Punkt 2 der Datenexport erfolgen, weil der 04.01.21 ein Montag ist.
Die beiden zusätzlichen Spalten sollen gefüllt sein mit Kalendewoche: 53 und Jahr: 2020
Die dritte Tabelle soll nicht ausgegeben werden, da das Erzeugungsdatum kein Monatserster ist.
Beispiel: Erzeugungsdatum = 01.01.2021
Die zweite Tabelle soll nicht ausgegeben werden, da der 01.01.21 kein Montag ist.
Die dritte Tabelle soll ausgegeben werden, weil Monatserster.
Die beiden zusätzlichen Spalten sollen gefüllt sein mit Monat: 12 und Jahr: 2020
Sorry, das war jetzt viel Text, aber ich habe versucht, da das Problem möglichst genau zu beschreiben.
An dieser Stelle schon mal vorab: vielen Dank für die Unterstützung.
Gelöst! Gehe zu Lösung.
Hi @akku,
ich habe da mal etwas gebastelt 🙂
Den vorderen Teil kannst du ignorieren, ich habe lediglich mal ein paar Beispiele-Zeilen generiert.
Nur Montage:
DateTimeFormat([Datum],'%A') == 'Monday'
Mit %A werden dir die Wochentagsnamen (auf englisch) zurückgegeben, dadurch kannst du einfach auf Montage filtern. Um das Jahr und die Wochennummer der vorherigen Woche zu bekommen, müssen wir erst einmal auf die vorherige Woche springen. Da wir nur noch Montage haben, müssen wir nur noch einen Tag zurück, dies können wir mit DateTimeAdd([Datum,-1,"days") erreichen. Der Rest ist dann nur noch Formatieren mit %W für die Wochennummer und %Y für das Jahr.
Nur Monatserste:
ToDate(DateTimeTrim([Datum],'firstofmonth')) == [Datum]
Mit der Funktion "DateTimeTrim([Datum],'firstofmonth') bekommen wir den ersten eines Monats zum angegebenen Datum - jedoch im DateTime-Format, daher müssen wir dies danach wieder mit 'ToDate()' in ein Datum ohne Zeit verwandeln.
Danach haben wir das gleiche Spiel wie oben. Wir geben mit DateTimeAdd([Datum],-1,'days') in den vorherigen Monat und holen uns dann mit %m und %Y die gewünschten Informationen.
Ich hänge dir den ganzen Workflow auch nochmal zum besseren nachvollziehen an. Lass mich wissen ob ich es richtig verstanden habe und dir helfen konnte.
Viele Grüße
Alex
Hallo Alex,
das schaut schon mal richtig gut aus.
Bei dem Zweig für Monate klappt es auch wie erwartet und ich würde vermuten, dass es auch mit jedem Datum richtig berechnet wird.
Beim Zweig mit den Wochen wird allerdings bei Input 04.01.21 Woche „00“ errechnet. Es müsste aber Woche „53“ sein. Irgendwie kennt alteryx die ISO Woche nicht.
Noch die Frage, da ich noch keine Erfahrung mit Datenbanken habe:
Wenn durch den Filter keine Daten als Ergebnis errechnet werden, wird dann die Datenbank auch nicht geschrieben? Das heißt, ich kann jeweils nach dem Formeltool direkt das „output data“ einfügen?
Danke und Gruß
Matthias
Hi Matthias,
das Thema mit der ISO-Wochennummer kommt leider immer wieder auf und ist noch nicht behoben. Es gibt jede eine Idee die du mit einem "Like" versehen kannst, so dass Alteryx das Thema ggf. doch noch angeht.
https://community.alteryx.com/t5/Alteryx-Designer-Ideas/Use-the-ISO-week-date-system/idi-p/350966
Die Community hat mittlerweile aber auch einen Workaround, dieser ist zwar nicht schön, aber soll wohl alles abdecken:
ToNumber(PadLeft(ToString(FLOOR(DateTimeDiff(DateTimeAdd([Date],4-Switch(DateTimeFormat([Date],"%a"),7,"Mon",1,"Tue",2,"Wed",3,"Thu",4,"Fri",5,"Sat",6),"days"),DateTimeParse(ToString(ToNumber(DateTimeFormat(DateTimeAdd([Date],4-Switch(DateTimeFormat([Date],"%a"),7,"Mon",1,"Tue",2,"Wed",3,"Thu",4,"Fri",5,"Sat",6),"days"),"%Y")))+'-01-01',"%Y-%m-%d"),"days")/7)+1),2,"0"))
Am besten vor dem Einfügen erstmal kurz im Notepad drüber gehen und alle [Date] gegen [Datum] austauschen lassen, dann sollte es klappen.
Wenn du keine Zeilen hast, dürfte auch nichts in die Datenbank geschrieben werden, daher kannst du nach die Formel auch das Output-Tool anfügen.
Viele Grüße
Alex
Hallo Alex,
vielen Dank für die Hilfe zu später Stunde.
Ich habe die Formel nun mal in einem neuen Workflow verwendet und bekomme den Fehler:
The field "" is not vontained in the record. (Expression #1)
Das muss ich mir aber morgen nochmal genauer ansehen, vielleicht finde ich ja die Ursache. Und dann muss ich auch schauen, wo genau in meinem workflow ich das dann einfügen muss.
oh Mann, es ist schon spät.
Ich hatte vergessen, eine neu Spalte anzugeben in der Formel...
Das kenne ich nur zu gut. Meist ist das ein gutes Zeichen für eine Pause oder bei der Uhrzeit auch mal für den Feierabend 😉
Magst du einen meiner Posts als Lösung markieren oder gibt es noch offene Punkte?
Hi @akku,
ich glaube du hast dich hier verklickt und ausversehen die Erinnerung von Steph als Lösung markiert 😀
Grüße
Alex