Здравствуйте.
В данный момент нет возможности автоматического выравнивания интервалов отчета по месяцам. Эта возможность будет добавлена в одном из ближайших обновлений. Поэтому, в данный момент, можно через скрипты задать для отчета интервал равный одному месяцу и построить отчет за этот месяц. Но более 1 месяца сделать не получится.
Можете указать, где описано или опишите тут, что подразумевается под значениями 0, 1, 2, 3 поля Quality в таблице trends_data подключенной базы данных?
0 - плохое качество тега;
1 - хорошее качество;
2 - первое значение после запуска проекта;
3 - значение на момент выключения проекта;
Опишите вкратце (можно на email) как в редакторе отчетов сделать активную связь между источником (MySQL с запросом и фильтром данных) во временную таблицу обрабатываемую источником SimpleScada?
Для создания связей между двумя источниками данных в системе отчетов нужно кликнуть ПКМ по источнику данных в словаре отчета и выбрать пункт "Новая связь". Подробно этот процесс описан здесь (https://www.stimulsoft.com/ru/documentation/online/user-manual/index.html?getting_started_creating_relation.htm).
Порекомендуйте как при составлении автоматом по условиям ежемесячного отчета указать конец периода?
Дата/время начала отчета должна быть 01.01.2020 00:00:00, а дата/время конца 01.02.2020 00:00:00. Переменную-интервал нужно задать равной нулю (!) (если переменная-интервал равна 0, то будет взят весь период отчёта начиная от переменной начала до переменной конца), тогда весь месяц будет обработан.
2. Как взять первое значение в диапазоне??
3. Как взять крайнее значение в диапазоне?
Нужно взять первое и последнее значение в отчете из периодического источника данных? Если да, то можно в конце отчета разместить бэнд "Итог данных" и вставить такое выражение в ячейку итога:
{(double)Last(DataДанные, Данные.Value) - (double)First(DataДанные, Данные.Value)} , где "DataДанные" - имя бэнда данных. "Данные" - имя источника данных. "Value" - имя колонки в источнике данных по которой мы считаем разницу. Теперь в ячейке итога будет выведена разница между последним и первым значением.
Также получить значения из архива можно через скаду, до построения отчета, используя процедуру ArchiveValueByTime (https://simple-scada.com/help/script/archivevaluebytime.html), она извлекает значение из архива за указанное время. Т.е. можно сначала получить значение на начало месяца, затем на конец месяца, их разницу записать в переменную результата и эту переменную вывести в отчет.
Добрый день!
Также получить значения из архива можно через скаду, до построения отчета, используя процедуру ArchiveValueByTime, она извлекает значение из архива за указанное время.
Хороший метод. Но... На данный момент времени заранее время не известно. Почему.
Вот запрос в базу данных:
SELECT min(Value) as min_name, max(Value) as max_name FROM etp_tc_insat.trends_data
WHERE ID = 3621 - нужная нам для отчета переменнная
AND Value <> 0 - фильтр на нулевые значения
AND Quality = 1 - фильтр на достоверность данных
AND Timestamp - это для работы BETWEEN
BETWEEN CAST('2020-01-01' As date) AND CAST('2020-01-26' As date);
Результат тот который нужен.
Этот же запрос работает при формировании отчета, когда источником данных выбран MySQL сервер, а не скада.
При этом время фиксации минимального значения или максимального ни как не совпадает с началом периода или его окончанием после фильтрации.
Поэтому вопрос как вместо заданного значения времени поставить выбранное в скаде все еще актуален.
Жду вопросов и предложений.
Поэтому вопрос как вместо заданного значения времени поставить выбранное в скаде все еще актуален.
В отчетах, в пользовательских источниках данных, можно прямо в запрос подставлять переменные отчета. Для этого у переменной нужно включить флажок "Разрешить использовать как SQL параметр" и затем её значение можно использовать в коде запроса источника данных (перед именем переменной нужно добавить символ @), например:
select * from trends_data
where (id=@Моя_переменная)
LIMIT 100;
, таким образом, меняя значение переменной управлять запросом. Можно эту переменную связать с переменной в скаде, тогда можно будет влиять на отчет из скады, меняя значение переменной. Используя описанный выше способ, в этой статье (https://simple-scada.com/help/report/rep-user-data.html) в sql-запрос источника данных из скады передаются время начала и время конца.
Добрый день!
Да пример на который Вы указали помог в реализации.
Теперь другая проблема! :D
Финальная версия запроса в отчете такая:
SELECT ID, MIN(Value) AS min_v, MAX(Value) AS max_v FROM trends_data
WHERE ID IN (3621, 5208)
AND (timestamp >= @PeriodStart)
AND (timestamp <= @PeriodFinish)
AND Value <> 0
AND Quality = 1
GROUP BY ID;
и после его выполнения мы получаем следующую таблицу:
ID min_v max_v
3621 6547 7564
5208 454,6 546,9
Теперь вопросы.
1. Подскажите можно ли в полученной таблице заменить подстановкой ID на текст по условию? Это можно сделать с помощью функции отчетов IIF? Может есть опять где то справка?
2. В этой теме (https://simple-scada.com/forum/index.php?topic=843.msg7226#msg7226) при наличии наверное можно было бы вытянуть. По поводу таблицы не думали?