我应该在月环比变化报告中使用什么表达方式? (SSRS)
What expressions should I use in a Month on Month change report? (SSRS)
我有一份报告,其设置如下。我正在使用月份的行组(我打算在最终草案中使其不可见)来比较本月的第一天和上个月的第一天,依此类推。
当我运行它看起来像这样
太完美了。然而,我需要的是每天用底行减去顶行来填充空白行,以便获得每个月的变化,我不知道如何实现或者是否可能。我假设如果可能的话,它将通过使用表达式而不是本报告中的简单表达式
例如呼叫应答 % =Fields!Calls_Answered.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]
您可以使用 IIF()
函数执行 SUM()
,如果度量 * -1
满足将其置于第一行的条件,则乘以度量。
在伪代码中它看起来像这样,以 [Calls Answered] 为例:
SUM(IIF({This is the top row}, -1 * [Calls Answered], [Calls Answered]))
我不知道您报告的所有可能参数,所以我不知道您将如何确定某行是否位于顶部。样本结果的一种方法是检查月份中的 DATEDIFF(在 [Date] 和 GETDATE() 之间)是否为零。
我有一份报告,其设置如下。我正在使用月份的行组(我打算在最终草案中使其不可见)来比较本月的第一天和上个月的第一天,依此类推。
当我运行它看起来像这样
太完美了。然而,我需要的是每天用底行减去顶行来填充空白行,以便获得每个月的变化,我不知道如何实现或者是否可能。我假设如果可能的话,它将通过使用表达式而不是本报告中的简单表达式
例如呼叫应答 % =Fields!Calls_Answered.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]
您可以使用 IIF()
函数执行 SUM()
,如果度量 * -1
满足将其置于第一行的条件,则乘以度量。
在伪代码中它看起来像这样,以 [Calls Answered] 为例:
SUM(IIF({This is the top row}, -1 * [Calls Answered], [Calls Answered]))
我不知道您报告的所有可能参数,所以我不知道您将如何确定某行是否位于顶部。样本结果的一种方法是检查月份中的 DATEDIFF(在 [Date] 和 GETDATE() 之间)是否为零。