public.vwinteractionlegdatav2

public.vwinteractionlegdatav2

Description

Performance-optimized sibling of vwInteractionLegData (single pass over detailedinteractiondata, predicate pushdown friendly). Same output plus conversationstartdate (UTC) appended; filter on it for partition pruning. No built-in row order. Abandoned interactions produce no row.

Table Definition
CREATE VIEW vwinteractionlegdatav2 AS (
 WITH seg AS (
         SELECT di.conversationid,
            di.conversationstartdate,
            di.conversationstartdateltc,
            di.conversationenddateltc,
            di.originaldirection,
            di.mediatype,
            di.purpose,
            di.segmenttype,
            di.queueid,
            di.userid,
            di.segmentstartdateltc,
            di.segmenttime,
            di.ani,
            di.dnis,
            di.wrapupcode,
            di.disconnectiontype,
            di.ttalkcomplete,
            di.theldcomplete,
            di.tacw,
            di.tagentresponsetime,
            di.nconsulttransferred,
            di.nblindtransferred,
            di.tanswered,
            di.tuserresponsetime,
            di.nconsult,
            di.ntransferred,
            di.tactivecallback,
            di.tactivecallbackcomplete,
            di.divisionid,
            di.remotedisplayable,
            di.externaltag,
            di.recordingexists,
                CASE
                    WHEN ((di.purpose)::text = 'agent'::text) THEN (split_part((di.gencode)::text, '|'::text, 1))::integer
                    ELSE NULL::integer
                END AS gen1
           FROM detailedinteractiondata di
          WHERE (((di.purpose)::text = 'agent'::text) OR (((di.purpose)::text = 'acd'::text) AND ((di.segmenttype)::text = 'interact'::text)) OR (((di.purpose)::text = 'ivr'::text) AND ((di.segmenttype)::text = 'ivr'::text)))
        ), enriched AS (
         SELECT seg.conversationid,
            seg.conversationstartdate,
            seg.conversationstartdateltc,
            seg.conversationenddateltc,
            seg.originaldirection,
            seg.mediatype,
            seg.purpose,
            seg.segmenttype,
            seg.queueid,
            seg.userid,
            seg.segmentstartdateltc,
            seg.segmenttime,
            seg.ani,
            seg.dnis,
            seg.wrapupcode,
            seg.disconnectiontype,
            seg.ttalkcomplete,
            seg.theldcomplete,
            seg.tacw,
            seg.tagentresponsetime,
            seg.nconsulttransferred,
            seg.nblindtransferred,
            seg.tanswered,
            seg.tuserresponsetime,
            seg.nconsult,
            seg.ntransferred,
            seg.tactivecallback,
            seg.tactivecallbackcomplete,
            seg.divisionid,
            seg.remotedisplayable,
            seg.externaltag,
            seg.recordingexists,
            seg.gen1,
            sum(
                CASE
                    WHEN (((seg.purpose)::text = 'acd'::text) AND ((seg.segmenttype)::text = 'interact'::text) AND (seg.queueid IS NOT NULL) AND (seg.conversationid IS NOT NULL)) THEN seg.segmenttime
                    ELSE NULL::numeric
                END) OVER (PARTITION BY seg.conversationid, seg.conversationstartdate, seg.conversationstartdateltc, seg.queueid) AS queue_time,
            sum(
                CASE
                    WHEN (((seg.purpose)::text = 'ivr'::text) AND ((seg.segmenttype)::text = 'ivr'::text) AND (seg.conversationid IS NOT NULL)) THEN seg.segmenttime
                    ELSE NULL::numeric
                END) OVER (PARTITION BY seg.conversationid, seg.conversationstartdate, seg.conversationstartdateltc) AS ivr_time
           FROM seg
        ), agent_seg AS (
         SELECT enriched.conversationid,
            enriched.conversationstartdate,
            enriched.conversationstartdateltc,
            enriched.conversationenddateltc,
            enriched.originaldirection,
            enriched.mediatype,
            enriched.purpose,
            enriched.segmenttype,
            enriched.queueid,
            enriched.userid,
            enriched.segmentstartdateltc,
            enriched.segmenttime,
            enriched.ani,
            enriched.dnis,
            enriched.wrapupcode,
            enriched.disconnectiontype,
            enriched.ttalkcomplete,
            enriched.theldcomplete,
            enriched.tacw,
            enriched.tagentresponsetime,
            enriched.nconsulttransferred,
            enriched.nblindtransferred,
            enriched.tanswered,
            enriched.tuserresponsetime,
            enriched.nconsult,
            enriched.ntransferred,
            enriched.tactivecallback,
            enriched.tactivecallbackcomplete,
            enriched.divisionid,
            enriched.remotedisplayable,
            enriched.externaltag,
            enriched.recordingexists,
            enriched.gen1,
            enriched.queue_time,
            enriched.ivr_time,
            max(
                CASE
                    WHEN ((enriched.mediatype)::text = 'callback'::text) THEN 1
                    ELSE 0
                END) OVER (PARTITION BY enriched.conversationid, enriched.conversationstartdate, enriched.conversationstartdateltc, enriched.gen1) AS leg_has_callback
           FROM enriched
          WHERE ((enriched.purpose)::text = 'agent'::text)
        ), agent_legs AS (
         SELECT agent_seg.conversationid,
            agent_seg.conversationstartdate,
            agent_seg.conversationstartdateltc,
            agent_seg.gen1,
            max((agent_seg.queueid)::text) AS queueid,
            max((agent_seg.userid)::text) AS userid,
            max(agent_seg.conversationenddateltc) AS conversationenddateltc,
            max((agent_seg.originaldirection)::text) AS direction,
            max((agent_seg.mediatype)::text) AS mediatype,
            min(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'interact'::text) THEN agent_seg.segmentstartdateltc
                    ELSE NULL::timestamp without time zone
                END) AS interactionstartdateltc,
            sum(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'interact'::text) THEN agent_seg.segmenttime
                    ELSE (0)::numeric
                END) AS talk_time,
            sum(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'hold'::text) THEN agent_seg.segmenttime
                    ELSE (0)::numeric
                END) AS hold_time,
            sum(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'wrapup'::text) THEN agent_seg.segmenttime
                    ELSE (0)::numeric
                END) AS wrap_up_time,
            sum(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'alert'::text) THEN agent_seg.segmenttime
                    ELSE (0)::numeric
                END) AS alert_time,
            max((agent_seg.ani)::text) AS ani,
            max((agent_seg.dnis)::text) AS dnis,
            max((
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'wrapup'::text) THEN agent_seg.wrapupcode
                    ELSE NULL::character varying
                END)::text) AS wrapupcode,
            max((
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'interact'::text) THEN agent_seg.disconnectiontype
                    ELSE NULL::character varying
                END)::text) AS disconnectiontype,
            sum(COALESCE(agent_seg.ttalkcomplete, (0)::numeric)) AS ttalkcomplete,
            sum(COALESCE(agent_seg.theldcomplete, (0)::numeric)) AS theldcomplete,
            sum(COALESCE(agent_seg.tacw, (0)::numeric)) AS tacw,
            sum(COALESCE(agent_seg.tagentresponsetime, (0)::numeric)) AS tagentresponsetime,
            sum(COALESCE(agent_seg.nconsulttransferred, 0)) AS nconsulttransferred,
            sum(COALESCE(agent_seg.nblindtransferred, 0)) AS nblindtransferred,
            sum(COALESCE(agent_seg.tanswered, (0)::numeric)) AS tanswered,
            sum(COALESCE(agent_seg.tuserresponsetime, (0)::numeric)) AS tuserresponsetime,
            sum(COALESCE(agent_seg.nconsult, 0)) AS nconsult,
            sum(COALESCE(agent_seg.ntransferred, 0)) AS ntransferred,
            sum(COALESCE(agent_seg.tactivecallback, (0)::numeric)) AS tactivecallback,
            sum(COALESCE(agent_seg.tactivecallbackcomplete, (0)::numeric)) AS tactivecallbackcomplete,
            max((agent_seg.divisionid)::text) AS divisionid,
            max((agent_seg.remotedisplayable)::text) AS remotedisplayable,
            max((agent_seg.externaltag)::text) AS externaltag,
            max(
                CASE
                    WHEN (agent_seg.recordingexists = '1'::"bit") THEN 1
                    ELSE 0
                END) AS recordingexists,
            max(agent_seg.queue_time) AS queue_time,
            max(agent_seg.ivr_time) AS ivr_time
           FROM agent_seg
          WHERE ((agent_seg.leg_has_callback = 0) OR ((agent_seg.mediatype)::text = 'callback'::text))
          GROUP BY agent_seg.conversationid, agent_seg.conversationstartdate, agent_seg.conversationstartdateltc, agent_seg.gen1
         HAVING (sum(
                CASE
                    WHEN ((agent_seg.segmenttype)::text = 'interact'::text) THEN 1
                    ELSE 0
                END) > 0)
        ), named_legs AS (
         SELECT al.conversationid,
            al.conversationstartdate,
            al.conversationstartdateltc,
            al.gen1,
            al.queueid,
            al.userid,
            al.conversationenddateltc,
            al.direction,
            al.mediatype,
            al.interactionstartdateltc,
            al.talk_time,
            al.hold_time,
            al.wrap_up_time,
            al.alert_time,
            al.ani,
            al.dnis,
            al.wrapupcode,
            al.disconnectiontype,
            al.ttalkcomplete,
            al.theldcomplete,
            al.tacw,
            al.tagentresponsetime,
            al.nconsulttransferred,
            al.nblindtransferred,
            al.tanswered,
            al.tuserresponsetime,
            al.nconsult,
            al.ntransferred,
            al.tactivecallback,
            al.tactivecallbackcomplete,
            al.divisionid,
            al.remotedisplayable,
            al.externaltag,
            al.recordingexists,
            al.queue_time,
            al.ivr_time,
            qd.name AS queuename,
            ud.name AS agentname,
            wd.name AS wrapupname
           FROM (((agent_legs al
             LEFT JOIN queuedetails qd ON (((qd.id)::text = al.queueid)))
             LEFT JOIN vwuserdetail ud ON (((ud.id)::text = al.userid)))
             LEFT JOIN wrapupdetails wd ON (((wd.id)::text = al.wrapupcode)))
        ), legs_numbered AS (
         SELECT nl.conversationid,
            nl.conversationstartdate,
            nl.conversationstartdateltc,
            nl.gen1,
            nl.queueid,
            nl.userid,
            nl.conversationenddateltc,
            nl.direction,
            nl.mediatype,
            nl.interactionstartdateltc,
            nl.talk_time,
            nl.hold_time,
            nl.wrap_up_time,
            nl.alert_time,
            nl.ani,
            nl.dnis,
            nl.wrapupcode,
            nl.disconnectiontype,
            nl.ttalkcomplete,
            nl.theldcomplete,
            nl.tacw,
            nl.tagentresponsetime,
            nl.nconsulttransferred,
            nl.nblindtransferred,
            nl.tanswered,
            nl.tuserresponsetime,
            nl.nconsult,
            nl.ntransferred,
            nl.tactivecallback,
            nl.tactivecallbackcomplete,
            nl.divisionid,
            nl.remotedisplayable,
            nl.externaltag,
            nl.recordingexists,
            nl.queue_time,
            nl.ivr_time,
            nl.queuename,
            nl.agentname,
            nl.wrapupname,
            row_number() OVER (PARTITION BY nl.conversationid, nl.conversationstartdate, nl.conversationstartdateltc ORDER BY nl.interactionstartdateltc, nl.gen1) AS conversationleg,
            lead(nl.queuename) OVER (PARTITION BY nl.conversationid, nl.conversationstartdate, nl.conversationstartdateltc ORDER BY nl.interactionstartdateltc, nl.gen1) AS transferred_to_queue,
            lag(nl.queuename) OVER (PARTITION BY nl.conversationid, nl.conversationstartdate, nl.conversationstartdateltc ORDER BY nl.interactionstartdateltc, nl.gen1) AS transferred_from_queue
           FROM named_legs nl
        )
 SELECT l.conversationid,
    (((l.conversationid)::text || '_'::text) || l.conversationleg) AS interactionid,
    l.conversationstartdateltc,
    l.conversationenddateltc,
    l.direction,
    l.mediatype,
    l.conversationleg,
    l.interactionstartdateltc,
    l.queuename,
    l.agentname,
        CASE
            WHEN (l.conversationleg = 1) THEN COALESCE(l.ivr_time, (0)::numeric)
            ELSE (0)::numeric
        END AS ivr_time,
    COALESCE(l.queue_time, (0)::numeric) AS queue_time,
    l.talk_time,
    l.hold_time,
    l.wrap_up_time,
        CASE
            WHEN (l.transferred_to_queue IS NOT NULL) THEN 1
            ELSE 0
        END AS transferred_flag,
    l.transferred_to_queue,
    l.transferred_from_queue,
    l.ani,
    l.dnis,
    l.alert_time,
    ((l.talk_time + l.hold_time) + l.wrap_up_time) AS handle_time,
    l.wrapupcode,
    l.wrapupname,
    l.disconnectiontype,
    l.ttalkcomplete,
    l.theldcomplete,
    l.tacw,
    l.tagentresponsetime,
    l.nconsulttransferred,
    l.nblindtransferred,
    l.queueid,
    l.userid,
    l.divisionid,
    l.remotedisplayable,
    l.externaltag,
    l.recordingexists,
    l.tanswered,
    l.tuserresponsetime,
    l.nconsult,
    l.ntransferred,
    l.tactivecallback,
    l.tactivecallbackcomplete,
    l.conversationstartdate
   FROM legs_numbered l
)

