How FME processes features and how it affects the translation process

By default, FME processes features on an individual basis; that is, each feature is processed separately within each transformer before being passed on to the next. This is because most transformers work on Feature-Based Restructuring, where the processing of one feature does not affect the next. Length measurement is one example of this: measuring the length of a line doesn't affect the length of the next.

However, some transformers work on Group-Based Restructuring where the processing of one feature DOES affect the next. Change Detection is one example of this: you can't detect whether a feature has changed unless you compare it against every other feature.

One consequence of group-based processing is that it affects available memory. If the process involves every feature in the dataset, all features must be held in memory while the process is carried out, as opposed to a feature-based process which can read a feature into memory and release it to move onto the next. The Sorter transformer is a good example of the group-processing type of function.

A second consequence is that some transformers will give different results depending on how features are being processed. For example, a VariableSetter/VariableRetriever combination may not give the expected results if you don't consider how features are being processed (the first feature through a VariableSetter will go straight through the VariableRetriever and retrieve the value it set itself - but if you insert a Sorter transformer between to hold up the features then the last feature will pass the VariableSetter before the first passes the VariableRetriever, thus retrieving a different value).

Note: The number of features written really means the number of features that were passed to the writer, which is not necessarily equal to the number of features that can be viewed in the FME Data Inspector or in the destination format. What the writer does with the features (whether it splits them, or even rejects them, etc.) is dependent on the individual format. There is no reliable way of relaying that information back to the FME core, which outputs the statistics information.