如何计算 Kusto 同一会话中两个连续请求之间的持续时间
How to calculate duration between two consecutive requests in the same session in Kusto
我正在尝试计算 Application Insights 中两个 requests/pageViews 之间的时间跨度。目标是计算在页面上花费的时间。我知道 AI 有 autoTrackPageVisitTime
设置,但不幸的是它没有打开。
我最初的尝试是加入请求 table 本身
requests | join kind=inner requests on session_id, $left.timestamp < $right.timestamp
, 但我的理解是不支持小于号加入。
还有谁知道我如何计算每个会话的两个连续请求之间的时间?
编辑:
在伪术语中:
- 找到第一个请求,其中 page/name = 'page1'
- 查找 sessionId 等于第一个的下一个请求
- 计算两次请求之间的持续时间
- 计算所有 sessionId 的平均持续时间。
我不完全确定您是否总是希望从特定页面进行跟踪,但如果您正在寻找平均值,则无需担心单个页面的时间安排。
如果您要查找整个站点的平均页面时间,那么您只需要会话活动的最早时间、最后时间以及该时间段内访问的页面数。将时间差除以页数得出平均值。然后您可以再次调用 summarize
以获得总体平均值。
注意 - 我从页数中减去 1,因为我没有最后一页打开和他们离开之间的时间。
代码:
let userTiming = requests | summarize PageViews=count()-1, StartTime=min(timestamp), EndTime=max(timestamp) by session_Id;
userTiming
| extend AverageTime=datetime_diff('millisecond', EndTime, StartTime)/PageViews
//| summarize avg(AverageTime)
如果您要根据用户的下一次综合浏览量寻找在特定页面上花费的时间,那么您最初将 table 加入自身的想法不错,但我们可以稍微执行一下以不同的方式避免 < join.
- 获取仅包含给定页面的视图的 table。
- 仅根据会话 ID 将其加入请求 table。
- 对其进行过滤,以便我们只有在特定页面之后的请求。
- 使用汇总仅获取我们第一次网页浏览后的最小时间戳。
- 按会话 ID 获取平均差异
- 就像以前一样,将
avg
函数与 .summarize
配对可以得出总体平均值。
代码:
let startTime = requests | where name == "Function2" | project session_Id, startingTimestamp=timestamp;
let userTiming = requests
| join kind=inner (startTime) on $left.session_Id == $right.session_Id
| where timestamp > startingTimestamp
| summarize nextTimestamp=min(timestamp) by startingTimestamp, session_Id;
userTiming
| summarize AverageTime=avg(datetime_diff('millisecond', nextTimestamp, startingTimestamp)) by session_Id
//| summarize avg(AverageTime)
我正在尝试计算 Application Insights 中两个 requests/pageViews 之间的时间跨度。目标是计算在页面上花费的时间。我知道 AI 有 autoTrackPageVisitTime
设置,但不幸的是它没有打开。
我最初的尝试是加入请求 table 本身
requests | join kind=inner requests on session_id, $left.timestamp < $right.timestamp
, 但我的理解是不支持小于号加入。
还有谁知道我如何计算每个会话的两个连续请求之间的时间?
编辑: 在伪术语中:
- 找到第一个请求,其中 page/name = 'page1'
- 查找 sessionId 等于第一个的下一个请求
- 计算两次请求之间的持续时间
- 计算所有 sessionId 的平均持续时间。
我不完全确定您是否总是希望从特定页面进行跟踪,但如果您正在寻找平均值,则无需担心单个页面的时间安排。
如果您要查找整个站点的平均页面时间,那么您只需要会话活动的最早时间、最后时间以及该时间段内访问的页面数。将时间差除以页数得出平均值。然后您可以再次调用 summarize
以获得总体平均值。
注意 - 我从页数中减去 1,因为我没有最后一页打开和他们离开之间的时间。
代码:
let userTiming = requests | summarize PageViews=count()-1, StartTime=min(timestamp), EndTime=max(timestamp) by session_Id;
userTiming
| extend AverageTime=datetime_diff('millisecond', EndTime, StartTime)/PageViews
//| summarize avg(AverageTime)
如果您要根据用户的下一次综合浏览量寻找在特定页面上花费的时间,那么您最初将 table 加入自身的想法不错,但我们可以稍微执行一下以不同的方式避免 < join.
- 获取仅包含给定页面的视图的 table。
- 仅根据会话 ID 将其加入请求 table。
- 对其进行过滤,以便我们只有在特定页面之后的请求。
- 使用汇总仅获取我们第一次网页浏览后的最小时间戳。
- 按会话 ID 获取平均差异
- 就像以前一样,将
avg
函数与 .summarize
配对可以得出总体平均值。
代码:
let startTime = requests | where name == "Function2" | project session_Id, startingTimestamp=timestamp;
let userTiming = requests
| join kind=inner (startTime) on $left.session_Id == $right.session_Id
| where timestamp > startingTimestamp
| summarize nextTimestamp=min(timestamp) by startingTimestamp, session_Id;
userTiming
| summarize AverageTime=avg(datetime_diff('millisecond', nextTimestamp, startingTimestamp)) by session_Id
//| summarize avg(AverageTime)