This is because the RowNo() function only returns correctly in the top loader of a preceding load. It must be like this because each preceding load can have its own Where clause that can modify the number of rows loaded. Only at the topmost load do we actually know that a row is loaded.
RowNo1 as RowNo2,
RowNo() As RowNo3;
RowNo() As RowNo1
So, here only the topmost load will have RowNo(), so only RowNo3 will give you expected result..