首页 > 解决方案 > 计数行,直到达到当前拥有的团队价值... Kusto,countof()

问题描述

我有这个 Kusto 代码,我一直在尝试开发,任何帮助将不胜感激。

目标是计算到 CurrentOwningTeamId 在 OwningTeamId 列中的第一次出现。

我打包了拥有团队编号并将该值解析为自己的列。我需要计算拥有团队,直到我到达当前拥有团队。列是(示例):

目标:使用 Kusto(Application Insights 代码)计算 OwningTeamId 列中 CurrentOwningTeam 值的第一次出现:

[代码]

   OwningTeamId,   CurrenOwningTeam,    CreateDate,   RequestType
       155523          **888888**        2017-07-02    PRIMARY
       256924          **888888**        2017-08-02    TRANSFER
     **888888**        **888888**        2017-09-02    TRANSFER
       954005          **888888**        2017-10-02    TRANSFER
     **888888**        **888888**        2017-11-02    TRANSFER
       155523          **888888**        2017-12-02    TRANSFER
       954005          **888888**        2017-13-02    TRANSFER
     **888888**        **888888**        2017-14-02    TRANSFER

[/代码]

我认为您可以将当前拥有的团队与 countof() 函数相匹配,但我不知道如何使用正则表达式进行处理。注意:每个事件的每个拥有团队的值都不同,这就是为什么我首先捕获事件的拥有团队并尝试在 OwningTeamId 列中计算 CurrentOwningTeam 编号的第一个实例。换句话说,我想计算到达第一个拥有球队所需的次数。在这种情况下,它将是三个。

注意:OwningTeamId 和 CurrentOwningTeam 可以在每个事件上发生变化,我首先捕获 CurrentOwningTeam,然后尝试在 OwningTeamId 列中进行匹配。

注意:这只是一个事件,但我正在尝试执行多个事件。以下是我如何获得当前拥有的团队价值。[/代码]

  | extend CurrentOwningTeam=pack_array(OwningTeamId)
  | parse CurrentOwningTeam with * "[" CurrentOwningTeam:int "]" *
  | serialize CurrentOwningTeam

[/代码]

我尝试使用 row_number() 但它不适用于多个事件,仅适用于每个事件,因此我必须使用 count 或 countof 函数或其他方式。

标签: countazure-data-explorer

解决方案


感谢您的澄清。这是一个查询的建议,该查询计算按时间排序的行,直到达到特定条件(计数是使用 IncidentId 键的上下文)。

datatable(IncidentId:string, OwningTeamId:string, CurrentOwningTeam:string, CreateDate:datetime, RequestType:string)
[
'Id1','155523','888888',datetime(2017-02-07),'PRIMARY',
'Id1','256924','888888',datetime(2017-02-08),'TRANSFER',
'Id1','888888','888888',datetime(2017-02-09),'TRANSFER',
'Id1','954005','888888',datetime(2017-02-10),'TRANSFER',
'Id1','888888','888888',datetime(2017-02-11),'TRANSFER',
'Id1','155523','888888',datetime(2017-02-12),'TRANSFER',
'Id1','954005','888888',datetime(2017-02-13),'TRANSFER',
'Id1','888888','888888',datetime(2017-02-14),'TRANSFER',
// Id2
'Id2','155523','888888',datetime(2017-02-07),'PRIMARY',
'Id2','256924','888888',datetime(2017-02-08),'TRANSFER',
'Id2','999999','888888',datetime(2017-02-09),'TRANSFER',
'Id2','954005','888888',datetime(2017-02-10),'TRANSFER',
'Id2','888888','888888',datetime(2017-02-11),'TRANSFER',
'Id2','155523','888888',datetime(2017-02-12),'TRANSFER',
'Id2','954005','888888',datetime(2017-02-13),'TRANSFER',
'Id2','888888','888888',datetime(2017-02-14),'TRANSFER',
]
| order by IncidentId, CreateDate asc
| extend c= row_cumsum(1, IncidentId!=prev(IncidentId))
| where OwningTeamId == CurrentOwningTeam 
| summarize arg_min(CreateDate, c) by IncidentId

结果:

IncidentId  CreateDate  c
Id1  2017-02-09 00:00:00.0000000  3
Id2  2017-02-11 00:00:00.0000000  5

以下是指向如何使用 arg_min() 聚合查找最早记录的文档的链接,以及指向 row_cumsum()(累积和)函数的链接。

https://docs.microsoft.com/en-us/azure/kusto/query/arg-min-aggfunction https://docs.microsoft.com/en-us/azure/kusto/query/rowcumsumfunction


推荐阅读