My understanding is Tableau needs to execute the stored procedure multiple times in order to gather metadata. I can't find a definitive answer from Tableau on this though, so you might be best opening a case with Tableau Support to see if you can override the behavior.
Another thing you could consider doing is creating a table in your DB to store the results. Then in the 'initial SQL' on the connection you could do;
TRUNCATE your table
and your connection would connect to the table. That might change things up.
I'm aware that Tableau does execute SP calls multiple times, but like Tom, don't understand the specifics as to why. There's a couple of threads here that may help give you some ideas on how to improve the performance: