Compartilhar via


bin()

Arredonda os valores até um número inteiro múltiplo de um determinado tamanho de compartimentalização.

Usada frequentemente em combinação com summarize by .... Se você tiver um conjunto disperso de valores, eles serão agrupados em um conjunto menor de valores específicos.

As bin() funções e floor() são equivalentes

Syntax

bin(value,roundTo)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório Descrição
value int, long, real, timespan ou datetime ✔️ O valor a ser arredondado para baixo.
roundTo int, long, real ou timespan ✔️ O "tamanho do compartimento" que divide o valor.

Retornos

O múltiplo mais próximo de roundTo abaixo de value. Valores nulos, um tamanho de compartimento nulo ou um tamanho de compartimento negativo resultarão em nulo.

Exemplos

Compartimento numérico

print bin(4.5, 1)

Saída

print_0
4

Compartimento de intervalo de tempo

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

Saída

print_0
14:00:00:00

Compartimento datetime

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

Saída

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

Preencher uma tabela com compartimentos nulos

Quando há linhas para compartimentos sem linha correspondente na tabela, é recomendável preencher a tabela com esses compartimentos. A consulta a seguir analisa eventos de tempestade de vento forte na Califórnia por uma semana em abril. No entanto, não há eventos em alguns dias.

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)

Saída

StartTime Danosà propriedade
2007-04-08T00:00:00Z 3000
2007-04-11T00:00:00Z 1000
2007-04-12T00:00:00Z 105000

Para representar a semana completa, a consulta a seguir preenche a tabela de resultados com valores nulos para os dias ausentes. Aqui está uma explicação passo a passo do processo:

  1. Use o union operador para adicionar mais linhas à tabela.
  2. O operador range produzirá uma tabela com somente uma linha e coluna.
  3. O mv-expand operador sobre a range função cria tantas linhas quanto há compartimentos entre StartTime e EndTime.
  4. Use uma PropertyDamage de 0.
  5. O summarize operador agrupa compartimentos da tabela original para a tabela produzida pela union expressão. Esse processo garantirá que a saída tenha uma linha por compartimento cujo valor será zero ou a contagem original.
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)

Saída

StartTime Danosà propriedade
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