Jeden Tag werden aktuelle Daten in Tabellen und/oder Dateien bereitgestellt. Diese Daten werden mit einem Alteryx-Workflow verarbeitet - beispielsweise werden einzelne Buchungssätze auf Kontenebene in einer SQL-Tabelle geliefert, diese werden dann mit einer Tabelle verkünpft, die eine Zuordnung zu den entsprechenden P&L-Positionen enthält, dann wird auf Positionsebene aggregiert und das Ergebnis schließlich als Datei/Bericht ausgegeben. Vielleicht sind es auch Umsatzdaten, die um eine Warengruppe ergänzt werden, oder von Tochtergesellschaften im lokalen Kontenrahmen bereitgestellte Abschlussdaten, die auf die entsprechenden Konzernkonten gemappt werden sollen. Diesen oder einen ähnlichen Ablauf kennt ja möglicherweise der eine oder andere und eigentlich ist das auch keine große Herausforderung.
Allerdings soll es ja hier oder da vorkommen, dass mal etwas nicht funktioniert ... so etwas soll ja vorkommen. Was zum Beispiel passiert, wenn etwa die Tabelle, die die Zuordnungen enthält, keine Daten beinhaltet? In diesem Fall kann noch nicht einmal ein Alteryx-Workflow ein brauchbares Ergebnis liefern! Die 0 Datensätze werden aber trotzdem in die angegebene Output-Datei/-Tabelle geschrieben. Resultat: Eine leere Datei oder Tabelle.
Nicht nur, dass es keine aktuellen Daten gibt, auch die nicht ganz so aktuellen Daten aus dem letzten Lauf sind weg. Diese Situation kann in ganz unterschiedlichen Formen auftreten. Im Beispiel haben wir es mit der eher "harmlosen" Variante zu tun - es fällt sicherlich sehr schnell auf, dass die Datei leer ist, und das Problem kann einfach gelöst werden, indem eine korrekte (= gefüllte) Zuordnungstabelle bereitgestellt wird.
Manchmal ist das aber nicht so einfach, bis zur Entdeckung des Fehlers vergeht viel Zeit oder es gehen sogar Daten verloren. In diesem Fall wäre es doch sinnvoll, zwischen "Aggregation" und "Ausgabe in Ergebnisdatei" zunächst zu prüfen, ob Daten vorhanden sind, und nur, wenn diese Bedingung erfüllt ist, die Ergebnisdatei zu aktualisieren.
Aber wie können wir das nun umsetzen? Vielleicht finden wir ja eine Lösung, inden wir in Alteryx einfach mal nach "condition" suchen, wenn es um Bedingungen geht, könnte das doch passen!
Und tatsächlich, es gibt sogar ein Condition Tool. Die Tool allerdings gehört in die Palette "Interface" - wir werden also wohl ein Macro oder eine Analytic App bauen müssen. Für den konkreten Anwendungsfall bietet sich an, ein Makro zu bauen, das Output Data Tool gewissermaßen so zu "verpacken", das unser Problem mit der Bedingung gelöst wird.
Also - los geht's. Wir öffnen einen neuen Workflow und ziehen das Condition Tool auf den Canvas. Das Tool hat einen Questions Anchor, hier können wir in unserem Fall die Anzahl der Ergebnisdatensätze "einspeisen".
Diese Anzahl (oder auch einen anderen Wert, der geprüft werden soll) können wir ganz einfach über ein Control Parameter Tool anliefern. Dem Tool müssen wir nur ein Label mitgeben (also eine Bezeichnung für den Wert, der da geliefert werden soll). Hier bietet es sich natürlich an, den Parameter gleich "Anzahl" zu nennen.
Die "Input-Seite" wäre damit erledigt. Auf der "Output-Seite" gibt es einen "T" und einen "F" Anchor, die abhängig von der Prüfung der Bedingung angesteuert werden. Diese Bedingung kann dazu im Condition Tool hinterlegt werden. Im konkreten Fall prüfen wir, ob der angelieferte Wert (also die Anzahl Datensätze) größer als 0 ist. Der Parameter wird als Variable über "Connections from Questions" übergeben. Diese werden einfach nummeriert - in unserem Fall gibt es nur einen, also "#1". Übergeben wird hier ein String, also brauchen wir eine Umwandlung in einen numerischen Wert, um den Vergleich "> 0" durchführen zu können.
Parameter-Übergabe und -Prüfung wären damit erledigt, bevor wir uns nun um die Aktionen kümmern, die an "T" und "F" anknüpfen, schauen wir uns noch eine weitere Datenübergabe an unser Makro an, denn neben dem zu prüfenden Wert müssen natürlich noch die Daten übergeben werden, die (falls der Workflow denn Datensätze liefert) in die Output-Datei geschrieben werden sollen.
Diese Übergabe kann einfach über ein Macro Input Tool erfolgen. Dieses Tool wird dann mit dem Output Data Tool verbunden, über das dann die Daten in die Ergebnisdatei geschrieben werden. Das Macro Input Tool bekommt den Input Namen "Data" und das Kürzel (Anchor Abbreviation) "D".
Das Output Data Tool soll aber nicht immer aktiv sein, sondern nur, wenn die Bedingung erfüllt ist, es muss sich also ein- und ausschalten lassen. Dazu verwenden wir nun einen kleinen Trick - wir packen das Output Data Tool in einen Tool Container.
Der Tool Container hat nämlich einen Schalter, über den wir ihn (und alle enthaltenen Tools) aktivieren oder deaktivieren können (enable/disable). Wenn es keine Ergebnisdatensätze gibt, wird also einfach der Tool Container deaktiviert, im anderen Fall soll er aktiv bleiben. Und genau das lösen wir jetzt über zwei Action Tools, die wir zwischen die "T"/"F" Ausgänge des Condition Tools und den Tool Container schalten.
Für beide Action Tools wählen wir den Action Type "Enable/Disable Container from Condition". Bei dem Action Tool, das an den "T"-Ausgang angeschlossen wird, ist die Eigenschaft "Enabled", am "F"-Ausgang dagegen "Disabled" - wenn also die Bedingung erfüllt ist, wird der Tool Container aktiviert, falls aber die Bedingung nicht erfüllt ist, wird er deaktiviert und das Output Data Tool schreibt nicht in die Ergebnis-Datei.
Im Überblck sieht unser Makro so aus:
Durch das Control Parameter Tool ist übrigens der Workflow Type automatisch auf "Batch Macro" eingestellt. Eine weitere Konfiguration brauchen wir nicht, aber wir könnten natürlich über den Interface Designer ein eigenes Icon für unser Makro wählen. In jedem Fall speichern wir unser Makro jetzt, wir können es zum Beispiel "ConditionalOutput" nennen, der Dateityp ist bei einem Makro "yxmc".
Bleibt nun nur noch, das Makro in unseren Workflow einzubinden. Zunächst ergänzen wir noch ein Count Records Tool, um die Datensätze zu zählen. Das vorhandene Output Data Tool können wir entfernen, stattdessen fügen wir unser Makro ein. Den "D" Input Anchor verbinden wir mit dem Summarize Tool (da kommen die Datensätze her, die geschrieben werden, wenn es welche gibt).
Den Question Anchor verbinden wir mit dem Count Records Tool, das die zu prüfende Bedingung liefert. In der Konfiguration ist jetzt noch anzugeben, dass Count (also der Output des Count Records Tools) den Parameter Anzahl liefert, ein "Group By" Feld gibt es hier nicht.
Unser Workflow sieht jetzt so aus:
Zeit für einen kleinen Test. Was passiert, wenn die Tabelle "Zuordnung zu P&L Positionen leer ist?
Es gibt keine Meldung mehr, dass in eine Datei geschrieben wird - die vorhandene Datei/Tabelle bleibt intakt, das Makro funktioniert wie wir uns das vorgestellt haben.
Bisher ist das Makro noch sehr spezifisch auf den konkreten Fall abgestimmt, aber es lässt sich natürlich leicht erweitern - so könnten wir etwa den Namen und Typ der Datei als weitere Parameter übergeben. Auch eine flexiblere Steuerung der Bedingung lässt sich leicht umsetzen.
Weitere Tipps Tuesday Beiträge
Dieser Eintrag ist Teil der Tipps Tuesday-Serie, alle Einträge dieser Serie findest du in unserem Index aufgelistet.
Sie müssen ein registrierter Benutzer sein, um hier einen Kommentar hinzuzufügen. Wenn Sie sich bereits registriert haben, melden Sie sich bitte an. Wenn Sie sich noch nicht registriert haben, führen Sie bitte eine Registrierung durch und melden Sie sich an.