О вычислимых тегах в составе разметок и диагностических правил
Вычислимый тег – это тег, значение которого вычисляется из значений тегов, поступающих от объекта мониторинга, или других вычислимых тегов в соответствии с выражением, заданным пользователем при его создании. Вычислимые теги не сохраняются в базе данных и существуют только в рамках диагностических правил и разметок, в которых они были определены. Вычислимые теги могут быть использованы для расчета некоторого производного значения или для сравнения нескольких значений на протяжении некоторого времени.
Для расчета вычислимого тега вы можете использовать как арифметические действия, так и логические операции, операции сравнения и функции. При написании выражений следует учитывать следующие особенности:
- Для проведения операций над значениями конкретных тегов необходимо прописать имена этих тегов либо в одинарных ('), либо двойных (") кавычках. Если имя тега уже содержит кавычки одного типа, то для применения этого тега в выражении необходимо использовать кавычки другого типа.
- Вы можете использовать значок звездочки в кавычках ("*") для проведения операций над значениями всех тегов, выбранных для расчета вычислимого тега. Например, для вычисления в текущем узле РИВС среднего значения всех выбранных тегов вы можете прописать выражение
mean("*"). Если для вычислимого тега выбраны теги x и y, это выражение соответствует выражениюmean("x", "y"). - Вы можете использовать круглые скобки для явного указания порядка выполнения операций.
- Унарные минус и плюс могут быть использованы как перед числовыми значениями, так и перед конкретными функциями или всем выражением.
- В качестве разделителя целой и дробной частей числа необходимо использовать точку.
- Пробелы между частями выражения игнорируются, вы можете добавлять их по своему усмотрению для читаемости.
- Вы можете комбинировать функции и арифметические действия.
- Результатом выражения должно быть вещественное число. Если результатом вычисления функции является массив чисел, его необходимо передать в другую функцию для получения вещественного числа.
Значение вычислимого тега рассчитывается для каждого узла РИВС в процессе инференса ML-модели с элементом на основе диагностического правила или применения разметки.
По умолчанию для вычисления выражения используются значения аргументов (входящих тегов или других вычислимых тегов) в этом же узле РИВС. Например, значение вычислимого тега с выражением "x" - "y" в узле РИВС 12:00 будет равно разности значений тегов x и y, взятых в момент времени 12:00. Аналогично, выражение max("x", "y") в узле 12:00 вернет максимальное из значений тегов x и y, взятых в момент времени 12:00.
При необходимости в расчете значения вычислимого тега могут использоваться значения аргументов не только в текущем, но и в предшествующих узлах РИВС. Для этого необходимо определить окно – число предшествующих узлов РИВС, включая текущий, из которых будут браться значения аргументов для участия в вычислениях. Длина окна определяется параметром w, который может быть указан как для каждой отдельной функции, так и для выражения в целом. По умолчанию w=1, что соответствует текущему узлу РИВС. Например, предполагая шаг сетки равным 10 минут, выражение max("x", "y", "z", w=3) в узле 12:00 вернет максимальное из значений тегов x, y и z, взятых в моменты времени 11:40, 11:50 и 12:00 (то есть максимальное из 9 значений).
Для применения значения окна сразу ко всем частям выражения необходимо прописать выражение в следующем формате:
w=<длина окна>: <выражение для расчета>
Например, w=3: max("x", "y"). При вызове конкретной функции длина ее окна может быть переопределена с помощью параметра w.
При проведении вычислений с применением окна может оказаться, что результатом является не одно число, а окно (последовательность значений) или даже несколько последовательностей в одном окне. Например, результатом вычисления выражения w=3: "x" * "y" в узле 12:00 будет последовательность из трех чисел, являющихся произведениями значений тегов x и y, взятых, соответственно, в 11:40, 11:50 и 12:00.
Некоторые функции предназначены специально для работы с окнами и возвращают последовательности значений. Например, maxtag("x", "y", "z", w=3) в узле 12:00 вернет последовательность из трех чисел: максимум из значений тегов x, y и z в момент 11:40, максимум из значений этих же тегов в 11:50, и максимум из значений этих же тегов в 12:00.
Поскольку значением вычислимого тега в каждом отдельном узле РИВС является одно число, то выражение для вычисления тега должно быть построено так, чтобы возвращать одно число даже при проведении вычислений с окнами. Этого можно достигнуть, например, использовав функцию, которая всегда возвращает одно число, независимо от длины окна и числа своих аргументов. Такая функция называется редуктором. Редукторами являются функции min, max, mean, all, any.
Примеры редукторов:
min("x" * "y", w=3). Выражение возвращает одно число – минимум из произведений значений тегов x и y, взятых, соответственно, в 11:40, 11:50 и 12:00.mean(maxtag("x", "y", "z", w=3)). Выражение возвращает одно число – среднее из максимумов значений тегов x, y и z в трех последних узлах РИВС.
Если выражение для вычислимого тега все же возвращает последовательность чисел (окно), то оно будет автоматически редуцировано. В этом случае в качестве значения вычислимого тега будет взято последнее из этих значений. Если выражение для вычислимого тега возвращает несколько чисел, не являющихся одним окном (одной временной последовательностью), как например, попарные разности pwd("x", "y", "z"), то такое выражение не может быть автоматически редуцировано до одного числа и не пройдет проверку на корректность. В этом случае корректным выражением было бы, например, max(pwd("x", "y", "z")) или all(pwd("x", "y", "z") < 10).