Запрос Кусто для получения кумулятивного счета до указанной даты - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть база данных с набором событий с идентификатором пользователя и отметкой времени, и я пытаюсь написать запрос, который даст мне количество отдельных пользователей, которые инициировали событие на каждый день. Поэтому, если у нас есть следующие данные:

Event   | UID | Time Stamp
event 1 |  0  | 9/25/19 9:00 AM 
event 2 |  1  | 9/25/19 3:00 PM 
event 3 |  2  | 9/26/19 2:00 PM 
event 4 |  1  | 9/28/19 5:00 PM 
event 5 |  3  | 9/29/19 7:00 AM 

, тогда вывод должен быть:

9/25/19 : 2
9/26/19 : 3
9/27/19 : 3 (since there are no new events on the 27th)
9/28/19 : 3 (since user with UID=1 has already been counted)
9/29/19 : 4

У меня есть запрос, который получит количество событий в день, но не числособытий всех дней, предшествовавших этому дню. Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 30 сентября 2019

В Kusto / ADX есть несколько встроенных пользовательских аналитических плагинов: https://docs.microsoft.com/en-us/azure/kusto/query/useranalytics

, например, одним из них является плагин activity_engagement: https://docs.microsoft.com/en-us/azure/kusto/query/activity-engagement-plugin

дляпример:

let T = datatable(Event:string, UID:int, Timestamp:datetime)
[
    'event 1', 0,  datetime(9/25/19 9:00 AM),
    'event 2', 1,  datetime(9/25/19 3:00 PM), 
    'event 3', 2,  datetime(9/26/19 2:00 PM),
    'event 4', 1,  datetime(9/28/19 5:00 PM),
    'event 5', 3,  datetime(9/29/19 7:00 AM),
]
;
let min_date_time = toscalar(T | summarize startofday(min(Timestamp)));
let max_date_time = toscalar(T | summarize startofday(max(Timestamp)));
T
| evaluate activity_engagement (UID, Timestamp, 1d, 1d + max_date_time - min_date_time)
| project Timestamp, dcount_activities_outer

и, если вы хотите «заполнить пробел» для 27 сентября, вы можете сделать следующее:

let T = datatable(Event:string, UID:int, Timestamp:datetime)
[
    'event 1', 0,  datetime(9/25/19 9:00 AM),
    'event 2', 1,  datetime(9/25/19 3:00 PM), 
    'event 3', 2,  datetime(9/26/19 2:00 PM),
    'event 4', 1,  datetime(9/28/19 5:00 PM),
    'event 5', 3,  datetime(9/29/19 7:00 AM),
]
;
let min_date_time = toscalar(T | summarize startofday(min(Timestamp)));
let max_date_time = toscalar(T | summarize startofday(max(Timestamp)));
range Timestamp from min_date_time to max_date_time step 1d
| join kind=leftouter (
    T
    | evaluate activity_engagement (UID, Timestamp, 1d, 1d + max_date_time - min_date_time)
    | project Timestamp, dcount_activities_outer
) on Timestamp
| order by Timestamp asc
| project Timestamp, coalesce(dcount_activities_outer, prev(dcount_activities_outer))
...