Hi!
Yes @Maria, my question is tricky, but It is a common case (you need to evaluate something before server call at wb load), which does not have a direct way to solve it (solve it right), and you have to do some trick. I think should be an event "before" call DataAction call, and there you could change or cancel dataAction call. As there is no such thing, you have to break some of the best practices rules (depending on the case) or do a trick, always with common sense.
@Joao, mixing you idea, I think the best way to solve it could be this:
1. Extract calc data to another wb, that always calc data at start in dataaction, and assign result to Client.Calculate data

2. Nest CalcBlock into original webblock, evaluating if should be loaded with an if

This way, you only have one "showing wb", and calc data is only re-calculated if need it, and if so, the reasignation of Client.CalculatedData change automatically the "block" input value, so it's autorefresh it. What do you think?
Anyway, all of this is a little tricky, should be an easy way to do this right. Or evaluate the impact of making OnInitialize or DataAction, as @Maria says, even if you are breaking some rule.
Carlos.