Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

Forum - Deutsch

Suchen Sie nach Antworten, stellen Sie Fragen und teilen Sie Ihr Alteryx-Wissen.

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

OliverW
Alteryx Alumni (Retired)

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

1 ANTWORT 1
OliverW
Alteryx Alumni (Retired)

Falls jemand mit dem Pfad des Macros ein Problem hat, hier nochmal anbei das eigentliche Macro als separate Datei, einfach dann statt des bereits im Workflow eingebauten Macros nutzen.

 

Falls dann noch jemand ein Problem mit der Alteryx Version haben sollte (mein Macro wurde mit 2018.4 erstellt), so kann man das Macro (oder auch jeden Workflow) in ein XML Viewer (wie zum Beispiel Notepad++) einlesen und muss dann nur in der 2. Zeile:

 

<AlteryxDocument yxmdVer="2018.4">

 

Die Versionsnummer abändern (zum Beispiel auf "2018.2") und das Macro überspeichern.

 

Hoffe dies hilft bei Problemen.

 

Viele Grüße

Oliver

 

Beschriftungen