Free Trial

Blog - Deutsch

Erkenntnisse und Ideen von den besten Analytics-Experten.
RolandSchubert
16 - Nebula
16 - Nebula

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. 

 

P001.jpg

 

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.

 

P003.jpg

 

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.  

 

P002.jpg

 

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!

 

P016.jpg 

 

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". 

P004.jpg 

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.

 

P005.jpg

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.

P008.jpg

 

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.

 

P006.jpg

 

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

 

P007.jpg

 

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.

 

P009.jpg

 

 

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:

 

P010.jpg

 

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". 

 

 

P012.jpg

 

 

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.

 

P013jpg.jpg

 

Unser Workflow sieht jetzt so aus:

 

P014.jpg

 

Zeit für einen kleinen Test. Was passiert, wenn die Tabelle "Zuordnung zu P&L Positionen leer ist?

 

P015.jpg

 

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.

 

 

 

 

Beschriftungen