Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Ошибка в редакторе отчетов  (Прочитано 2660 раз)

jameswhite13

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Ошибка в редакторе отчетов
« : 22 Мая 2019, 16:09:03 »
Пытаюсь сделать запрос:
Код: (sql)
SELECT id,Value, LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS prve_timestamp
, TIMESTAMP AS cur_timestamp
, TIMESTAMP - LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS difference_sec
FROM trends_data
Получаю такую ошибку:
Fatal error encountered during command execution.
Как увеличить время ожидания в редакторе запросов? или проблема не в этом? в Workbench все работает
« Изменён: 22 Мая 2019, 16:28:12 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3217
    • Просмотр профиля
    • Simple-Scada
Re: Ошибка в редакторе отчетов
« Ответ #1 : 22 Мая 2019, 23:15:31 »
Здравствуйте.

Время ожидания запроса можно задать в том же окне, где Вы вводите сам запрос (см. вложение). Но это не имеет смысла для запроса который Вы привели. С ним нужно нужно обязательно что-то делать, он совершенно неработоспособный из-за таких выборок:
  LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS prve_timestamp
  TIMESTAMP - LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS difference_sec
, как только таблица trends_data немного наполнится, например на 15000 записей (это произойдет быстро, если у Вас есть архивные теги), запрос уже будет выполняться слишком долго и будет сильно тормозить СУБД.

jameswhite13

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Ошибка в редакторе отчетов
« Ответ #2 : 23 Мая 2019, 08:18:28 »
Да вы правы, добавил строку where id=, есть еще такой вопрос, запрос выводит время в секундах, я его суммирую в итоге данных, как мне перевести значения в часы?
{SumIf(Datatrends_data,trends_data.difference_sec,trends_data.Value==0)}, что сюда добавить?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3217
    • Просмотр профиля
    • Simple-Scada
Re: Ошибка в редакторе отчетов
« Ответ #3 : 24 Мая 2019, 11:15:56 »
В бэнде "Итог данных" по-умолчанию можно вывести только стандартные суммы по колонкам бэнда. Если нужны какие-то уникальные преобразования в свой формат, или дополнительные вычисления, то их придется делать через свои отдельные переменные. Пусть у нас есть бэнд данных, в одной колонке которого выводятся секунды и нужно в бэнде итога данных вывести их сумму в формате времени "HH:mm:ss". Стандартный итог SumIf не подойдёт, он просто подсчитывает сумму целых чисел и никак не касается формата времени "HH:mm:ss".
Поэтому придётся в словаре ответа, в разделе Переменные, создать новую переменную для подсчета суммы SumSec с типом int и значением 0. Затем нужно выделить в бэнде данных компонент в котором выводятся секунды и на событие "После печати" написать скрипт суммирования по условию в переменную SumSec:
Код: (c#)
if (trends_data.Value == 0)
  SumSec += trends_data.Seconds;
, где trends_data - имя источника данных, Seconds - колонка с секундами.
Теперь в переменной SumSec будет храниться суммарное кол-во секунд по условию. Остаётся вывести его в нужном формате. Для этого в бэнде итога данных размещаем компонент текст и пишем в него следующее выражение:
Код
{new DateTime().AddSeconds(SumSec).ToString("HH:mm:ss")}
, т.е. переводим секунды из SumSec в нужный нам формат времени.
« Изменён: 24 Мая 2019, 11:17:09 от Simple-Scada »