Рассчитать разницу во времени между 2 столбцами в SSRS - PullRequest
0 голосов
/ 01 июля 2019

У меня есть два поля, которые рассчитываются в соответствии с приведенным ниже:

= Format (DateAdd ("s", Sum (Fields! TalkTime.Value) / Sum (Fields! EmployeesWorked).Значение), "00:00:00"), "ЧЧ: мм: сс")

и

= ПРЕДЫДУЩАЯ (Формат (DateAdd ("s",Sum (Fields! TalkTime.Value) / Sum (Fields! EmployeesWorked.Value), "00:00:00"), "HH: mm: ss"), "Quarter1")

IУ нас есть отдельный столбец для расчета разницы между двумя столбцами:

= ReportItems! Textbox2625.Value - ReportItems! Textbox29.Value

Однако при запускеВ отчете, столбец, который я использовал для вычисления разницы между двумя полями, показывает «#Error».Я предполагаю, что есть какая-то проблема с форматированием, но я не уверен, как ее исправить?

1 Ответ

0 голосов
/ 02 июля 2019

Format возвращает строку, поэтому вы не пытаетесь вычесть две даты, вы пытаетесь вычесть две строки, что приводит к ошибке.

Во-первых, используйте вычисление даты для выражения Value:

=DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00")

Это вычисляет Sum TalkTime за Sum времени EmployeesWorked для области действия текстового поля.

Поместите форматирование в свойство Format: HH:mm:ss

Это отделяет значение текстового поля (время) от его представления. Теперь вы можете сделать свой расчет:

=ReportItems!Textbox2625.Value - ReportItems!Textbox29.Value

Опять поместите форматирование в свойство Format: HH:mm:ss, чтобы оно отображалось как время.

Если это не сработает, приведите расчет полностью (исключая функции Format, но см. Примечание ниже о том, почему вы не можете правильно использовать функцию Previous):

=DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00") 
- PREVIOUS(DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00"), "Quarter1")

Обратите внимание, что для агрегирования в функции Previous и указания области (в данном случае «Quarter1») требуется, чтобы указанная область («Quarter1») была содержащей областью для текущей области этого ReportItem.

Например, у вас может быть таблица с тремя вложенными уровнями группировки: по году, затем по месяцу, затем по дню. Выражение =Previous(Sum(Fields!Sales.Value, "Day"), "Year") в строке, связанной с группой Day, вернет значение продаж за тот же день и месяц для объема предыдущего года.

Если выражение содержит агрегатную функцию, которая задает область, отличную от области по умолчанию, параметр области для предыдущей функции должен быть содержащей область для области, указанной в вызове статистической функции - другими словами, текстовые поля должны находиться в дочерняя область действия "Quarter1". Хотя я не знаю, какую область вы используете, из вашей формулировки похоже, что вы пытаетесь получить расчет из набора данных, который имеет значение за первый квартал, а не из области видимости группы? Если это так, вам не нужна функция Previous, вы можете просто рассчитать агрегат по всему набору данных "Quarter1" в функции Sum следующим образом:

=DateAdd("s", Sum(Fields!TalkTime.Value, "Quarter1") / Sum(Fields!EmployeesWorked.Value, "Quarter1"), "00:00:00"))
...