Free Trial

Knowledge Base

Lernen Sie von den Profis.

Gleichzeitiges Ersetzen (Replace) von Werten aus einer Look-up Tabelle in mehreren Spalten

OliverW
Alteryx Alumni (Retired)
Erstellt

Hallo liebe Usergroup,

 

eine unserer Alteryx User hat mich vor ein paar Tagen um Unterstützung bei einem Use Case gebeten, leider hat die Person derzeit Probleme Posts in der Community zu verfassen, weshalb ich kurz den Use Case schildere und dann auch direkt danach die Lösung poste, da ich glaube, dass dies für einige Usere interessant sein könnte.

 

Generell ist der Anwendungsfall recht einfach, es geht darum, in einer Datentabelle Sonderzeichen (wie zum Beispiel Umlaute, aber auch Dinge wie Buchstaben mit Akzenten, etc) mit normalen Buchstaben zu ersetzen, also zum Beispiel aus "ü" wird "ue" und aus "é" oder "è" wird beides mal "e". Das ganze muss für Sonderzeichen aus verschiedensten Sprachen funktionieren.

 

Nun ist dieser Anwendungsfall mit einer Look-Up Tabelle und einem Find & Replace Tool in Alteryx relativ simpel zu lösen, wenn es daraum geht, nur in einer Spalte die Buchstaben zu ersetzen. Interessanter wird das ganze aber, wenn man gleichzeitig die Special Characters in mehreren Spalten ersetzen möchte. Was gäbe es da für Möglichkeiten?

 

Ein Batch Macro welches ein Find & Replace auf eine Spalte macht und man einfach eine Liste an Spalten als "Control Parameter" reingibt?

Gute Idee, würde aber nicht funktionieren, dass das Batch Macro zeilenweise arbeitet und man somit für 1 Zeile bei der in 2 Spalten Ersetzungen durchgeführt werden sollen, als Ergebnis 2 Zeilen erhalten würde, wo in der 1. Zeile die Ersetzung für die 1. Spalte durchgeführt wurde und in der 2. Zeile die Ersetzung für die 2. Spalte. Das wäre also nicht des Rätsels Lösung.

 

Vielleicht könnte man stattdessen die Spalten der Look-Up Tabelle (was effektiv 2 wären, nämlich das wonach Alteryx suchen und das was Alteryx dann als Replace nutzen soll) über das "Append Fields" Tool an die eigentliche Datentabelle anhängen um danach mit einem "Multi-Field Formula" Tool eine Replace Formel zu schreiben? Das würde am Ende funktionieren, wäre aber bei bereits leicht größeren Datenmengen nicht mehr praktikabel, weil das Append Fields Tool dann extrem viele neue Zeilen generieren würde (für jede ursprüngliche Datenzeile würde eine Anzahl an neuen Zeilen in Höhe der Gesamtzeilen der Look-Up Tabelle erstellt werden), das ganze wäre als dann leider nicht performant und die Nutzung wäre so nicht möglich.

 

Was bleibt stattdessen?

 

Nun ja, Alteryx hat auch für diesen Fall tatsächlich ein eigenes Werkzeug, das "Dynamic Replace" Werkzeug aus der "Developer" Kategorie. Für dieses Werkzeug brauch ich am Ende 2 Datenquellen, einmal die Daten die ersetzt werden sollen und einmal ein Datensatz der am Ende auf diese Art aufbereitet sein muss:

Datensatz_fuer_DynamicReplace.jpg

 

