0

我有这个 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 函数或其他方式。

4

2 回答 2

2

感谢您的澄清。这是一个查询的建议,该查询计算按时间排序的行,直到达到特定条件(计数是使用 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

于 2018-11-15T17:44:45.310 回答
0

我通过将 RowNumber 直接用于表内的分组,然后最终求和得到我的总数。

      [CODE]

      | serialize Id  
      | extend RowNumber=row_number(1, (Id) ==Id)  
      | summarize TotalOwningTeamChanges=sum(RowNumber) by Id  

      [/CODE]

然后,我得到了将整个数据集提取到当前 OwningTeamName 的第一个实例的最小日期。

      [CODE]
      //Outside the scope of the table.
      | extend ExtractFirstOwningTeamCreateDate=CreateDate2  
      | extend VeryFirstOwningTeamCreateDate=MinimumCreateDate  
      | where FirstOwningTeamRow == true or MinimumCreateDate <=
              ExtractFirstOwningTeamCreateDate  
      | serialize VeryFirstOwningTeamCreateDate  

      [/CODE]
于 2019-01-10T18:37:48.637 回答