【发布时间】:2017-03-24 18:16:35
【问题描述】:
我使用 Visual Studio 制作了一份报告来计算我们中心的代理统计数据。报告中有用于选择报告日期的参数,以及用于从报告统计信息中选择要排除的代理的参数。
表中的数据有登录次数和注销次数。我做了一个datediff,以秒为单位获取总登录时间。然后我将所有座席的秒数相加,得出当天的总班次(以秒为单位)。
我创建了一个将秒数转换为 hh:mm:ss 的函数。
问题:
无论我从下拉列表中选择哪个代理,我的总轮班时间都保持不变。
我创建的函数:
CREATE FUNCTION [dbo].[UDF_SecondsToHHMMSS_VarChar](@Seconds int) RETURNS varchar(20) AS
BEGIN
RETURN (
SELECT CONVERT(VARCHAR(20), @Seconds / 3600) + ':'
+ RIGHT('00' + CONVERT(VARCHAR(2), (@Seconds % 3600) / 60) ,2) + ':'
+ RIGHT('00' + CONVERT(VARCHAR(2), @Seconds%60), 2) AS [HMS]
)
END
GO
作为主数据集的一部分进行查询:
,(SELECT [UDF_SecondsToHHMMSS_VarChar](SUM (DATEDIFF(second, AgentLoginTime, AgentLogoutTime)))
FROM [AgentStats]
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, MidnightStartDate)) = CAST(@S AS DATETIME)
AND (AgentID NOT IN (@AgentName) OR ISNULL(AgentID,'') = '')
)[Actual Shift Hrs]
-- I used a GROUP BY later to calculate the SUM
我创建了另一个数据集以从统计数据中提取代理名称以排除。当没有要排除的代理时,我使用Union 添加一个虚拟行(我将其设置为默认值)。
数据集是:
SELECT DISTINCT AgentID, AgentFirstName + ' ' + AgentLastName [AgentName]
FROM AgentStats
WHERE MidnightStartDate >= dateadd(day, -60, getdate())
AND MidnightStartDate < getdate()
AND AgentID NOT IN ('1067', '1050', '1150', '1052', '1161', '1158', '1063', '1173', '1101', '1128', '1165') -- These agents permanently excluded
UNION
SELECT '100', 'No Agents' -- This is default if there are no agents to select from drop-down
ORDER BY [AgentName];
我已经设置了参数来选择报告的日期,并设置了另一个参数来选择要从多项选择下拉列表中排除的代理。
对于 AgentName 参数,我选择了相关数据集,并选择 AgentID 作为 Value 字段,AgentName 作为 Label 字段。
我不确定主查询为什么没有从 AgentName 参数中选择 AgentID。
我做错了什么?
编辑 1:
我的 AgentName 数据集作为查询单独运行时会给出以下结果。 (见附件示例。忽略名人姓名)
我的意图是主数据集应该从 AgentID 列中获取 ID,将它们排列在逗号分隔的字符串中,并将它们排除在总轮班时间之外。
编辑 2:
我想我修好了。我将做一些测试来检查结果。我将主数据集中的代码更改为:
AND (AgentID NOT IN (@AgentName,'1067', '1050', '1150', '1052', '1161', '1158', '1063', '1173', '1101', '1128', '1165') OR ISNULL(AgentID,'') = '')
【问题讨论】:
-
你能把整个查询贴出来吗....试图把它们拼凑在一起是非常令人困惑的。
-
AND (AgentID NOT IN (@AgentName) or... 这部分几乎肯定是错误的。除非@AgentName 实际上是 AgentID 并且是逗号分隔和引用的列表。传递的实际值是什么进入这个参数?
-
他正在为
@AgentName值字段解析AgentID -
是的。 AgentID 将用逗号分隔并进入@AgentName。例如;不在('1120'、'1121'、'1122')
标签: sql-server reporting-services ssrs-2008