Ad Widget

Collapse

Создание вычисляемого элемента

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • aleksey.ishchenko
    Senior Member
    • May 2020
    • 187

    #1

    Создание вычисляемого элемента

    Есть три итема L1 L2 L3
    Click image for larger version

Name:	image.png
Views:	222
Size:	38.5 KB
ID:	477552​Как мне получиить сумму трех этих элментов?
    Создаю вычисляемый элемент данных
    sum(/UPS GE LP33 Sh10/upsOutputCurrent,<Output Current L1>,<Output Current L2>,<Output Current L3>,...)
    Но получаю ошибку
    • Ошибочный параметр "/1/params": некорректное выражение начиная с "sum(/UPS GE LP33 Sh10/upsOutputCurrent,<Output Current L1>,<Output Current L2>,<Output Current L3>,...)".
    ​версия 6,4
    В чем ошибка?
  • Answer selected by aleksey.ishchenko at 23-01-2024, 09:50.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Логично получаете - синтаксис и вправду непонятен, даже мне, не то что Zabbix-у.
    Первым параметром функции у вас указан элемент данных с ключом "upsOutputCurrent", но такого нет - есть "upsOutputCurrent.1"; что указано последующими параметрами - вообще непонятно. Как непонятно и то, зачем в данном случае использовать функцию агрегации.
    Как мне получиить сумму трех этих элментов?
    Каких именно "этих"? На скриншоте приведён только один, с ключом "upsOutputCurrent.1". Остальные два - это какие? С аналогичными ключами, но оканчивающимися на ".2" и ".3"?​ Тогда выражение может быть, например, таким:
    Code:
    last(//upsOutputCurrent.1) + last(//upsOutputCurrent.2) + last(//upsOutputCurrent.3)
    Или, если уж так хочется использовать именно функцию агрегации, то так:
    Code:
    max(last(//upsOutputCurrent.1), last(//upsOutputCurrent.2), last(//upsOutputCurrent.3))
    ​Если бы номер выходной линии UPS-а был не просто частью ключа, а параметром ключа (т.к. не "upsOutputCurrent.1", а "upsOutputCurrent[1]"), то тогда бы могло иметь смысл использовать агрегацию, чтобы суммировать все аналогичные элементы данных, независимо от их количества:
    Code:
    max(last_foreach(//upsOutputCurrent[*]))
    ​​

    Comment

    • Alex_UUU
      Senior Member
      • Dec 2018
      • 541

      #2
      Хм, что-то мне подсказывает, что синтаксис фугкции далеко не правильный. Функция sum считает сумму одного элемента за определенное время.
      Тут просто надо
      Code:
      last(<Output Current L1>)+last(<Output Current L2>)+last(<Output Current L3>)

      Comment

      • aleksey.ishchenko
        Senior Member
        • May 2020
        • 187

        #3


        все равно ошибка
        • Ошибочный параметр "/1/params": некорректное выражение начиная с "last(<Output Current L1>)+last(<Output Current L2>)+last(<Output Current L3>)".


        Click image for larger version

Name:	image.png
Views:	205
Size:	29.3 KB
ID:	477564все​

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #4
          Логично получаете - синтаксис и вправду непонятен, даже мне, не то что Zabbix-у.
          Первым параметром функции у вас указан элемент данных с ключом "upsOutputCurrent", но такого нет - есть "upsOutputCurrent.1"; что указано последующими параметрами - вообще непонятно. Как непонятно и то, зачем в данном случае использовать функцию агрегации.
          Как мне получиить сумму трех этих элментов?
          Каких именно "этих"? На скриншоте приведён только один, с ключом "upsOutputCurrent.1". Остальные два - это какие? С аналогичными ключами, но оканчивающимися на ".2" и ".3"?​ Тогда выражение может быть, например, таким:
          Code:
          last(//upsOutputCurrent.1) + last(//upsOutputCurrent.2) + last(//upsOutputCurrent.3)
          Или, если уж так хочется использовать именно функцию агрегации, то так:
          Code:
          max(last(//upsOutputCurrent.1), last(//upsOutputCurrent.2), last(//upsOutputCurrent.3))
          ​Если бы номер выходной линии UPS-а был не просто частью ключа, а параметром ключа (т.к. не "upsOutputCurrent.1", а "upsOutputCurrent[1]"), то тогда бы могло иметь смысл использовать агрегацию, чтобы суммировать все аналогичные элементы данных, независимо от их количества:
          Code:
          max(last_foreach(//upsOutputCurrent[*]))
          ​​

          Comment

          • aleksey.ishchenko
            Senior Member
            • May 2020
            • 187

            #5
            При условии
            last(//upsOutputCurrent.1) + last(//upsOutputCurrent.2) + last(//upsOutputCurrent.3) выдает ошибку Ошибочный параметр "/1/params": некорректное выражение начиная
            а при агрегацмм все ок
            спасибо, буду наблюдать.

            Comment

            Working...