It would be easier if you would first have done it with Excel for example.
You could do some calculations in script:
// Load your data with a correct time format // Add IDs for calls CallData: LOAD ID, Time#(CallStart, 'h:mm:ss tt') as CallStart, Time#(CallEnd, 'h:mm:ss tt') as CallEnd INLINE [ ID, CallStart, CallEnd 1, 2:22:22 PM , 2:22:33 PM 2, 2:22:35 PM , 2:22:42 PM 3, 2:22:36 PM , 2:22:43 PM 4, 2:22:46 PM , 2:22:54 PM 5, 2:22:49 PM , 2:27:21 PM 6, 2:22:57 PM , 2:23:03 PM 7, 2:23:29 PM , 2:23:40 PM 8, 2:24:08 PM , 2:24:14 PM 9, 2:27:37 PM , 2:39:14 PM 10, 2:27:47 PM , 2:27:55 PM 11, 2:29:04 PM , 2:29:26 PM 12, 2:29:31 PM , 2:29:43 PM 13, 2:29:45 PM , 2:30:10 PM ]; //First create a full list of events with ID markers. [TimeSpans]: LOAD CallStart as TimeSpan, ID as IDByStart, ID Resident CallData; Concatenate(TimeSpans) LOAD CallEnd as TimeSpan, ID as IDByEnd, ID Resident CallData; // Order the list of events and calculate accumulated number of active start/end events TimeSpansOrdered: LOAD ID, IDByStart, IDByEnd, TimeSpan, if(not IsNull(IDByStart), rangesum(peek('AccumStartCount'),1), rangesum(peek('AccumStartCount'))) as AccumStartCount, if(not IsNull(IDByEnd), rangesum(peek('AccumEndCount'),1), rangesum(peek('AccumEndCount'))) as AccumEndCount Resident TimeSpans Order by TimeSpan /*desc*/; //Create a field with a correct text represenation of TimeSpans [TimeSpansFormatted]: LOAD TimeSpan, if(not isnull(previous(TimeSpan)), dual(TimeSpan & '-' & previous(TimeSpan), TimeSpan), null()) as DualTimeSpan Resident TimeSpans order by TimeSpan desc; drop table TimeSpans;
Then you can just create a chart with DualTimeSpan as dimension and =(AccumStartCount-AccumEndCount) as expression.
This will give you the number of overlapping calls for each timespan.