#azure-data-explorer #kql #kusto-explorer
Вопрос:
Я хочу рассчитать «нет». дней, в течение которых статус установлен на 1. Каждый раз, когда статус равен 0, счетчик должен перезапускаться с 1.
Примечание: Это не обязательно должны быть последовательные дни
Ввод
UserId | Day | Status|
A |2021-09-16 | 1 |
A |2021-09-17 | 1 |
A |2021-09-18 | 1 |
A |2021-09-19 | 1 |
A |2021-09-20 | 0 |
A |2021-09-21 | 1 |
B |2021-09-16 | 1 |
B |2021-09-17 | 1 |
B |2021-09-20 | 1 |
B |2021-09-21 | 0 |
Ожидаемый Результат
UserId | Day | Status| Cum_Sum |
A |2021-09-16 | 1 | 1 |
A |2021-09-17 | 1 | 2 |
A |2021-09-18 | 1 | 3 |
A |2021-09-19 | 1 | 4 |
A |2021-09-20 | 0 | 0 |
A |2021-09-21 | 1 | 1 |
B |2021-09-16 | 1 | 1 |
B |2021-09-17 | 1 | 2 |
B |2021-09-20 | 1 | 3 |
B |2021-09-21 | 0 | 0 |
Ответ №1:
вы можете использовать row_cumsum()
функцию:
datatable(UserId:string, Day:datetime, Status:int)
[
"A", datetime(2021-09-16), 1,
"A", datetime(2021-09-17), 1,
"A", datetime(2021-09-18), 1,
"A", datetime(2021-09-19), 1,
"A", datetime(2021-09-20), 0,
"A", datetime(2021-09-21), 1,
"B", datetime(2021-09-16), 1,
"B", datetime(2021-09-17), 1,
"B", datetime(2021-09-20), 1,
"B", datetime(2021-09-21), 0,
]
| order by UserId asc, Day asc
| extend cumulative_sum = row_cumsum(Status, prev(UserId) != UserId or Status == 0)