Columns

Name Type Default Nullable Children Parents Comment
conversationid varchar(50) true Conversation GUID
interactionid text true Leg key: conversationid plus leg number
conversationstartdateltc timestamp without time zone true Conversation Start Date (LTC)
conversationenddateltc timestamp without time zone true Conversation End Date (LTC)
direction text true Conversation Original Direction
mediatype text true Interaction Media Type
conversationleg bigint true Answered leg sequence within the conversation (1..N)
interactionstartdateltc timestamp without time zone true Leg start: first agent interact segment (LTC)
queuename varchar(255) true Queue Name handling this leg
agentname varchar(200) true Agent Name handling this leg
ivr_time numeric true IVR Time in seconds, conversation level, reported on leg 1 only
queue_time numeric true Queue wait time in seconds (ASA) before this leg was answered
talk_time numeric true Talk Time in seconds (sum of interact segment durations)
hold_time numeric true Hold Time in seconds (sum of hold segment durations)
wrap_up_time numeric true After Call Work time in seconds (sum of wrapup segment durations)
transferred_flag integer true Transferred indicator: 1 when a later leg exists, else 0
transferred_to_queue varchar true Queue this leg was transferred to (next leg queue)
transferred_from_queue varchar true Queue this leg was transferred from (previous leg queue)
ani text true Conversation ANI (originating number/address)
dnis text true Conversation DNIS (dialled number/address)
alert_time numeric true Ring/alert time in seconds for this leg (sum of alert segment durations)
handle_time numeric true Handle time in seconds: talk_time + hold_time + wrap_up_time
wrapupcode text true Wrap-up code GUID from the leg wrapup segment
wrapupname varchar(255) true Wrap-up code name resolved from the leg wrapup code
disconnectiontype text true Disconnect type of the leg interact segment (peer, client, transfer, endpoint)
ttalkcomplete numeric true Genesys tTalkComplete metric summed for this leg (seconds, cumulative talk)
theldcomplete numeric true Genesys tHeldComplete metric summed for this leg (seconds, completed holds)
tacw numeric true Genesys tAcw metric summed for this leg (seconds of after call work)
tagentresponsetime numeric true Genesys tAgentResponseTime metric summed for this leg (seconds, async media)
nconsulttransferred bigint true Consult transfer count on this leg
nblindtransferred bigint true Blind transfer count on this leg
queueid text true Queue GUID handling this leg
userid text true Agent GUID handling this leg
divisionid text true Division GUID of the leg segments
remotedisplayable text true Remote party display name/number
externaltag text true External tag on the conversation
recordingexists integer true 1 when any segment of this leg has a recording, else 0
tanswered numeric true Genesys tAnswered metric summed for this leg (seconds to answer)
tuserresponsetime numeric true Genesys tUserResponseTime metric summed for this leg (seconds, async media, customer side)
nconsult bigint true Consult count on this leg
ntransferred bigint true Transfer count on this leg (all transfer types)
tactivecallback numeric true Genesys tActiveCallback metric summed for this leg (seconds)
tactivecallbackcomplete numeric true Genesys tActiveCallbackComplete metric summed for this leg (seconds)
conversationstartdate timestamp without time zone true Conversation Start Date (UTC); partition key of the source table, filter on this column for partition pruning

