尝试计算查询结果中记录数的平均值
Trying to calculate the average on a count of records in my query results
我正在尝试在 Application Insights 中创建一个查询,该查询可以显示特定时间段内对话中消息的绝对数量和平均数量。我正在使用 LUIS 跟踪示例来获取上下文+LUIS 信息,这是我从中提取 conversationID 的地方。我可以获得 table 显示每次对话的消息数,但我还希望数据集的平均消息数。静态平均值或滚动平均值(通过引入时间戳)都可以。我可以通过执行第二个总结语句来获得这个值,但是我失去了第一个的粒度。这是我的查询。
requests
| where url endswith "messages"
| where timestamp > ago(30d)
| project timestamp, url, id
| parse kind = regex url with *"(?i)http://"botName".azurewebsites.net/api/messages"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| where message == "LUIS"
| extend convID = tostring(customDimensions.LUIS_botContext_conversation_id)
| order by timestamp desc nulls last
| project timestamp, botName, convID
| summarize messages=count() by conversation=convID
这为我提供了 table 个对话 ID 以及每个对话的消息计数。我还想查看每次对话的平均消息数。例如,如果我有 4 个对话,总共有 100 条消息,我想看到平均值是 25。我可以通过执行第二个总结语句 | summarize messages=sum(messages), avgMessages=avg(messages)
来得到这个结果,但是当然我再也看不到个人谈话。有什么办法可以同时看到两者吗table?
您可以编写 2 个查询,一个用于 "gives me a table of conversation IDs with the message count for each conversation",另一个用于“每次对话的平均消息数”。并考虑使用 Let statement 进行查询。
这里的棘手之处在于,在这两个查询中,在 summarize
语句之后,在末尾添加这行代码,例如 | extend myidentifier="aaa"
.
然后您可以使用 myidentifier
.
加入 2 个查询
我无法弄清楚如何在不丢失第一个列表的粒度的情况下执行此操作(即我无法弄清楚如何计算每个时间段的平均值,例如一天),但以下查询至少让我得到了对我设置的任何时间戳过滤器进行平均,这最终让我得到了我正在寻找的数据。
requests
| where url endswith "messages"
| where timestamp > ago(30d)
| project timestamp, url, id
| parse kind = regex url with *"(?i)http://"botName".azurewebsites.net/api/messages"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| where message == "LUIS"
| extend convID = tostring(customDimensions.LUIS_botContext_conversation_id)
| order by timestamp desc nulls last
| project timestamp, botName, convID
| summarize messages=count() by conversation=convID
| summarize conversations=count(), messageAverage=avg(messages)
我正在尝试在 Application Insights 中创建一个查询,该查询可以显示特定时间段内对话中消息的绝对数量和平均数量。我正在使用 LUIS 跟踪示例来获取上下文+LUIS 信息,这是我从中提取 conversationID 的地方。我可以获得 table 显示每次对话的消息数,但我还希望数据集的平均消息数。静态平均值或滚动平均值(通过引入时间戳)都可以。我可以通过执行第二个总结语句来获得这个值,但是我失去了第一个的粒度。这是我的查询。
requests
| where url endswith "messages"
| where timestamp > ago(30d)
| project timestamp, url, id
| parse kind = regex url with *"(?i)http://"botName".azurewebsites.net/api/messages"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| where message == "LUIS"
| extend convID = tostring(customDimensions.LUIS_botContext_conversation_id)
| order by timestamp desc nulls last
| project timestamp, botName, convID
| summarize messages=count() by conversation=convID
这为我提供了 table 个对话 ID 以及每个对话的消息计数。我还想查看每次对话的平均消息数。例如,如果我有 4 个对话,总共有 100 条消息,我想看到平均值是 25。我可以通过执行第二个总结语句 | summarize messages=sum(messages), avgMessages=avg(messages)
来得到这个结果,但是当然我再也看不到个人谈话。有什么办法可以同时看到两者吗table?
您可以编写 2 个查询,一个用于 "gives me a table of conversation IDs with the message count for each conversation",另一个用于“每次对话的平均消息数”。并考虑使用 Let statement 进行查询。
这里的棘手之处在于,在这两个查询中,在 summarize
语句之后,在末尾添加这行代码,例如 | extend myidentifier="aaa"
.
然后您可以使用 myidentifier
.
我无法弄清楚如何在不丢失第一个列表的粒度的情况下执行此操作(即我无法弄清楚如何计算每个时间段的平均值,例如一天),但以下查询至少让我得到了对我设置的任何时间戳过滤器进行平均,这最终让我得到了我正在寻找的数据。
requests
| where url endswith "messages"
| where timestamp > ago(30d)
| project timestamp, url, id
| parse kind = regex url with *"(?i)http://"botName".azurewebsites.net/api/messages"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| where message == "LUIS"
| extend convID = tostring(customDimensions.LUIS_botContext_conversation_id)
| order by timestamp desc nulls last
| project timestamp, botName, convID
| summarize messages=count() by conversation=convID
| summarize conversations=count(), messageAverage=avg(messages)