I'm a bit confused. You want to use the variable Y to choose which subjob to calls, but you then want to pass to that subjob a variable X that flows from a tFlowtoIterate (thus changing at each iteration)?
As far I know, I'm afraid it's not possible. You can throw different RunIf signals from a Iterate signal with a little trick, but you can't Iterate through a child job. The child job would be called at each iteration with the single value of X, nor the collection. If you need that, I'm afraid you have to change your design a bit (for ex. concatenate the possible value of X on a single String, explode it inside the child job and loop locally)
If you want to trig multiple signals from a Iterate symbol you can do the undocumented "component-buffer" trick. It's not something that Talend team is probably happy to know, but it works. The idea is to use a dummy component that proxies the Iterate signal.
/--->RunIf--->[stuff1]
/
/
tRowGenerator---row--->tFlowToIterate---Iterate--->tWarn--->RunIf----->[stuff2]
\
\
\--->RunIf--->[stuff3]
The tWarn
(you can use to print a verbose DEBUG, for ex.) will act as a proxy. So, the RunIf will be evaluated at each iteration. The "stuff" can be a subjob but it will get the current value of X, not the entire collection.