Dieser Datensatz muss dann den Wert beinhalten, den ich in der anderen Datenquelle finden möchte (also zum Beispiel ein Umlaut wie “ä” oder in meinem Fall den Wert “123” oder “C”. Zusätzlich muss er den Replace-Wert enthalten, also den Eintrag womit ich den jeweiligen „Find-Wert“ ersetzen möchte (in meinem Fall hier „AAA“ und „Z“), die Spaltennamen (in der Spalte „FieldName“), sowie eine Spalte „Expression“, welche die wirkliche Replace-Formel (die sonst in einem Formel Werkzeug stehen würde) beinhaltet. Zusätzlich wird am Ende noch eine Spalte „BooleanExpression“ mit einem Eintrag von „-1“ benötigt, die dem Dynamic Replace Werkzeug mitteilt, dass die Expression kein Bool-Wert ist. Der Datensatz selbst wird in meinem Beispiel-Workflow mit Alteryx Werkzeugen aus der ursprünglichen Look-Up Tabelle (welche nur die „Find“ und die „Replace“ Spalten beinhaltete) erstellt.

Jetzt wäre das am Ende schon die Lösung, das Dynamic Replace Tool kann also aus einer Look-Up Tabelle über eine Formel auf einem Schlag Werte aller oder (mit ein bisschen Konfiguration)   bestimmter Spalten ersetzen oder abändern. Generell kommt aber, wenn man es so ausführt, ein weiteres, neues Problem zum Tragen, das Dynamic Replace wird am Ende nur die erste „wahre“ Regel ausführen. In meinem Beispiel oben bedeutet das, dass das Werkzeug nur die Regel für den „Find-Wert“ „123“ ausführt, aber das für den „Find-Wert“ „C“ ignoriert, so ist es leider generell bei diesem Werkzeug. Hier kommt jetzt aber Alteryx Makro Stärke zum Tragen und was wir benötigen, ist unseren Prozess als „Iterative Macro“ in Alteryx. Es würde jetzt zu weit gehen, das Iterative Macro im Detail zu erklären, aber hier 2-3 Links zu Ressourcen diesbezüglich:

https://community.alteryx.com/t5/Live-Training/Live-Training-Build-Your-First-Iterative-Macro/m-p/55...

https://community.alteryx.com/t5/Live-Training/Live-Training-Santa-s-First-Iterative-Macro/m-p/92237...

https://youtu.be/xExR3-rmcDc

 

Bei meinem Anwendungsfall, habe ich das Iterative Macro schon inkludiert, für jeden der es gerne nutzen möchte, aber noch nie eines selbst erstellt hat. Wichtig ist, dass man aber in diesem Fall sagt, wieviele „Iterationen“ (also „Schleifen“) der Workflow durchlaufen soll und diese Anzahl sollte sich mit der Anzahl an unterschiedlichen Werten des „Find“ Feldes decken. In meinem Fall würden also 2 Iterationen ausreichen (ich habe ja nur „123“ und „C“), wenn ich aber sehr viele Werte Suchen und Ersetzen will, dann muss ich auch dementsprechend viele Iterationen laufen lassen, dies muss man im „Interface Designer“ des Makros einstellen und das geht so:

  1. Das Makro mit rechtsclick und dann „Open Macro“ öffnen.

     

  2. Unter „View“ den „Interface Designer“ öffnen:
    InterfaceDesigner1.jpg

     

  3. Auf die Schraube klicken und dann die „Maximum Number of Iterations“ umstellen auf die Zahl die man benötigt:

    InterfaceDesigner_ChangeIterations.jpg
  4. Den Interface Designer wieder schliessen (nicht zwingend erforderlich) und das Makro wieder abspeichern. Beim nächsten Mal Ausführen des Workflows mit dem eigentlichen Makro laufen dann die eingestellten Iterationen.

 

Gesamt sieht es dann so aus:Workflow with Iterative DynamicReplace Macro.jpg

 DynamicReplace Iterative Macro.jpg

 

 

 

 


Ich hoffe dies gibt einen kleinen Einblick in Alteryx und es ist für einige in ihrer täglichen Arbeit hilfreich.

 

Viele Grüße

Oliver
Solutions Engineer CEE

 

Kommentare
Seccoboi
Atom

Hi Oliver,

 

vielen Dank für diesen tollen Workflow! Er ist genau das wonach ich gesucht habe!

 

Leider bekomme ich eine Fehlermeldung, die ich nicht von alleine Lösen konnte. Sie sieht wie folgt aus:

Bildschirmfoto 2021-01-08 um 00.10.20.png

 

Ich arbeite mit der folgenden Look-Up Tabelle:

Bildschirmfoto 2021-01-08 um 00.09.51.png

 

Es scheint ein Problem damit zu geben, dass ich Strings mit Zahlen ersetzen möchte. Kannst du mir da vielleicht weiterhelfen? Über deine Hilfe wäre ich sehr dankbar!

 

Beste Grüße,

Elias

Mitwirkende
Beschriftungen