SSRS:使用多值参数重复表

时间:2017-09-29 09:14:20

标签: reporting-services

我正在努力解决报道服务方面的问题,但在此找不到任何在线帮助。

我为我的公司制作电话报告,为我们的客户显示统计数据。此报告的主要参数是:客户名称,日期,日期

每个客户端可以有多个呼叫队列(每个客户端的号码不同),因此我需要创建一个显示数字的统计表,并为每个呼叫队列重复一次。

我为从此查询中填充自身的队列创建了一个多值参数:

SELECT queue_id FROM customers WHERE customer_name = @Customer

子报告参数是:

date_from = [@date_from]
date_to = [@date_to]
queueid = =Split(join(Parameters!client_call_queues.Value,","),",")

问题出现了,当我显示报告预览时,我可以看到带有值的表,但是对所有队列求和,而不是分割。

如果我在Tablix上添加自定义分组,则会返回错误的计算结果。

为了更深入地了解详细信息,请在第一个显示所有队列数字的打印屏幕下方:

enter image description here

和我从子报表获得的表,没有自定义分组:

enter image description here

我尝试在子报告tablix中添加此自定义分组:

enter image description here

以下是该分组的结果:

enter image description here

以下用于填充子报告tablix的查询:

SELECT
@queueid,
ISNULL(q1.[Day],'TOTAL') AS [Day],
COUNT(*) AS [Calls In],
SUM(CASE WHEN q1.[Call Type] = 'Answered Within Threshold' THEN 1 ELSE 0 
END) + SUM(CASE WHEN q1.[Call Type] = 'Answered After Threshold' THEN 1 ELSE 
0 END) AS [Answered],
SUM(CASE WHEN q1.[Call Type] = 'Abandoned Within Threshold' THEN 1 ELSE 0 
END) AS [Abd. Within Threshold],
SUM(CASE WHEN q1.[Call Type] IN ('Abandoned Within Threshold') THEN 1 ELSE 0 
END)/CONVERT(DECIMAL(10,2),COUNT(*)) AS [Calls Abandoned Within Threshold 
Rate],
SUM(CASE WHEN q1.[Call Type] = 'Abandoned After Threshold' THEN 1 ELSE 0 
END) AS [Abd. After Threshold],
SUM(CASE WHEN q1.[Call Type] IN ('Abandoned After Threshold') THEN 1 ELSE 0 
END)/CONVERT(DECIMAL(10,2),COUNT(*)) AS [Calls Abandoned After Threshold 
Rate],
SUM(CASE WHEN q1.[Call Type] = 'Voicemail' THEN 1 ELSE 0 END) AS [Voice 
Mail]
FROM
(   
    SELECT
    CUS.[Customer],
    SUBSTRING(CONVERT(VARCHAR,ACD.[startdatetime],121),1,10) AS [Day],
    ACD.[sessionid],  
    ACD.[contactdisposition],
    ISNULL(ACD.[Squeuetime],0) AS [Squeuetime],
    CUS.[ans_speed_secs],
    CUS.[abd_tresh],
    ACD.[businesshours],
    ACD.[contacttype],
    ISNULL(ACD.[connecttime],0) AS [connecttime],
    ACD.[voicemail],
    CUS.[ans_speed_rate],
    ACD.[callednumber],
    CUS.[Active],
    ISNULL(ACD.[Stalktime], 0) AS [Stalktime],
    ISNULL(ACD.[Sholdtime], 0) AS [Sholdtime],
    CASE
    WHEN ACD.[contactdisposition] = 2 AND ISNULL(ACD.[Squeuetime],0) <= CUS.
    [ans_speed_secs] THEN 'Answered Within Threshold'
    WHEN ACD.[contactdisposition] = 2 AND ISNULL(ACD.[Squeuetime],0) > CUS.
    [ans_speed_secs] THEN 'Answered After Threshold'
    WHEN ACD.[contactdisposition] <> 2 AND ISNULL(ACD.[Squeuetime],0) <= 
    CUS.[abd_tresh] THEN 'Abandoned Within Threshold'
    WHEN ACD.[contactdisposition] <> 2 AND ISNULL(ACD.[Squeuetime],0) > CUS.
    [abd_tresh] THEN 'Abandoned After Threshold'
    WHEN ACD.[voicemail] = 'VoiceMail' THEN 'Voicemail'
    END AS [Call Type]
    FROM [ACD].[dbo].[UccxCallsQuery2] ACD
    LEFT OUTER JOIN [ACD].[dbo].[Customers] CUS ON ACD.[callednumber] = CUS.
    [Called_id]
    WHERE CUS.[ACDSelection] IN (@queueid)
    AND ACD.[businesshours] <> 'NBO' 
    AND ACD.[contacttype] = 1 
    AND CUS.[Active] = 1
    AND CONVERT(DATE,ACD.[startdatetime]) BETWEEN @date_from AND @date_to
) q1 GROUP BY q1.[Day] WITH ROLLUP

我想这只是一件简单的事情,但可以发现它。

提前感谢您提供任何帮助!

0 个答案:

没有答案