AFAIK, IterNo() function only when you use While statement. Whereas RecNo() and RowNo() works with or without While. IterNo() is similar to using a loop find it useful in creating dates between start and end date for example.
Update: Did not see your qvw, but you do have an example of start and end date in there
I think Sunny will express you their opinion. Let me say that your code snippet - a particular case of coincidence results. This is due to the equality of sequential read one record, in which the values of RowNo() and IterNo() are the same.
Try to create a table of this type from your table "CALENDAR", for example,
Each record of table "CALENDAR" should just read twice
Date as DateIterNo
While IterNo() < 3;
And here is how will look the values IterNo() and RowNo() during the loading table
Date IterNo() RowNo()
01/01/2017 1 1
01/01/2017 2 2
02/01/2017 1 3
02/01/2017 2 4
03/01/2017 1 5
03/01/2017 2 6
So your code works. But this is a particular case. The whole assignment the functions IterNo() and RowNo() different.
This LOAD statement will execute multiple times, and as long as there are input records. When reading record N (a single row), the following happens:
RecNo() returns N, as this is the row position in the original data source
The LOAD statement loops and executes the column expressions a number of times on the original input data from this single source row as long as the WHILE expression is true. The loop counter is hidden, but IterNo() returns the current loop counter value, starting from IterNo() = 1 ... P. So in essence, 1 input row begets P output rows.
The output of this repeating LOAD is stored in the internal table, let's say starting at position RowNo() = X+1 (X being determined by the previous executions and loops) The last loop result will be stored at position RowNo() = X+P.
Repeat from the first bullet for source row RecNo() = N+1 until the data source is exhausted.
Inputrow RecNo() = N -> Processed IterNo()=1...P times -> Resulting rows stored as RowNo() = X+1 ... X+P
Note that depending on your While expression, the P value can vary between 1 and an arbitrary upper limit for each input row.
[Edit] Added a picture "because they're worth a thousand words..."
Returns an integer for the number of the currently read row of the internal table. The first record is number 1.
Returns an integer for the position of the current row in the resulting QlikView internal table. In contrast to RecNo( ), which counts the records in the raw data table, the RowNo( ) function does not count records that are excluded by where clauses and is not reset when a raw data table is Concatenation to another. The first row is number 1.
Raw data tables:
Load *, RecNo( ), RowNo( ) from Tab1.csv where A<>2;
Load *, RecNo( ), RowNo( ) from Tab2.csv where A<>5;