Filtern und Mappen

Set to Conditional Value

02.08.2013

Filtern und Mappen gehören zu den wichtigsten Prozessen in FME. Dies beweist auch die Liste der am häufigsten verwendeten Transformer, deren einsame Spitze der Tester bildet. Filtern wird primär zur Aufspaltung der Datenströme in unterschiedliche Prozessketten verwendet, während beim Mapping eine neue Zuweisung von Werten anhand vorformulierter Bedingungen erfolgt. In FME 2013 SP 1 gibt es hier wichtige Neuerungen. Ein Grund sich mal, die dafür vorgesehenen Transformer und deren Funktionsweise etwas genauer anzuschauen.

 

Tester

Der Klassiker unter den Transformern und der Sieger der „Beliebtesten Transformer aller Zeiten“.  Mit dem Tester wird eine Bedingung formuliert, die auf jedes Feature angewendet wird, welches den Tester passiert. Es ist sogar möglich mehrere Bedingungen zu formulieren und diese über die logischen Operatoren UND und ODER zu verknüpfen. Ein Feature verlässt den Transformer durch den PASSED-Port, wenn die Bedingung erfüllt ist und durch den FAILED-Port, wenn die Bedingung für das Feature nicht zutrifft. Zusätzlich gibt es noch die Möglichkeit des „Composite Tests“, bei dem man die einzelnen Bedingungen beliebig miteinander kombinieren kann. So ist z.B. die Kombination (Test 1 ODER Test2) UND (Test 3 ODER Test4) möglich.  

 

Testfilter

Der Testfilter hat die gleiche Funktionalität wie der Tester, ist aber zusätzlich in der Lage mehrere Tests hintereinander auszuführen. Er beinhaltet sozusagen mehrere Tester in einem Transformer. Dabei werden die einzelnen Tests von oben nach unten abgearbeitet. Erfüllt ein Feature die Bedingungen des ersten Tests, wird es durch den entsprechenden Port weitergeleitet und steht für die weiteren Tests nicht mehr zur Verfügung. Die übrigen Features werden dem nächsten Test unterzogen, bis alle Tests durchgelaufen sind. Features, die nach dem letzten Test noch immer keine der definierten Bedingungen erfüllen, werden durch den UNFILTERED-Port geschickt.

 

AttributeFilter & AttributRangeFilter

Der AttributFilter filtert die Features anhand vordefinierter Werte eines einzelnen Attributs. Zunächst muss also das zu untersuchende Attribut ausgewählt werden. Anschließend definiert man die möglichen Werte dieses Attributs, bzw. importiert alle vorkommenden Werte aus dem jeweiligen Datensatz. Jeder Wert erhält dabei einen eigenen Ausgangs-Port.

Der AttributeRangeFilter erlaubt die Definition von möglichen Wertbereichen für das jeweilige Attribut. Aus diesem Grund eignet sich dieser Transformer in erster Linie für die Filterung von Attributen mit numerischen Werten.

 

Mapping

Einmal gefilterte Features, werden anschließend, in Abhängigkeit ihres Testergebnisses, weiteren Prozessierungen unterzogen. Oft handelt es sich dabei um Mapping-Prozesse, wobei hierfür weitere Transformer benutzt werden. Unter Mapping versteht man die Zuweisung eines neuen Attributwertes in Abhängigkeit eines anderen (oder des gleichen) Attributs (z.B. wenn Attribut1 = 1 dann Attribut2 = „aktiv“). Solche Mapping-Prozesse können aber innerhalb eines Transformers durchgeführt werden. Hierfür gibt es die Mapper-Transformer wie AttributeValueMapper, AttributeRangeMapper bzw. SchemaMapper). In den beiden ersten wird das zu analysierende Attribut und Ausgabeattribut angegeben. Anschließend definiert man die Werte, bzw. Wertbereiche und weist denen einen neuen Wert zu. Der SchemaMapper greift hierfür auf eine externe Datei  zu (z.B. Excel oder CSV). Dadurch ist es möglich die Mapping-Vorschriften jederzeit zu ändern, ohne dabei in den FME-Prozess eingreifen zu müssen.  

 

Conditional-Mapping

Wer sein FME 2013 bereits auf SP1 aktualisiert hat, dem steht mit dem „Conditional Value“ eine weitere Möglichkeit zur Verfügung, seine Filter- und Mapping-Prozesse noch effektiver zu gestalten.  Damit ist es nun möglich auch im AttributeCreator-Transformer auf Mapping-Funktionen zuzugreifen. Beim Erstellen eines neuen Attributs, definiert man einfach die Bedingungen, nach denen die Wertvergabe für das Attribut erfolgen soll. Ganz so, wie es bereits im AttributeValueMapper der Fall ist. Die Definition der Bedingungen entspricht der IF – ELSE IF Klausel. Bei der Definition jeder Bedingung öffnet sich, wie im Testfilter, ein neues Dialogfenster und der AttributeCreator zeigt anschließend die Anzahl der möglichen Werte (… possible Values) im Attribute-Value-Feld des neuen Attributs an. Des Weiteren verfügt der AttributeCreator über ein Duplicate-Button, um einfach bestehende Tests zu duplizieren und so ein wenig Zeit bei der Definition der Bedingungen einzusparen.

 

Übrigens: Diese neue Funktionalität beschränkt sich nicht nur auf den AttributeCreator, sondern umfasst alle Transformer, die einen „Set to Attribute Value“-Parameter haben.

Top