Считайте строки, пока не получите текущее значение команды-владельца ... Kusto, countof () - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть этот код Kusto, который я пытался разработать, и любая помощь будет принята с благодарностью.

Цель состоит в том, чтобы сосчитать до первого вхождения CurrentOwningTeamId в столбце OwningTeamId.

Я упаковал номер группы владельцев и проанализировал значение в собственном столбце.Мне нужно считать команды-хозяева, пока я не доберусь до текущей команды-хозяина.Столбцы (пример):

Цель: подсчитать до первого появления значения CurrentOwningTeam в столбце OwningTeamId с помощью Kusto (код Application Insights):

[CODE]

   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

[/ CODE]

Я думаю, вы можете сопоставить текущую команду-владельца с функцией countof (), но я не знаю, как это сделать с помощью регулярных выражений.Примечание: значения различны для каждой команды-владельца в каждом инциденте, поэтому я сначала собираю команду-владельца в инциденте и пытаюсь подсчитать самый первый экземпляр числа CurrentOwningTeam в столбце OwningTeamId.Другими словами, я хочу посчитать, сколько раз потребуется, чтобы добраться до самой первой команды-владельца.В этом случае было бы три.

Примечание. OwningTeamId и CurrentOwningTeam могут меняться при каждом инциденте. Сначала я записываю CurrentOwningTeam, а затем пытаюсь найти соответствие в столбце OwningTeamId.

Примечание: это всего лишь один инцидент, но я пытаюсь сделать несколько инцидентов.Ниже показано, как я получил текущее значение команды владения.[/ CODE]

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

[/ CODE]

Я пытался использовать row_number (), но он не будет работать для нескольких инцидентов, только для одного инцидента, поэтому я должен использовать count или countofфункции или другой способ сделать это.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я понял это, используя 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]
0 голосов
/ 15 ноября 2018

Спасибо за разъяснения.Вот предложение для запроса, который подсчитывает упорядоченные по времени строки, пока не будет достигнуто определенное условие (счетчик контекстуален с использованием ключа 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

...