I think you'll need to not use a repeating field for the milestones. Instead, try overlaying the repeating field with one row portals to the related data.
Thanks for the suggestion. How would the portals correspond to the date in each gantt square, and update whenever there was a new STARTDATE? I di manage to get the chart working by scripting nested loops - go through each found project record, then loop through all the related record, and set a repeating global text field. Works fine, but is on the slow side; takes about 2 seconds with just 30 records (each with 1 to 3 child records).
Yes and a very complex system that will be difficult to modify and maintain.
I'd probably get rid of all the repeating fields altogether and use one row portals for everything instead, but what I had in mind are calculations in the portal filters that extract data from the correct repetition of the repeating field. THe first portal's filter might use GetRepetition ( RepeatingFIeld ; 1 ) and the next uses GetRepetition( RepeatingField ; 2 ) and so forth. (And you can also reference repetitions in this format: Table::RepeatingFIeld[Index])