时间范围内重叠间隔的 Kusto 数

Kusto number of overlapping intervals in a time range

我正在尝试编写一个 Kusto 查询,该查询需要计算特定日期范围内有多少间隔重叠。这就是我的 table 的样子:

userID |  interval1         | interval2
24     |  21.1.2012 10:40   | 21.1.2012 11:00
25     |  21.1.2012 9:55    | 21.1.2012 10:50

我想考虑 [min(interval1), max(interval2)] 给出的时间范围,步长为 1s,对于这个间隔的每个实例,我想知道与前一个 table重叠。例如,对于 21.1.2012 10:00 只有一个间隔,但是对于 10:45 有两个重叠的间隔。

谢谢

每间隔 1 表示额外用户的会话开始 (+1)。
每一个interval2表示附加用户的session结束(-1).
累计总和表示活动会话数。

解决方案 1(渲染级别)
with (accumulate=True)

let t = (datatable (userID:int,interval1:datetime,interval2:datetime)
[
     24 ,datetime(2012-01-21 10:40) ,datetime(2012-01-21 11:00)
    ,25 ,datetime(2012-01-21 09:55) ,datetime(2012-01-21 10:50)
]);
let from_dttm = datetime(2012-01-21 09:30);
let to_dttm   = datetime(2012-01-21 11:30);
let sessions_starts = (t | project delta =  1, dttm = interval1);
let sessions_ends =   (t | project delta = -1, dttm = interval2);
union sessions_starts, sessions_ends
| make-series delta = sum(delta) on dttm from from_dttm to to_dttm step 1s
| render timechart with (accumulate=True) 

Fiddle

方案二(数据层面)
mv-apply + row_cumsum

let t = (datatable (userID:int,interval1:datetime,interval2:datetime)
[
     24 ,datetime(2012-01-21 10:40) ,datetime(2012-01-21 11:00)
    ,25 ,datetime(2012-01-21 09:55) ,datetime(2012-01-21 10:50)
]);
let from_dttm = datetime(2012-01-21 09:30);
let to_dttm   = datetime(2012-01-21 11:30);
let sessions_starts = (t | project delta =  1, dttm = interval1);
let sessions_ends =   (t | project delta = -1, dttm = interval2);
union sessions_starts, sessions_ends
| make-series delta = sum(delta) on dttm from from_dttm to to_dttm step 1s
| mv-apply  delta to typeof(long), dttm to typeof(datetime) on (project active_users = row_cumsum(delta), dttm)
| render timechart with (xcolumn=dttm, ycolumns=active_users)

Fiddle