You need a table calc to do that inside Tableau. Do it in your data source if you don't want a table calc.
I agree with Joe, table calculations are about the only way to do this in Tableau. If you are using a custom SQL statement for the data source and a database engine that supports some kind of rownum function, then you might be able to generate the row numbers as part of an extract.
For what specifically do you want the row numbers? There might be alternatives.
It's sort of strange, but basically they are mapping the 'journeys' of various visitors to their website. Each Visitor ID is a person, and they want to be able to assign a number to each 'page view' that visitor had, in time order, for their entrie history (hence it restarting at each visitor ID). They have various future plans/reasons why they want to do that, but that's the jist of it.
Tableau doesn't keep a record of database order when reading in rows from the data source. That's why we need a table calc to build that order. And the order the table calc builds needs to be specified along a dimension (or series of dimensions) where each row is uniquely identified. Therefore if you have two (or x-many) separate rows in your data source with all key values identical, you're not going to be able to differentiate between them in Tableau. You're just going to get some aggregate of the measure values (SUM, AVERAGE, MIN, etc.)
Building the rownum in your ETL of your data source is the only way to bring in any concept of indexing as a data value that is not a table calc.