I am new to FME but used to ArcGIS ModelBuilder.
I am trying to figure out how to select rows based on an attribute and then change the values in the selected rows by a simple formula in FME.
The ModelBuilder model is
and code exported from it is
# Process: Select Layer By Attribute
arcpy.SelectLayerByAttribute_management(Properties_shp__2_, "NEW_SELECTION", "\"Property_A\" = ' '")
# Process: Calculate Field
arcpy.CalculateField_management(Properties_shp__3_, "Property_A", "[Property_N]", "VB", "")
This should be the first step in my FMW that then processes it
Best Answer
The first thing you need to understand is that despite the similarity between how they look, FME is not ModelBuilder. In FME, you don't select features they way you do in ArcGIS. The way to achieve what you want is by using a Tester to filter out the features you want to update. Then follow that with an ExpressionEvaluator transformer.
In the tester, you can set the expression that you want to test. In this case, I tested for when the PROPERTY_A field had a space for a value.
Note, in the operator drop down, you can test for other types of empty strings or null strings, etc.
In the ExpressionEvaluator, you can set the value for the attribute that passed the test. In this case, I set it to the value of the PROPERTY_N field.
I noticed that you have a FeatureWriter transformer which means you're using FME 2016. You can do all of the above in one transformer which is available in 2016, the AttributeManager. That is, replace the tester and expression evaluator with just the single AttributeManager.
Notice how I have "two possible values" for PROPERTY_A? In the drop down, there is an option for Conditional Value:
You'll be presented with an If/Else window for the condition statement. Click the If field.
This looks identical to the Tester transformer! Use the same test that you used before but this time, at the bottom, set your output value to PROPERTY_N.
Your final condition statement will look something like this:
So, what this will do is test if the PROPERTY_A field has a space for a value and set it to PROPERTY_N. Otherwise, it'll leave it as it was (Do Nothing).
Hope this helps.