I've not ran into this issue before but how about creating a filter for [User] = [PersonLoggedIn] and making a filter at the data source level for all of your data sources.Then remove the need for a parameter in your custom SQL. Bring in all the data and let tableau filter it. If you make extracts (probably even if you don't) things will be much more performant then custom SQL which has to go to the database for every query you use and pinging the server for each worksheet/datasource at once for 6 things might be part of the issue.
Thanks for the suggestion, but I'm not sure that will work, or if it will, I'm not sure how to accomplish it with a filter. The struggle is that this is a sort of dashboard for managers. The individual worksheets contain data related to their employees, so it's not a 1 to 1 match.
The custom sql is along the lines of: select * from DataSource where EmployeeID in (select EmployeeID from dbo.GetMyTeam(<Parameters.LoggedInUserID>))
dbo.GetMyTeam is a table valued function
Additionally, this is an embedded report on a trusted server, so the <Parameters.LoggedInUserID> is being passed by the server. The user is not technically logging in to Tableau.