0

我正在尝试计算 Application Insights 中两个请求/页面视图之间的时间跨度。目标是计算在页面上花费的时间。我知道AI有autoTrackPageVisitTime设置,但不幸的是,它没有打开。

我最初的尝试是自己加入请求表

requests | join kind=inner requests on session_id, $left.timestamp < $right.timestamp ,但我的理解是不支持加入小于。

还有其他人知道我如何计算每个会话的两个连续请求之间的时间吗?

编辑:用伪术语:

  1. 查找 page/name = 'page1' 的第一个请求
  2. 查找 sessionId 等于第一个请求的下一个请求
  3. 计算两个请求之间的持续时间
  4. 计算所有 sessionId 的平均持续时间。
4

1 回答 1

2

我不完全确定您是否总是想从特定页面进行跟踪,但如果您正在寻找平均值,则无需担心单个页面的时间安排。

如果您正在寻找整个站点的平均页面时间,那么您只需要会话处于活动状态的最早时间、上次时间以及在该时间段内访问的页面数。将时间差除以页数得出平均值。然后,您可以再次调用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)

如果您正在根据用户的下一次浏览量来查找在特定页面上花费的时间,那么您最初将表连接到自身的想法还不错,但我们可以稍微不同地执行它以避免 < 连接。

  1. 获取仅包含给定页面视图的表。
  2. 仅根据会话 ID 将其加入请求表中。
  3. 将其过滤掉,以便我们只有在特定页面之后的请求。
  4. 使用 summarise 仅获取我们第一次浏览量之后的最小时间戳。
  5. 按会话 ID 获取平均差异
  6. 和以前一样,将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)
于 2020-10-19T22:35:59.167 回答