Предполагая, что вы можете указать начало и конец каждого сеанса, вы можете использовать функцию range () , чтобы сгенерировать применимые значения даты и времени по размеру корзины, когда сеанс активен, а затем использовать mv-expand оператор для расширения списка, чтобы вы могли подсчитывать количество одновременных сеансов. Вот пример:
let sampleEvents = datatable(sessionId:string,eventType:string, timestamp:datetime)
["A", "start", datetime(2020-02-29T10:32:52.1953143Z),
"A", "end", datetime(2020-02-29T10:33:08.1953143Z),
"B", "start", datetime(2020-02-29T10:32:57.1953143Z),
"B", "end", datetime(2020-02-29T10:33:10.1953143Z)];
let startEvents = sampleEvents | where eventType =="start" | project startTime = timestamp, sessionId;
startEvents
| lookup kind=leftouter (sampleEvents | where eventType =="end" | project endTime=timestamp, sessionId) on sessionId
| extend endTime = iif(isempty(endTime), now(), endTime)
| extend sessionActiveTimeInOneSecondInterval = range(startTime, endTime, 1s)
| mv-expand sessionActiveTimeInOneSecondInterval to typeof(datetime)
| summarize count() by bin(sessionActiveTimeInOneSecondInterval, 1s)
Также рассмотрите возможность использования функции row_window_session () для определения времени начала сеанса