I'm not quite sure I follow your entire flow but ultimately it sounds to me like you want to run a subquery for each table that is currently in your report. The results of that subquery would be inside the existing table. In that case I think you should use a subreport. That is probably the easiest approach.
Create a subreport that runs the query you need and have it accept as parameter(s) any data need to filter the query results (sounds like your protocol information). Once the subreport shows the data you want then add the subreport as a new row in your main table. When you insert the subreport it'll allow you to map the existing table's dataset (rows generally) to the parameters of the subreport. Hence your main report will run and for each subreport it'll trigger a separate query to get the results and inject them into the main table.
If you only need 1 table per main table then you could insert the subreport as part of the footer row of the main table. If you need the subreport for each "row" of your main table then add it as a second row for each row in the main table's query.