Какие выражения следует использовать в отчете "Месяц за месяцем"? (SSRS)

У меня есть отчет, который настроен, как показано ниже. Я использую группы строк дня месяца (которые я намерен сделать невидимыми в окончательном черновике), чтобы сравнить первое число этого месяца с первым числом прошлого месяца и так далее.

введите здесь описание изображения

Когда я запускаю, это выглядит так

введите здесь описание изображения

Что идеально. Однако мне нужно заполнять пустую строку каждый день нижней строкой за вычетом верхней строки, чтобы получать изменения от месяца к месяцу, и я не знаю, как этого добиться и возможно ли это вообще. Я предполагаю, что, если это возможно, это будет с использованием выражений, но отличных от простых в этом отчете.

например, отвеченные вызовы% = Fields! Calls_Ansarded.Value / Fields! Calls_Offered.Value

Я немного не в себе.

Возможно, эту проблему лучше всего решить на уровне SQL, а не на уровне SSRS. Если это полезно, я использую следующий SQL-запрос.

SELECT
CONVERT(DATE,FORMAT([Start Time],'dd/MM/yyyy'),103) AS [Date]
,[Client Name]
,[Account]
,SUM(IIF([Type] in ('Normal operator call','Caller rang off','Caller  rang off during divert','No suitable operator logged on'),1,0)) AS [Calls Offered]
,SUM(IIF([Type] in ('Normal operator call'),1,0)) AS [Calls Answered]
,SUM(IIF([Type] in ('Caller rang off','Caller rang off during  divert','No suitable operator logged on'),1,0)) AS [Ring Offs]
,SUM(IIF([Ring (secs)] <= 20 AND [Type] in ('Normal operator  call'),1,0)) AS [Answered in 20 Secs]
,SUM(IIF([Ring (secs)] > 5 AND [Type] in ('Caller rang off','Caller  rang off during divert','No suitable operator logged on'),1,0)) AS [CRO After 5 Secs]
,AVG(IIF([Type] in ('Normal operator call'),[Ring (secs)],null)) AS 'Avg Time to Answer'
,AVG(IIF([Type] in ('Normal operator call'),[Connected (secs)],null))  AS 'Avg Call Time'
FROM InboundCallsView    
WHERE [Client Name] = (@Client) and [Start Time] >= DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))    
GROUP BY FORMAT([Start Time],'dd/MM/yyyy'),[client name],[account]    
ORDER BY [Client Name],[date]

person tomdemaine    schedule 23.06.2016    source источник
comment
Какие поля вы используете для группировки?   -  person alejandro zuleta    schedule 23.06.2016
comment
= День (Поля! Дата.Значение), т.е. номер дня, заданный моим полем [Дата]   -  person tomdemaine    schedule 23.06.2016


Ответы (1)


Вы можете выполнить SUM() с функцией IIF(), которая умножает меру * -1, если она удовлетворяет условию, которое поместило бы ее в верхнюю строку.

В псевдокоде это выглядело бы примерно так, используя в качестве примера [Звонки отвечены]:

SUM(IIF({This is the top row}, -1 * [Calls Answered], [Calls Answered]))

Я не знаю всех возможных параметров вашего отчета, поэтому я не знаю конкретно, как вы определите, будет ли строка наверху. Один из способов с результатами вашей выборки - это проверить, равен ли DATEDIFF в месяцах (между [Date] и GETDATE ()) нулем или нет.

person Tab Alleman    schedule 23.06.2016
comment
Извините, я не совсем понимаю этот ответ. Не могли бы вы подробнее остановиться или привести конкретный пример? - person tomdemaine; 23.06.2016
comment
Спасибо. Думаю, теперь я лучше понимаю идею. Это решение на уровне SQL или выражение в построителе отчетов? Исходя из синтаксиса, я предполагаю, что SQL. - person tomdemaine; 23.06.2016
comment
Нет, это должно быть выражение в отчете. Однако это может упростить задачу, если обработать логику этой верхней строки в SQL. Вы можете использовать SQL с использованием DATEDIFF для добавления дополнительного столбца, который равен 0 для верхней строки или 1 для нижней строки, а затем выражение построителя отчетов может использовать это для функции IIF (). - person Tab Alleman; 23.06.2016
comment
Итак, и прошу прощения за всю необходимую для этого руку. Я должен добавить эту строку в свой запрос iif ((DATEDIFF (m, convert (date, format ([Start Time], 'dd / MM / yyyy'), 103), GETDATE ())) = 0,0,1) как [Строка] и что-то вроде этого как выражение в отчете = СУММ (IIF (Fields! Row.Value, 0, -1 * [Звонки отвечены], [Звонки отвечены])) - person tomdemaine; 23.06.2016
comment
Это будет работать. Просто имейте в виду, что это значение будет 0 для текущего месяца (нижняя строка) и 1 для предыдущего месяца (вверху). Это не проблема, просто убедитесь, что вы правильно указали IIF () в своем отчете. - person Tab Alleman; 23.06.2016
comment
так правильно ли вышеприведенное выражение? Я действительно плохо разбираюсь в выражениях ssrs, все объекты - не то, к чему я привык. - person tomdemaine; 23.06.2016
comment
Что ж, вам нужно полностью квалифицировать [Отвеченные вызовы] со всеми полями! Calls_Ansarded.Value. - person Tab Alleman; 23.06.2016