after the joins your INDEX table has different fields from the initial load, thus subsequent loads will not be autoconcatenated to the INDEX table.
Try with Concatenate(INDEX) preceding the INDEX LOAD.
You might have to define it in a variable after the first load to avoid an error.
Edit: would not work
hope this helps
The problem is the loop! In first run the join will work as expected by key-field "A". In the next run the other fields are present too and join will take them also as key. So your join result is different from (correct) first run.
One possible workaround is to load the partial data to be joined into temp tables inside the loop and join them outside the loop. Try something like this:
(By the way: As you can see I prefer transparency for the kind of load to ensure what happens really.)
sub Transform(vMinDay, vMaxDay)
NoConcatenate LOAD * INLINE [A, B, 'REPORTING C', D];
NoConcatenate LOAD * INLINE [A, E, F, J];
NoConcatenate LOAD * INLINE [A, K, L, M];
FOR i = vMinDay to vMaxDay
IF(LEN(TRIM(C)) > 0, C, '<BLANK>') AS [REPORTING C],
Drop Tables _tmp_KLM, _tmp_EFJ;