[comment]: # translation:outdated

[comment]: # ({6537e63f-6537e63f})
# 1 Foreach функције

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

[comment]: # ({b969f625-7d50e3a2})
### Преглед

Foreach функције се користе у [агрегатним прорачунима](/manual/config/items/itemtypes/calculated/aggregate) за враћање једне збирне вредности за сваку ставку коју је изабрао коришћени **филтер ставке**. Враћа се низ вредности.

На пример, функција * avg_foreach* ће вратити низ вредности, где је свака вредност *просечна* вредност историје изабране ставке, током временског интервала који је наведен.

[филтер ставке](#item-filter-syntax) је део синтаксе коју користе foreach функције.
Коришћење џокер знакова је подржано у филтеру ставки, тако да се тражене ставке могу бирати прилично флексибилно.

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

[comment]: # ({cb30d6a6-c9e1960d})
### Подржане функције

|Function|Description|
|--|--------|
|*avg_foreach*|Враћа просечну вредност за сваку ставку.|
|*bucket_rate_foreach*|Враћа парове (горња граница сегмента, вредност стопе) погодне за употребу у функцији [histogram\_quantile()](/manual/appendix/functions/aggregate#aggregate_functions1), где је "горња граница сегмента" вредност параметра кључа ставке дефинисаног у <број параметра> [параметру](#additional_parameters).|
|*count_foreach*|Враћа број вредности за сваку ставку.|
|*exists_foreach*|Враћа '1' за сваку омогућену ставку.|
|*last_foreach*|Враћа последњу вредност за сваку ставку.|
|*max_foreach*|Враћа максималну вредност за сваку ставку.|
|*min_foreach*|Враћа минималну вредност за сваку ставку.|
|*sum_foreach*|Враћа збир вредности за сваку ставку.|

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

[comment]: # ({e6ad63b7-2cf639a9})
### Синтакса функције

Foreach функције подржавају два уобичајена параметра: `item filter` (погледајте детаље у наставку) и `time period`:

    foreach_function(item filter,time period)

На пример: 

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

ће вратити петоминутни просек сваке 'mysql.qps' ставке у групи MySQL сервера.

Имајте на уму да неке функције подржавају додатне [параметре](#additional_parameters).

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

[comment]: # ({b34ce1e4-737d2e38})
#### Синтакса филтера ставке

Филтер ставке:

   /host/key[параметри]?[услови]

састоји се од четири дела, где су:

*  host - име домаћина
*  key - кључ ставке (без параметара)
*  parameters - параметри кључа ставке
*  conditions - услови засновани на групи домаћина и/или ознаци ставке (као израз)

Размаци су дозвољени само унутар израза услова.

**Употреба џокера***

*.  Џокер се може користити за замену имена хоста, кључа ставке или појединачног параметра кључа ставке.
*  И хост или кључ ставке морају бити наведени без џокера. Дакле, `/host/*` и `/*/key` су важећи филтери, али `/*/*` је неважећи.
*  Џокер се не може користити за *део* имена хоста, кључа ставке, параметра кључа ставке.
*  Џокер се не подудара са више од једног параметра кључа ставке. Дакле, џокер мора бити наведен за сваки параметар у раздвајању (нпр. `key[abc,*,*]`).

**Израз услова**

Израз услова подржава:

*  операндe:
   *  група - група хостова
   *  ознака - ознака ставке
   *  `"<текст>"` - стринг константа, са `\` излазним знаком за избегавање `"` и `\`
*  оператори поређења стрингова који разликују велика и мала слова: `=`, `<>`
*  логички оператори: `и`, `или`, `не`
*  груписање са заградама: `(` `)`Навођење стринг константи је обавезно.

Подржано је само поређење целог стрингова које разликује велика и мала слова.

:::notewarning
Приликом навођења ознака у филтеру (нпр. `tag="nazivoznake:vrednost"`), двотачка ":" се користи као разграничник. Све после ње се сматра вредношћу ознаке. Стога тренутно није подржано навођење имена ознаке које садржи ":" у себи.
:::

**Примери**

Може се користити сложен филтер, који се позива на кључ ставке, групу домаћиина и ознаке, као што је илустровано на примери:

|Syntax example|Description|
|--|--|
|`/host/key[abc,*]`|Подудара се са сличним ставкама на овом домаћину.|
|`/*/key`|Подудара се са истом ставком било ког хоста.|
|`/*/key?[group="ABC" and tag="tagname:value"]`|Подудара се са истом ставком било ког домаћина из ABC групе која има ознаке 'tagname:value'.|
|`/*/key[a,*,c]?[(group="ABC" and tag="Tag1") или (group="DEF" and (tag="Tag2" или tag="Tag3:value"))]`|Подудара се са сличним ставкама било ког домаћина из ABC или DEF групе са одговарајућим ознакама.|

Све референциране ставке морају постојати и прикупљати податке.
Само омогућене ставке на омогућеним домаћинима су укључене у прорачуне.Ставке у неподржаном стању нису укључене.

::: напоменаважно
Ако се кључ ставке референциране ставке промени, филтер мора бити ажуриран ручно.
:::

Одређивање надређене групе домаћина укључује надређену групу и све угнежђене групе домаћина са њиховим ставкама.

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

[comment]: # ({a5305339-0a9b9b28})
#### Временски период

Параметар **други** омогућава да одредите временски период за агрегацију.
Временски период се може изразити само као време, количина вредности (са префиксом **\#**) није подржана.

[Подржани симболи јединица](/manual/appendix/suffixes) се могу користити у овом параметру ради практичности,
на пример, '5m' (пет минута) уместо '300s' (300 секунди) или '1d' (један дан) уместо '86400' (86400 секунди).

За функцију *last\_foreach* временски период је опциони параметар (подржан од Zabbix-а 7.0), који се може изоставити:

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

Временски период није подржан са функцијом *exists\_foreach*.

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

[comment]: # ({db575800-bf880e22})
#### Додатни параметри

**bucket\_rate\_foreach**

Функција *bucket\_rate\_foreach* подржава трећи опциони параметар:

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

где је <parameter number> позиција вредности „bucket“ у кључу ставке. На пример, ако је вредност „bucket“ у myItem\[aaa,0.2\] '0.2', онда је њена позиција 2.

Подразумевана вредност <parameter number> је '1'.

**count\_foreach**

Функција *count\_foreach* подржава трећи и четврти опциони параметар:

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

Где је:

-   **operator** условни оператор за вредности ставки (мора бити под двоструким наводницима). Подржани `оператори`:<br>*eq* - једнако<br>*ne* - није једнако<br>*gt* - веће<br>*ge* - веће или једнако<br>*lt* - мање<br>*le* - мање или једнако<br>*like* - подудара се ако садржи шаблон (разликује велика и мала слова)<br>*bitand* - по биту И<br>*regexp* - подударање регуларног израза датог у `pattern` које разликује велика и мала слова<br>*iregexp* - подударање регуларног израза датог у `pattern` које није осетљиво на велика и мала слова<br>-**pattern** је потребан шаблон (аргументи низа морају бити под двоструким наводницима); подржано ако је *operator* наведен у трећем параметру.

Коментари:

-   Опциони параметри *operator* или *pattern* не могу се оставити празни после зареза, већ само потпуно изоставити.
-   Са *bitand* као трећим параметром, четврти параметар `pattern` може се навести као два броја, одвојена знаком '/': **број_за_упоређивање_са/маском**. count\_foreach() израчунава „битовско И“ из вредности и *маске* и упоређује резултат са *бројем_за_упоређивање_са*. Ако је резултат „битовског И“ једнак *броју_за_упоређивање_са*, вредност се броји.<br>Ако су *број_за_упоређивање_са* и *маска* једнаки, потребно је навести само *маску* (без '/').
-   Са *regexp* или *iregexp* као трећим параметром, четврти параметар `pattern` може бити обичан или [глобални](/manual/regular_expressions#global_regular_expressions) (почиње са '@') регуларни израз. У случају глобалних регуларних израза, осетљивост на велика и мала слова се наслеђује из подешавања глобалних регуларних израза. Ради подударања регуларних израза, вредности са покретним зарезом ће увек бити представљене са 4 децималне цифре после '.'. Такође имајте на уму да за велике бројеве разлика у децималном (сачуваном у бази података) и бинарном (користи га Zabbix сервер) представљању може утицати на четврту децималну цифру. 

Погледајте [агрегатна израчунавања](/manual/config/items/itemtypes/calculated/aggregate) за више детаља и примера о коришћењу foreach функција.

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

[comment]: # ({fc23e115-328844f6})
#### Понашање у зависности од доступности

Следећа табела илуструје како се свака функција понаша у случајевима ограничене доступности домаћина/ставки и подацима историје.

|Function|Disabled host|Unavailable host with data|Unavailable host without data|Disabled item|Unsupported item|Data retrieval error (SQL)|
|--|--|--|--|--|--|--|
|*avg_foreach*|ignore|return avg|ignore|ignore|ignore|ignore|
|*bucket_rate_foreach*|ignore|return bucket rate|ignore|ignore|ignore|ignore|
|*count_foreach*|ignore|return count|0|ignore|ignore|ignore|
|*exists_foreach*|ignore|1|1|ignore|1|n/a|
|*last_foreach*|ignore|return last|ignore|ignore|ignore|ignore|
|*max_foreach*|ignore|return max|ignore|ignore|ignore|ignore|
|*min_foreach*|ignore|return min|ignore|ignore|ignore|ignore|
|*sum_foreach*|ignore|return sum|ignore|ignore|ignore|ignore|

Ако је ставка *игнорисана*, ништа се не додаје у агрегацију.

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