соблазнительный
let TempTable =datatable(timeStamp:datetime, fName:string, lName:string, opName:string, result:string, location:string, error:string)
[
'2022-02-17 16:47', 'abc', 'cde' , 'PUT' ,0, 'loc1', "success",
'2022-02-18 16:47', 'abc', 'cde' , 'Patch' ,1, 'loc1', "warning",
'2022-02-19 16:47', 'abc', 'cde' , 'Patch' ,2, 'loc1',"specific error",
'2022-02-20 16:47', 'abc', 'cde' , 'Delete' ,2, 'loc1',"error",
'2022-03-01 19:47', 'xyz', 'uvw' , 'PUT' ,0, 'loc2',"success",
'2022-03-02 19:47', 'xyz', 'uvw' , 'Patch' ,2, 'loc2',"specific error",
'2022-03-03 19:47', 'xyz', 'uvw' , 'Delete' ,0, 'loc2',"success",
'2022-03-04 19:47', 'ijk', 'lmn' , 'PUT' ,0, 'loc3', "success",
'2022-01-17 22:47', 'ijk', 'lmn' , 'Patch' ,2, 'loc3',"error",
'2022-01-18 22:47', 'ijk', 'lmn' , 'Delete' ,0, 'loc3',"success",
'2022-01-19 22:47', 'ijk', 'lmn' , 'PUT' ,1, 'loc3',"warning",
'2022-01-20 22:47', 'ijk', 'lmn' , 'Patch' ,0, 'loc3', "success",
'2022-02-17 16:47', 'abc1', 'cde' , 'PUT' ,0, 'loc1', "success",
'2022-02-18 16:47', 'abc1', 'cde' , 'Patch' ,1, 'loc1', "warning",
'2022-02-19 16:47', 'abc1', 'cde' , 'Patch' ,2, 'loc1',"specific error",
];
TempTable | summarize by timeStamp, fName, lName, opName, result, location, error
Expected result -
>'2022-02-19 16:47', 'abc', 'cde' , 'Patch' ,2, 'loc1',"specific error",
>'2022-02-19 16:47', 'abc1', 'cde' , 'Patch' ,2, 'loc1',"specific error",
Статус 0 - Успех
Необходимо получить сведения (ожидаемый результат выше) о пользователях, которые выполнили операцию исправления, которая завершилась неудачно (состояние 2) с определенной ошибкой, и никакие другие операции не были предприняты после сбоя исправления (с определенной ошибкой) или были предприняты, но операции не удались, до тех пор, пока Теперь.
шаг 1: Вы получаете запрошенную конкретную ошибку или вы уже находитесь на шаге 1, вы не переключились на другого пользователя и текущий результат записи является какой-то ошибкой (включая конкретную ошибку)
шаг 2: Вы не переключились на другого пользователя, текущий результат записи не является ошибкой, и вы впервые выполняете этот шаг
Каждое совпадение начинается с конкретной ошибки, за которой следуют необязательные дополнительные ошибки, за которыми следует необязательная ошибка.
У каждого пользователя может быть несколько совпадений.
Для каждого совпадения пользователя мы находим, чем оно закончилось, и приносим запись о первой конкретной ошибке.
Для каждого пользователя берем последнее совпадение и фильтруем тех, которые закончились ошибкой.
let TempTable =datatable(timeStamp:datetime, fName:string, lName:string, opName:string, result:string, location:string, error:string)
[
'2022-02-17 16:47' ,'abc' ,'cde' ,'PUT' ,0 ,'loc1' ,"success",
'2022-02-18 16:47' ,'abc' ,'cde' ,'Patch' ,1 ,'loc1' ,"warning",
'2022-02-19 16:47' ,'abc' ,'cde' ,'Patch' ,2 ,'loc1' ,"specific error",
'2022-02-20 16:47' ,'abc' ,'cde' ,'Delete' ,2 ,'loc1' ,"error",
'2022-03-01 19:47' ,'xyz' ,'uvw' ,'PUT' ,0 ,'loc2' ,"success",
'2022-03-02 19:47' ,'xyz' ,'uvw' ,'Patch' ,2 ,'loc2' ,"specific error",
'2022-03-03 19:47' ,'xyz' ,'uvw' ,'Delete' ,0 ,'loc2' ,"success",
'2022-03-04 19:47' ,'ijk' ,'lmn' ,'PUT' ,0 ,'loc3' ,"success",
'2022-01-17 22:47' ,'ijk' ,'lmn' ,'Patch' ,2 ,'loc3' ,"error",
'2022-01-18 22:47' ,'ijk' ,'lmn' ,'Delete' ,0 ,'loc3' ,"success",
'2022-01-19 22:47' ,'ijk' ,'lmn' ,'PUT' ,1 ,'loc3' ,"warning",
'2022-01-20 22:47' ,'ijk' ,'lmn' ,'Patch' ,0 ,'loc3' ,"success",
'2022-02-17 16:47' ,'abc1' ,'cde' ,'PUT' ,0 ,'loc1' ,"success",
'2022-02-18 16:47' ,'abc1' ,'cde' ,'Patch' ,1 ,'loc1' ,"warning",
'2022-02-19 16:47' ,'abc1' ,'cde' ,'Patch' ,2 ,'loc1' ,"specific error"
];
TempTable
| extend specific_error_flag = opName == 'Patch' and result == 2 and error == 'specific error'
| order by fName, lName, timeStamp asc
| scan with_match_id = _mid
declare (is_valid:bool)
with
(
step s1 : specific_error_flag or (fName == s1.fName and lName == s1.lName and result == 2) => is_valid = false;
step s2 : fName == s1.fName and lName == s1.lName and result != 2 and isnull(s2.is_valid) => is_valid = true;
)
| summarize (_max_ts_mid,_max_ts_mid_is_valid) = arg_max(timeStamp,is_valid), _min_ts_mid = arg_min(iff(specific_error_flag,timeStamp,datetime(null)),*) by fName,lName,_mid
| summarize arg_max(_mid,*) by fName,lName
| where _max_ts_mid_is_valid == false
| project-away _*
fИмя | lимя | отметка времени | opName | результат | место нахождения | ошибка | конкретный_ошибка_флаг | является действительным |
---|---|---|---|---|---|---|---|---|
abc1 | cde | 2022-02-19T16:47:00Z | Пластырь | 2 | loc1 | конкретная ошибка | истинный | ЛОЖЬ |
азбука | cde | 2022-02-19T16:47:00Z | Пластырь | 2 | loc1 | конкретная ошибка | истинный | ЛОЖЬ |
Обновлено........
У вас нет идентификатора пользователя?...