【问题标题】:Count rows until you get to the current owning team value... Kusto, countof()计数行,直到达到当前拥有的团队价值... Kusto,countof()
【发布时间】:2019-01-11 02:40:14
【问题描述】:

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

【问题讨论】:

  • 标记kusto
  • 确实找到了另一种方法...你可以总结一下,RowNumber=sum(1) 或者 RowNUMber =count()。

标签: count azure-data-explorer


【解决方案1】:

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

【讨论】:

  • 非常感谢 Alexander 的帮助,但我正试图弄清楚如何仅计入第一个 Current Owning Team Id 实例。在示例中,show 将显示为 3 的结果。换句话说,需要 3 行才能到达拥有团队 ID 888888,即当前拥有团队。
  • 答案的最后一次编辑为事件 Id1 提供了“3”,为事件 Id2 提供了“5”。这不是你感兴趣的吗?
【解决方案2】:

我通过将 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多