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

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

Автор Тема: Отчеты. Суммирование колонки.  (Прочитано 3276 раз)

sakhref

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Отчеты. Суммирование колонки.
« : 19 Декабря 2018, 10:53:39 »
Имеется таблица вида:
времяминимальноемаксимальноемаксимальное-минимальное
12:0050150100

4 столбец содержит выражение
Код
{(double)Данные.Максимальное - (double)Данные.Минимальное}
Как просуммировать 4 столбец и вывести как итог на каждой странице и в конце отчета?

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 166
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: Отчеты. Суммирование колонки.
« Ответ #1 : 19 Декабря 2018, 14:44:06 »
Добавьте в источник "Новую рассчитываемую колонку" с названием diff например, значение которой Данные.Максимальное - Данные.Минимальное. diff выводите вместо текущего выражения 4й колонки, и итог соответственно по ней.
« Изменён: 19 Декабря 2018, 14:46:56 от Timofei »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты. Суммирование колонки.
« Ответ #2 : 20 Декабря 2018, 16:13:27 »
Можно обойтись без рассчитываемой колонки, просто в ячейке итога вписать сумму для разности двух колонок, например:
Код
{SumD(DataДанные, (Данные.Температура - Данные.Уровень))}

sakhref

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Отчеты. Суммирование колонки.
« Ответ #3 : 23 Декабря 2018, 03:14:27 »
В случае закрытия программы минимальным значением на любом периоде будет 0, в результате мах-мин=мах.  Подскажите как организовать замену нулевого минимального значения на значение в начале периода или любое предыдущее ненулевое значение?

sakhref

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Отчеты. Суммирование колонки.
« Ответ #4 : 23 Декабря 2018, 04:00:36 »
Или лучше на предыдущее максимальное значение

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты. Суммирование колонки.
« Ответ #5 : 23 Декабря 2018, 23:07:28 »
sakhref, выделите ячейку в бэнде "Данные" (которая отвечает за вывод минимального значения). Нажмите на верхней панели кнопку "Условия". Далее "Добавить условие -> Условное выделение". И задайте следующие параметры выделения: Значение - > Числовой -> Данные.Минимальное -> равно -> 0, флажок "Присвоить выражение" и выражение Previous(Данные,"Максимальное") . Теперь вместо нулей в колонке "Минимальное" будет отображаться предыдущее максимальное значение.
Во вложении пример для другого отчета, но суть та же.

sakhref

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Отчеты. Суммирование колонки.
« Ответ #6 : 24 Декабря 2018, 04:18:23 »
sakhref, выделите ячейку в бэнде "Данные" (которая отвечает за вывод минимального значения). Нажмите на верхней панели кнопку "Условия". Далее "Добавить условие -> Условное выделение". И задайте следующие параметры выделения: Значение - > Числовой -> Данные.Минимальное -> равно -> 0, флажок "Присвоить выражение" и выражение Previous(Данные,"Максимальное") . Теперь вместо нулей в колонке "Минимальное" будет отображаться предыдущее максимальное значение.
Во вложении пример для другого отчета, но суть та же.
Сделал как вы написали и еще в ячейку разности сделал условие с присвоением выражения
Код
Данные.Максимальное - Previous(Данные,"Максимальное")
считает правильно(за исключением, когда в первом интервале 0, а появляются они из-за отсутствия предыдущих значений), только теперь итог считается не верно, так как он суммирует значения независимо от условий.
Код
{SumD(DataДанные, (Данные.Температура - Данные.Уровень))}
Подскажите какое условие добавить или выражение изменить.
« Изменён: 24 Декабря 2018, 05:24:00 от sakhref »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты. Суммирование колонки.
« Ответ #7 : 24 Декабря 2018, 15:42:11 »
В таком случае проще всего проверять условия через свой код. Т.е. удалить Условное выделение с присвоением значения, которое Вы добавили ранее. Затем:
  • переходим на вкладку "Словарь" и в разделе "Переменные" создаём новую переменную с типом Double и значением "0". Назовём её vrTotal;
  • в бэнде "Данные" на странице отчета выделяем ячейку по которой нам нужно посчитать итог (у Вас это ячейка с минимальным значением "Данные.Минимальное");
  • на панели в правой части Редактора отчетов переходим на вкладку "Свойства" и нажимаем кнопку "События" (кнопка с иконкой молнии);
  • на событие "Взять значение" назначаем следующий код:
Код: (c#)
/* если текущее значение равно 0, то подменяем его предыдущим максимальным */
if (Round(double.Parse(e.Value)) == 0)
  if (!PreviousIsNull(Данные, "Максимальное"))
    e.Value = Previous(Данные, "Максимальное").ToString();

/* прибавляем значение в переменную vrTotal */
vrTotal += double.Parse(e.Value);
Теперь при построении отчета в переменную vrTotal будут просуммированы все значения по колонке "Данные.Минимальное" c учетом условия подмены 0. Значение переменной vrTotal можно вынести в любое место отчета, например в итог отчета. Применять функции вычисления итогов (как SumD и др.) не требуется.
Аналогично можно подсчитать любые итоги с учетом условий. Т.е. условия и подмена значений переносятся в код. Расчет суммы также делается в коде и суммируются значения уже после выполнения условий.


sakhref

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Отчеты. Суммирование колонки.
« Ответ #8 : 25 Декабря 2018, 08:11:20 »
Спасибо.
« Изменён: 25 Декабря 2018, 08:15:19 от sakhref »