I think you have to do a metamodel of your data :
for each source :
make a table with name of source (score, student .....) and field that are in this source
SourceName,FieldDisplay for example
then in front end,
choose a source in a listbox,
and then in expression fieldvalue('FieldDisplay', 'the order of your column)
You can create a dynamic table to view any table in the same UI table just by clicking a single tablename from a list of all the tables in your datamodel:
Add two fields to a Filter Pane: $Table and $Field. They are both system fields that normally don't show up on a list of fields but can be used as normal fields anyway.
Create a table with as many dimensions as the max number of fields any given table might have. For each dimension you add an expression instead of a field name along this pattern:
and label should be:
You substitue the number 1 with 2 for the second column/dimension and 3 for the third and so forth.
Slightly better might be to do this:
To simplify the construction of the dimension you could create a variable that takes a parameter and then use that variable-function which is quicker and easier to input into each expression for each dimension:
Then for each column/dimension you could have expressions like this:
for the first dimension and
for the second and so forth....