我目前遇到一个问题,希望您能帮助我。我需要将数据汇总为每天每15分钟产生一次的格式。这是我首先使用的代码:
SELECT TOP 1000
agi.date_time as [Date],
AGI.AGENT_URN as AgentID,
asgi.skillgroup_urn as SkillID,
count(distinct(asgi.skillgroup_urn)) as [# of skills],
sum(asgi.CALLS_HANDLED) as [Calls Handled In],
sum(agi.LOGGED_ON_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Logged On Time (Per Agent)],
sum(agi.NOT_READY_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Not Ready Time (Per Agent)],
sum(agi.AVAIL_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Available Time (Per Agent)]
FROM AGENT_INTERVAL AGI
LEFT OUTER JOIN AGENT_SKILLGROUP_INTERVAL ASGI ON AGI.AGENT_URN = ASGI.AGENT_URN AND AGI.DATE_TIME = ASGI.DATE_TIME
WHERE 1=1
AND AGI.DATE_TIME between '2018-07-26 16:15:00 ' and '2018-07-26 16:45:59'
GROUP BY
AGI.DATE_TIME,
AGI.AGENT_URN,
asgi.skillgroup_urn
ORDER BY 2
结果如下:
如您所见,每个座席的“登录时间”,“未就绪时间”和“可用时间”值都在重复,因为这与AgentID有关。这种观点没有说实话。代理在17:45间隔中记录了900秒,然后在18:00间隔中再次记录了900秒。如果我现在将其加总,它将给我9,000秒的结果,这对于“登录时间”是不正确的。未就绪时间和可用时间也不正确。
如果我从select语句中删除了SkillID,则我的值会正确反映
Without skills being represented
这次,我得到900秒的17:45秒和900秒的18:00,这是正确的。
我遇到问题的地方将其回滚到一整天。
SELECT TOP 1000
cast(agi.date_time as date) as [Date],
AGI.AGENT_URN as AgentID,
asgi.skillgroup_urn as SkillID,
count(distinct(asgi.skillgroup_urn)) as [# of skills],
sum(asgi.CALLS_HANDLED) as [Calls Handled In],
sum(agi.LOGGED_ON_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Logged On Time (Per Agent)],
sum(agi.NOT_READY_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Not Ready Time (Per Agent)],
sum(agi.AVAIL_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Available Time (Per Agent)]
FROM AGENT_INTERVAL AGI
LEFT OUTER JOIN AGENT_SKILLGROUP_INTERVAL ASGI ON AGI.AGENT_URN = ASGI.AGENT_URN AND AGI.DATE_TIME = ASGI.DATE_TIME
WHERE 1=1
AND AGI.DATE_TIME between '2018-07-26 16:15:00 ' and '2018-07-26 16:45:59'
GROUP BY
cast(AGI.DATE_TIME as date),
AGI.AGENT_URN,
ORDER BY 2
现在我的登录时间为1500秒,比实际时间少300秒。
如何解决此问题,以便当我将数据汇总到一天时,我可以在报告中获得准确的登录时间,而不是准备时间和可用时间?
感谢您的帮助!
答案 0 :(得分:0)
对于1个呼叫座席,您可以将座席状态划分为:可用,待命,呼叫后工作(未就绪),辅助(可用家伙喜欢用于不同中断类型的许多不同辅助代码),离线,其他。
您实际上不需要脱机处理,但是您必须与众不同并适当地处理其他时间。您可以查阅Avaya呼叫管理系统(Avaya CMS)指南以获取适当的说明,但是总之,这是座席为其他技能工作或处理直接呼叫的时间-无论是在通话中还是在通话后工作。因此,只有一项技能可以同时具有通话时间或ACW时间,而这两项优先于可用技能或其他技能。
如果要处理多个呼叫(聊天)处理系统,则会遇到麻烦-这样,您将始终处理相交的呼叫。仍然可以按时间间隔划分时间,呼叫/ ACW时间优先级高于可用时间和辅助时间。
所有技能的基本可用时间和辅助时间应保持同步,但如果不行,则要根据您的判断-这里的每个技能报告要比每个代理商更容易。
对于提到的Avaya CMS,有15分钟的摘要,我相信-是在DB外部完成的,然后将间隔数据存储在运行时表中,最后一天将间隔数据汇总为每日数据。同样,每周和每月的数据也将得到处理。
我建议您阅读CMS文档-它已定义了可使用数十年的数据库结构,因此它们大多抓住了所有细微差别。
作为一个旁注,在“我自己的”呼叫中心操作员控制台中,存在一个用于确定操作员状态历史记录的明确表,该表具有开始-停止时间和该间隔的一个确定状态。因此,汇总比合并不同的相交记录要容易一些。
答案 1 :(得分:0)
通过以以下方式修改代码来找到解决问题的方法。
select
AGI.*
,ROW_NUMBER() OVER (PARTITION BY DATE_TIME,AGENT_URN ORDER BY DATE_TIME) AS SEQNUM
from AGENT_SKILLGROUP_INTERVAL AGI
)
SELECT
CAST(AI.DATE_TIME AS DATE) [Date]
,SUM(AI.CALLS_HANDLED) AS [Calls Handled In]
,SUM(AI.HANDLED_CALLS_TALK_TIME)/nullif(sum(AI.calls_handled),0) as [Avg. Talk Time In]
,SUM(AI.INCOMING_CALLS_ON_HOLD_TIME)/nullif(sum(AI.calls_handled),0) as [Avg. Hold Time In]
,SUM(AI.HANDLED_CALLS_TIME-(AI.HANDLED_CALLS_TALK_TIME + AI.INCOMING_CALLS_ON_HOLD_TIME))/nullif(sum(AI.calls_handled),0) as [Avg. Wrap Time In]
,SUM(AI.[HANDLED_CALLS_TIME])/nullif(sum(AI.calls_handled),0) as [Avg. Handle Time In]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.LOGGED_ON_TIME END) AS [Logged On Time (Per Agent)]
,SUM(ai.HANDLED_CALLS_TALK_TIME) as [Talk Time In]
,SUM(ai.HANDLED_CALLS_TALK_TIME + ai.INCOMING_CALLS_ON_HOLD_TIME) as [Phone Time In]
,SUM(ai.[INCOMING_CALLS_ON_HOLD_TIME]) as [Hold Time In]
,SUM(ai.HANDLED_CALLS_TIME-(ai.HANDLED_CALLS_TALK_TIME + ai.INCOMING_CALLS_ON_HOLD_TIME) ) AS [Wrap Time In]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.NOT_READY_TIME END) as [Not Ready Time (Per Agent)]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.AVAIL_TIME END) as [Available Time (Per Agent)]
FROM Agent_Interval AI
group by
CAST(AI.DATE_TIME AS DATE)
通过对每个时间间隔进行排名,我现在可以准确地报告我的logging_on_time,avail_time和not_ready_time。