bin()

Округляет значения до целого, кратного указанному размеру группы.

Часто используется в сочетании с summarize by .... Если у вас есть разбросанный набор значений, они будут сгруппированы в меньший набор конкретных значений.

Функции bin() и floor() эквивалентны

Синтаксис

bin(value,roundTo)

Дополнительные сведения о соглашениях о синтаксисе.

Параметры

Имя Тип Обязательно Описание
value int, long, real, timepan или datetime ✔️ Значение для округления.
roundTo int, long, real или timepan ✔️ Размер ячейки, который делит значение.

Возвращаемое значение

Ближайшее число, кратное roundTo и меньшее value. При указании значения NULL, размера ячейки NULL или отрицательного значения размера ячейки возвращается значение NULL.

Примеры

Числовая ячейка

print bin(4.5, 1)

Выходные данные

print_0
4

Интервал времени

print bin(time(16d), 7d)

Выходные данные

print_0
14:00:00:00

Ячейка даты и времени

print bin(datetime(1970-05-11 13:45:07), 1d)

Выходные данные

print_0
1970-05-11T00:00:00Z

Заполнение таблицы ячейками null

При наличии строк для ячеек без соответствующей строки в таблице рекомендуется заполнить таблицу этими ячейками. В следующем запросе рассматриваются сильные штормовые штормы в Калифорнии в течение недели в апреле. Тем не менее, в некоторые дни нет событий.

let Start = datetime('2007-04-07');
let End = Start + 7d;
StormEvents
| where StartTime between (Start .. End)
| where State == "CALIFORNIA" and EventType == "Strong Wind"
| summarize PropertyDamage=sum(DamageProperty) by bin(StartTime, 1d)

Выходные данные

StartTime PropertyDamage
2007-04-08T00:00:00Z 3000
2007-04-11T00:00:00Z 1000
2007-04-12T00:00:00Z 105000

Чтобы представить всю неделю, следующий запрос заполняет таблицу результатов значениями NULL для отсутствующих дней. Ниже приведено пошаговое описание процесса.

  1. Используйте оператор , union чтобы добавить дополнительные строки в таблицу.
  2. Оператор range создает таблицу с одной строкой и одним столбцом.
  3. Оператор mv-expand над функцией range создает столько строк, сколько между StartTime и EndTime.
  4. Используйте для PropertyDamage значение 0.
  5. Оператор summarize группирует ячейки из исходной таблицы в таблицу, созданную выражением union . Этот процесс гарантирует, что выходные данные будут содержать одну строку для каждого интервала, значение которой равно нулю или исходному количеству.
let Start = datetime('2007-04-07');
let End = Start + 7d;
StormEvents
| where StartTime between (Start .. End)
| where State == "CALIFORNIA" and EventType == "Strong Wind"
| union (
    range x from 1 to 1 step 1
    | mv-expand StartTime=range(Start, End, 1d) to typeof(datetime)
    | extend PropertyDamage=0
    )
| summarize PropertyDamage=sum(DamageProperty) by bin(StartTime, 1d)

Выходные данные

StartTime PropertyDamage
2007-04-07T00:00:00Z 0
2007-04-08T00:00:00Z 3000
2007-04-09T00:00:00Z 0
2007-04-10T00:00:00Z 0
2007-04-11T00:00:00Z 1000
2007-04-12T00:00:00Z 105000
2007-04-13T00:00:00Z 0
2007-04-14T00:00:00Z 0