Referenced Tables

Name Columns Comment Type
public.detailedinteractiondata 147 Conversation Detailed Data BASE TABLE
enriched 0
agent_seg 0
agent_legs 0
public.queuedetails 25 Queue Lookup data BASE TABLE
public.vwuserdetail 18 User details with manager and division context VIEW
public.wrapupdetails 3 Wrap Up Code Details Lookup Up Data BASE TABLE
named_legs 0
legs_numbered 0

    • Related Articles

    • public.evalquestiondata

      Columns Name Type Default Nullable Children Parents Comment keyid varchar(50) false evaluationid varchar(50) false evaluationformid varchar(50) false questiongroupid varchar(50) true questionid varchar(50) true answerid varchar(50) true score ...
    • public.participantattributesdynamic

      Columns Name Type Default Nullable Children Parents Comment keyid varchar(50) false conversationid varchar(50) false conversationstartdate timestamp without time zone false conversationstartdateltc timestamp without time zone true conversationenddate ...
    • public.hoursblockdata

      Columns Name Type Default Nullable Children Parents Comment keyid varchar(200) false userid varchar(50) true startdate timestamp without time zone true startdateltc timestamp without time zone true enddate timestamp without time zone true enddateltc ...
    • public.userpresencedetaileddata

      Description User Presence Detailed Data Columns Name Type Default Nullable Children Parents Comment keyid varchar(255) false Primary Key userid varchar(50) true Agent GUID starttime timestamp without time zone false Start Time (UTC) starttimeltc ...
    • public.userinteractionpresencedetaileddata

      Columns Name Type Default Nullable Children Parents Comment keyid varchar(255) false userid varchar(50) true starttime timestamp without time zone false starttimeltc timestamp without time zone true endtime timestamp without time zone true endtimeltc ...