Найти пиковое время с историческими данными

В среднем я пытаюсь определить, в какие часы дня самые активные пользователи приложения. Данные включают метку времени и идентификаторы. Я конвертирую метку времени в столбец в виде даты (M/d/yy), а в другой столбец - в час (ЧЧ: мм), чтобы я мог находить средних пользователей по времени по часам.

Например, если 17.02.2009 в 15:00 есть 6 пользователей, а 18.02.2009 в 15:00 - 5 пользователей, а 19.02.2009 в 15:00 - 4 пользователя, среднее число пользователей в 15:00 будет равно 5. Я хочу запросить таблицу, в которой каждый раз с 0:00 до 23:45 по 15-минутным бинам, со средним числом пользователей за каждый раз. Это то, что я пытался до сих пор, но когда я вычисляю это вручную, запрос не показывает правильные результаты:

Table
| where timestamp > datetime(2018-5-23)
| extend hourNum= format_datetime(bin(timestamp, time(15m)),"HH:mm")
| extend Date= format_datetime(timestamp, "M/d/yy") 
| project timestamp, ID , Date, hourNum
| summarize avgUsers= (dcount(ID)*1.0)/dcount(Date) by hourNum

Буду признателен за любую помощь, спасибо!

1 ответ

Это может быть вызвано тем, что dcount является приблизительным значением фактического отличного числа согласно этому документу:

Синтаксис

summarize dcount(Expr [, Accuracy])

аргументы

Expr: выражение, которое будет использоваться для расчета агрегации.

Точность, если она указана, определяет баланс между скоростью и точностью (см. Примечание).

  • 0 = наименее точный и быстрый расчет. Ошибка 1,6%
  • 1 = значение по умолчанию, которое уравновешивает точность и время расчета; ошибка около 0,8%.
  • 2 = точный и медленный расчет; ошибка около 0,4%.
  • 3 = очень точный и медленный расчет; ошибка около 0,28%.
  • 4 = супер точный и самый медленный расчет; ошибка около 0,2%.

Вы можете попробовать перейти с уровня точности 4, что должно приблизить вещи к ручным вычислениям.

Кроме того, вы можете попробовать использовать двойной summarize (даже медленнее, но точнее)

| summarize by ID, hourNum
| summarize count() by hourNum

Затем вы можете присоединиться к счетчику ID и DateCount на hourNum и сделать разделение.

В целом, я бы посоветовал перейти с более точным расчетом для простоты и достаточно хорошей точности.

Другие вопросы по тегам