That's also how I've been doing it, but it's not been working very well for me so I'd love to know if you find a better solution.
The problem I ran into with the method you mentioned is that when writing to a reusable-operation table, it often takes time to run through all the operations (find work email through waterfall, for example). That results in the query not finishing whenever Lookup rows is triggered in campaign-table , which causes an empty value to be returned instead of the real value after waterfall. I'm sure there must be a better way...