bin()

Rundet Werte auf eine ganze Zahl ab, die ein Vielfaches der angegebenen bin-Größe ist.

Wird häufig in Kombination mit summarize by ... verwendet. Wenn Sie über einen verstreuten Satz von Werten verfügen, werden diese in einem kleineren Satz spezifischer Werte gruppiert.

Die bin() Funktionen und floor() sind gleichwertig.

Syntax

bin(value,roundTo)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich BESCHREIBUNG
value int, long, real, timespan oder datetime ✔️ Der wert, der abgerundet werden soll.
roundTo int, long, real oder timespan ✔️ Die "bin-Größe", die den Wert teilt.

Gibt zurück

Das nächste Vielfache von roundTo unter dem Wert (value). NULL-Werte, eine bin-Größe von NULL oder eine negative bin-Größe ergeben NULL.

Beispiele

Numerischer Bin

print bin(4.5, 1)

Ausgabe

print_0
4

Timespan bin

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

Ausgabe

print_0
14:00:00:00

Datetime-Bin

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

Ausgabe

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

Markieren einer Tabelle mit NULL-Bins

Wenn Zeilen für Bins ohne entsprechende Zeile in der Tabelle vorhanden sind, wird empfohlen, die Tabelle mit diesen Bins zu markieren. Die folgende Abfrage untersucht starke Windstürme in Kalifornien für eine Woche im April. An einigen Tagen gibt es jedoch keine Ereignisse.

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)

Ausgabe

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

Um die vollständige Woche darzustellen, werden in der folgenden Abfrage die Ergebnistabelle mit NULL-Werten für die fehlenden Tage gespeichert. Im Folgenden finden Sie eine schrittweise Erläuterung des Prozesses:

  1. Verwenden Sie den union Operator, um der Tabelle weitere Zeilen hinzuzufügen.
  2. Der range-Operator erzeugt eine Tabelle mit einer einzelnen Zeile und Spalte.
  3. Der mv-expand Operator für die range -Funktion erstellt so viele Zeilen, wie Zwischen- und EndTimevorhanden StartTime sind.
  4. Verwenden Sie eine PropertyDamage von 0.
  5. Der summarize Operator gruppiert Bins aus der ursprünglichen Tabelle mit der vom Ausdruck erzeugten union Tabelle. Durch diesen Vorgang wird sichergestellt, dass die Ausgabe eine Zeile pro Intervall enthält, deren Wert entweder 0 oder die ursprüngliche Anzahl ist.
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)

Ausgabe

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