[comment]: # ({6537e63f-6537e63f})
# 1 Foreach-Funktionen

[comment]: # ({/6537e63f-6537e63f})

[comment]: # ({5f3bebe2-7d50e3a2})
### Übersicht

Foreach-Funktionen werden in [Aggregatberechnungen](/manual/config/items/itemtypes/calculated/aggregate) verwendet, um für jeden durch den verwendeten **Datenpunktfilter** ausgewählten Datenpunkt einen Aggregatwert zurückzugeben.
Es wird ein Array von Werten zurückgegeben.

::: noteimportant
Foreach-Funktionen werden nur innerhalb von [Berechneten Datenpunkten](/manual/config/items/itemtypes/calculated) als Teil von Formeln für Aggregatberechnungen unterstützt.
Sie können nicht in einfachen Datenpunktschlüsseln oder Ausdrücken von Auslösern außerhalb dieses Kontexts aufgerufen werden.
:::

Beispielsweise gibt die Funktion `avg_foreach` ein Array von Werten zurück, wobei jeder Wert der *durchschnittliche* Historienwert des ausgewählten Datenpunkts während des angegebenen Zeitintervalls ist.

Der [Datenpunktfilter](#item-filter-syntax) ist Teil der Syntax, die von Foreach-Funktionen verwendet wird.
Die Verwendung von Platzhaltern wird im Datenpunktfilter unterstützt, sodass die erforderlichen Datenpunkte sehr flexibel ausgewählt werden können.

[comment]: # ({/5f3bebe2-7d50e3a2})

[comment]: # ({1e055e7c-c9e1960d})
### Unterstützte Funktionen

|Function|Description|
|--|--------|
|*avg_foreach*|Gibt den Durchschnittswert für jeden Datenpunkt zurück.|
|*bucket_rate_foreach*|Gibt Paare (obere Bucket-Grenze, Rate-Wert) zurück, die sich für die Verwendung in der Funktion [histogram\_quantile()](/manual/appendix/functions/aggregate#histogram-quantile) eignen, wobei "obere Bucket-Grenze" der Wert des durch den <parameter number> [Parameter](#additional-parameters) definierten item key parameters ist.|
|*count_foreach*|Gibt die Anzahl der Werte für jeden Datenpunkt zurück.|
|*exists_foreach*|Gibt für jeden aktivierten Datenpunkt '1' zurück.|
|*last_foreach*|Gibt den letzten Wert für jeden Datenpunkt zurück.|
|*max_foreach*|Gibt den Maximalwert für jeden Datenpunkt zurück.|
|*min_foreach*|Gibt den Minimalwert für jeden Datenpunkt zurück.|
|*sum_foreach*|Gibt die Summe der Werte für jeden Datenpunkt zurück.|

[comment]: # ({/1e055e7c-c9e1960d})

[comment]: # ({a8e9955e-2cf639a9})
### Funktionssyntax

Foreach-Funktionen unterstützen zwei gemeinsame Parameter: `Datenpunkt-Filter` (siehe Details unten) und `Zeitperiode`:

    foreach_function(item filter,time period)

Zum Beispiel: 

`avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)`

gibt den Fünf-Minuten-Durchschnitt jedes Datenpunkts „mysql.qps“ in der MySQL-Servergruppe zurück.

Beachten Sie, dass einige Funktionen zusätzliche [Parameter](#additional-parameters) unterstützen.

[comment]: # ({/a8e9955e-2cf639a9})

[comment]: # ({f8b1fa52-737d2e38})
#### Syntax des Datenpunktfilters

Der Datenpunktfilter:

    /host/key[parameters]?[conditions]

besteht aus vier Teilen, wobei:

*   host - Host-Name
*   key - Datenpunktschlüssel (ohne Parameter)
*   parameters - Datenpunktschlüsselparameter
*   conditions - auf Host-Gruppen und/oder Datenpunkt-Tags basierende Bedingungen (als Ausdruck)

Leerzeichen sind nur innerhalb des Bedingungsausdrucks zulässig.

**Verwendung von Platzhaltern**

*   Ein Platzhalter kann verwendet werden, um den Host-Namen, den Datenpunktschlüssel oder einen einzelnen Datenpunktschlüsselparameter zu ersetzen.
*   Entweder der Host oder der Datenpunktschlüssel muss ohne Platzhalter angegeben werden. Daher sind `/host/*` und `/*/key` gültige Filter, aber `/*/*` ist ungültig.
*   Ein Platzhalter kann nicht für einen *Teil* des Host-Namens, des Datenpunktschlüssels oder des Datenpunktschlüsselparameters verwendet werden.
*   Ein Platzhalter entspricht nicht mehr als einem einzelnen Datenpunktschlüsselparameter. Daher muss für jeden Parameter separat ein Platzhalter angegeben werden (d. h. `key[abc,*,*]`).

**Bedingungsausdruck**

Der Bedingungsausdruck unterstützt:

*   Operanden:
    *   group - Host-Gruppe
    *   tag - Datenpunkt-Tag
    *   `"<text>"` - Zeichenkettenkonstante, wobei das Escape-Zeichen `\` verwendet wird, um `"` und `\` zu maskieren
*   Operatoren für die Groß-/Kleinschreibung beachtende Zeichenkettenvergleiche: `=`, `<>`
*   logische Operatoren: `and`, `or`, `not`
*   Gruppierung mit Klammern: `(` `)`

Die Anführungszeichen für Zeichenkettenkonstanten sind obligatorisch. Es wird nur ein vollständiger, die Groß-/Kleinschreibung beachtender Zeichenkettenvergleich unterstützt.

:::notewarning
Bei der Angabe von Tags im Filter (d. h. `tag="tagname:value"`) wird der Doppelpunkt ":" als Trennzeichen verwendet. 
Alles danach wird als Tag-Wert betrachtet. Daher wird die Angabe eines Tag-Namens, der ":" enthält, derzeit nicht unterstützt.
:::

**Beispiele**

Es kann ein komplexer Filter verwendet werden, der sich auf den Datenpunktschlüssel, die Host-Gruppe und Tags bezieht, wie in den Beispielen dargestellt:

|Syntax example|Description|
|--|--|
|`/host/key[abc,*]`|Entspricht ähnlichen Datenpunkten auf diesem Host.|
|`/*/key`|Entspricht demselben Datenpunkt auf jedem Host.|
|`/*/key?[group="ABC" and tag="tagname:value"]`|Entspricht demselben Datenpunkt auf jedem Host aus der Gruppe ABC mit den Tags 'tagname:value'.|
|`/*/key[a,*,c]?[(group="ABC" and tag="Tag1") or (group="DEF" and (tag="Tag2" or tag="Tag3:value"))]`|Entspricht ähnlichen Datenpunkten auf jedem Host aus der Gruppe ABC oder DEF mit den entsprechenden Tags.|

Alle referenzierten Datenpunkte müssen existieren und Daten erfassen.
Nur aktivierte Datenpunkte auf aktivierten Hosts werden in die Berechnungen einbezogen.
Datenpunkte im nicht unterstützten Zustand werden nicht einbezogen.

::: noteimportant
Wenn der Datenpunktschlüssel eines referenzierten Datenpunkts geändert wird, muss der Filter manuell aktualisiert werden.
:::

Die Angabe einer übergeordneten Host-Gruppe schließt die übergeordnete Gruppe und alle verschachtelten Host-Gruppen mit ihren Datenpunkten ein.

[comment]: # ({/f8b1fa52-737d2e38})

[comment]: # ({2ab7aef7-0a9b9b28})
#### Zeitperiode

Der **zweite** Parameter ermöglicht die Angabe der Zeitperiode für die Aggregation.
Die Zeitperiode kann nur als Zeitangabe ausgedrückt werden; die Anzahl der Werte (mit **\#** vorangestellt) wird nicht unterstützt.

[Unterstützte Einheitensymbole](/manual/appendix/suffixes) können in diesem Parameter der Einfachheit halber verwendet werden,
zum Beispiel „5m“ (fünf Minuten) statt „300s“ (300 Sekunden) oder „1d“ (ein Tag) statt „86400“ (86400 Sekunden).

Für die Funktion *last\_foreach* ist die Zeitperiode ein optionaler Parameter (unterstützt seit Zabbix 7.0), der weggelassen werden kann:

    last_foreach(/*/key?[group="host group"])

Die Zeitperiode wird von der Funktion *exists\_foreach* nicht unterstützt.

[comment]: # ({/2ab7aef7-0a9b9b28})

[comment]: # ({a4d91525-bf880e22})
#### Zusätzliche Parameter

**bucket\_rate\_foreach**

Ein dritter optionaler Parameter wird von der Funktion *bucket\_rate\_foreach* unterstützt:

    bucket_rate_foreach(item filter,time period,<parameter number>)

wobei <parameter number> die Position des „bucket“-Werts im Datenpunktschlüssel ist.
Wenn beispielsweise der „bucket“-Wert in myItem\[aaa,0.2\] „0.2“ ist, dann ist seine Position 2.

Der Standardwert von <parameter number> ist „1“.

**count\_foreach**

Dritte und vierte optionale Parameter werden von der Funktion *count\_foreach* unterstützt:

    count_foreach(item filter,time period,<operator>,<pattern>)

Dabei gilt:

-   **operator** ist der bedingte Operator für Datenpunktwerte (muss in doppelte Anführungszeichen gesetzt werden). Unterstützte `operators`:<br>*eq* - gleich<br>*ne* - ungleich<br>*gt* - größer<br>*ge* - größer oder gleich<br>*lt* - kleiner<br>*le* - kleiner oder gleich<br>*like* - stimmt überein, wenn das Muster enthalten ist (Groß-/Kleinschreibung wird beachtet)<br>*bitand* - bitweises UND<br>*regexp* - Übereinstimmung unter Beachtung der Groß-/Kleinschreibung mit dem in `pattern` angegebenen regulären Ausdruck<br>*iregexp* - Übereinstimmung ohne Beachtung der Groß-/Kleinschreibung mit dem in `pattern` angegebenen regulären Ausdruck<br>
-   **pattern** ist das erforderliche Muster (String-Argumente müssen in doppelte Anführungszeichen gesetzt werden); wird unterstützt, wenn *operator* im dritten Parameter angegeben ist.

Kommentare:

-   Optionale Parameter *operator* oder *pattern* können nach einem Komma nicht leer gelassen, sondern nur vollständig weggelassen werden.
-   Wenn *bitand* als dritter Parameter verwendet wird, kann der vierte Parameter `pattern` als zwei durch „/“ getrennte Zahlen angegeben werden: **number_to_compare_with/mask**. count\_foreach() berechnet aus dem Wert und der *mask* ein „bitweises UND“ und vergleicht das Ergebnis mit *number_to_compare_with*. Wenn das Ergebnis des „bitweisen UND“ gleich *number_to_compare_with* ist, wird der Wert gezählt.<br>Wenn *number_to_compare_with* und *mask* gleich sind, muss nur die *mask* angegeben werden (ohne „/“).
-   Wenn *regexp* oder *iregexp* als dritter Parameter verwendet wird, kann der vierte Parameter `pattern` ein gewöhnlicher oder [globaler](/manual/regular_expressions#global-regular-expressions) (mit „@“ beginnender) regulärer Ausdruck sein. Bei globalen regulären Ausdrücken wird die Beachtung der Groß-/Kleinschreibung von den Einstellungen des globalen regulären Ausdrucks übernommen. Für den Zweck des regexp-Abgleichs werden Float-Werte immer mit 4 Dezimalstellen nach dem „.“ dargestellt. Beachten Sie außerdem, dass bei großen Zahlen Unterschiede zwischen der dezimalen (in der Datenbank gespeicherten) und der binären (vom Zabbix Server verwendeten) Darstellung die 4. Dezimalstelle beeinflussen können.

Weitere Details und Beispiele zur Verwendung von foreach-Funktionen finden Sie unter [Aggregatberechnungen](/manual/config/items/itemtypes/calculated/aggregate).

[comment]: # ({/a4d91525-bf880e22})

[comment]: # ({fc23e115-328844f6})
#### Verhalten in Abhängigkeit von der Verfügbarkeit

Die folgende Tabelle veranschaulicht, wie sich jede Funktion bei eingeschränkter Verfügbarkeit von Host-/Datenpunkt- und Verlaufsdaten verhält.

|Function|Deaktivierter Host|Nicht verfügbarer Host mit Daten|Nicht verfügbarer Host ohne Daten|Deaktivierter Datenpunkt|Nicht unterstützter Datenpunkt|Fehler beim Datenabruf (SQL)|
|--|--|--|--|--|--|--|
|*avg_foreach*|ignorieren|Durchschnitt zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|
|*bucket_rate_foreach*|ignorieren|Bucket-Rate zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|
|*count_foreach*|ignorieren|Anzahl zurückgeben|0|ignorieren|ignorieren|ignorieren|
|*exists_foreach*|ignorieren|1|1|ignorieren|1|n/v|
|*last_foreach*|ignorieren|Letzten Wert zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|
|*max_foreach*|ignorieren|Maximum zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|
|*min_foreach*|ignorieren|Minimum zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|
|*sum_foreach*|ignorieren|Summe zurückgeben|ignorieren|ignorieren|ignorieren|ignorieren|

Wenn der Datenpunkt *ignoriert* wird, wird der Aggregation nichts hinzugefügt.

[comment]: # ({/fc23e115-328844f6})
