bin()

Arredonda os valores para um número inteiro múltiplo de um determinado tamanho de contentor.

Utilizado frequentemente em combinação com summarize by .... Se tiver um conjunto disperso de valores, estes serão agrupados num conjunto menor de valores específicos.

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

Syntax

bin(valor,roundTo)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
value int, long, real, timespan ou datetime ✔️ O valor a arredondar para baixo.
roundTo int, long, real ou timespan ✔️ O "tamanho da classe" que divide o valor.

Devoluções

O múltiplo mais próximo de roundTovalor abaixo. Os valores nulos, um tamanho de caixote nulo ou um tamanho de contentor negativo resultarão em nulos.

Exemplos

Classe numérica

print bin(4.5, 1)

Saída

print_0
4

Intervalo de tempo

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

Saída

print_0
14:00:00:00

Datetime bin

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

Saída

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

Pad a table with null bins (Teclado uma tabela com classes nulas)

Quando existirem linhas para contentores sem linhas correspondentes na tabela, recomendamos que acolchoe a tabela com essas classes. A seguinte consulta analisa os fortes eventos de tempestade de vento na Califórnia durante uma semana em abril. No entanto, não existem eventos em alguns dos 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 PropertyDamage
2007-04-08T00:00:00Z 3.000
04-2007-11T00:00:00Z 1000
2007-04-12T00:00:00Z 105000

Para representar a semana completa, a seguinte consulta apadrinha a tabela de resultados com valores nulos para os dias em falta. Eis uma explicação passo a passo do processo:

  1. Utilize o union operador para adicionar mais linhas à tabela.
  2. O range operador produz uma tabela que tem uma única linha e coluna.
  3. O mv-expand operador através da range função cria o número de linhas que existem entre StartTime e EndTime.
  4. Utilize um PropertyDamage de 0.
  5. O summarize operador agrupa as classes da tabela original para a tabela produzida pela union expressão. Este processo garante que o resultado tem uma linha por contentor cujo valor é 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 PropertyDamage
2007-04-07T00:00:00Z 0
2007-04-08T00:00:00Z 3.000
2007-04-09T00:00:00Z 0
2007-04-10T00:00:00Z 0
04-2007-11T00:00:00Z 1000
2007-04-12T00:00:00Z 105000
2007-04-13T00:00:00Z 0
04-2007-14T00:00:00Z 0