You can access the gantt chart collector by 'installing' the charts components from the "Advanced" tab in its properties. Each row of the collector holds information about between which points in time the respective object was in a certain state.
You could use this table to determine the avg. utilization by summing up the time spend in the "idle" state within a given time window with a calculated table.
You can also, as you mention yourself, create a statistics collector from scratch for this. The attached model contains an example of how this can be done.
A timer event creates a new row for each object inside the group specified in the collector's labels. The timer interval is also defined as a label.

Each row then fills columns the current model time, the object it belongs it belongs to (equal to the row value) and how long that object has spent in the "idle" state in total during the simulation run.

The fourth column then calculates the percentage over the last interval by subtracting the last total idle time from the current idle time and dividing it by the length of the measurement interval.

This information (idle percentage per object) can then be aggregated into an average over the whole group in a calculated table. (Source table is the collector, the only column is a basic aggregate of the "IdleInterval" column, partitioned by the "Time" column)

StateOverTime_Chart.fsm