Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Use AggQueuePerformance to report queue volume, abandonment, service levels, transfers, and handling time from preaggregated data.
The source is the Segment (msdyn_queueextension) entity. Each source record represents a queue segment, one queue interaction within a conversation.
A conversation that transfers across queues can produce multiple records. Incoming, engaged, and abandoned metrics therefore count queue segments, not distinct conversations.
The table is optimized for queue-level reporting on routing efficiency, service-level performance, and workload distribution.
Source tables
These sources combine segment activity, conversation context, and queue configuration for reporting on workload, responsiveness, service levels, transfers, customer feedback, and outcomes.
| Source table | Purpose |
|---|---|
FactQueueSegment |
Primary source table for queue-segment activity. Each record represents a queue leg within a conversation and contains queue-specific lifecycle, wait-time, handle-time, transfer, and engagement information. |
FactConversation |
Provides conversation-level attributes that aren't stored on queue segments, including channel, direction, conversation status, service representative business unit, sentiment, and survey values. These attributes are joined by ConversationId and denormalized into the aggregate table. |
DimQueue |
Provides queue configuration data used during aggregation, including service-level thresholds and short-abandon settings that determine SLA and abandonment classifications. |
How rows are created
ETL combines queue segments with matching dimension values into fixed 15-minute reporting intervals.
Group by
GROUP BY
DateTimeKey,
QueueId,
ChannelCode,
ConversationStatusCode,
BusinessUnitId,
ConversationDirectionCode,
SegmentStateCode,
SegmentState,
SegmentStatusCode,
SegmentStatus
Example
Assume three queue segments have the following values:
| Queue | Channel | Direction | Segment status | 15-minute interval |
|---|---|---|---|---|
| Support | Chat | Inbound | Completed | 09:00 |
| Support | Chat | Inbound | Completed | 09:00 |
| Support | Chat | Inbound | Completed | 09:00 |
The matching dimension values produce one aggregate row.
Example output:
TotalSegments = 3
EngagedSegments = 2
AbandonedSegments = 1
TotalHandleTimeInSeconds = 1240
TotalFirstWaitTimeInSeconds = 310
Aggregation reduces storage and improves dashboard and report performance while preserving analytical accuracy.
Dimension columns
Use these dimensions to group and filter queue performance by queue, channel, direction, conversation status, and segment lifecycle.
| Column | Type | Source | Source field or ETL logic | Description |
|---|---|---|---|---|
DateTimeKey |
BIGINT |
FactQueueSegment |
Derived from SegmentStartDateTime |
Identifies the 15-minute UTC reporting interval for the aggregated row. This column supports trend analysis, period comparisons, and time-based reporting. |
QueueId |
STRING |
FactQueueSegment |
QueueId |
Identifies the queue associated with the segment. This column is used to analyze workload, responsiveness, abandonment, and service-level performance across queues. |
ChannelCode |
INT |
FactConversation |
Joined through ConversationId |
Identifies the communication channel, such as chat, voice, SMS, or social messaging, enabling channel-based reporting and comparison. |
ConversationStatusCode |
INT |
FactConversation |
Joined through ConversationId |
Identifies the conversation status associated with the segment, allowing reports to analyze queue activity by conversation outcome and lifecycle stage. |
BusinessUnitId |
STRING |
FactConversation |
Joined through ConversationId |
Identifies the Dataverse business unit that owns the queue. Use this column for organizational reporting on queue-segment performance. |
ConversationDirectionCode |
INT |
FactConversation |
Joined through ConversationId |
Identifies whether the conversation was inbound or outbound, helping distinguish customer demand from proactive outreach activities. |
SegmentStateCode |
INT |
FactQueueSegment |
SegmentStateCode |
Stores the lifecycle state code of the queue segment. This value is used for filtering and lifecycle analysis. |
SegmentState |
STRING |
FactQueueSegment |
SegmentState |
Stores the human-readable lifecycle state label used in reports and filters. |
SegmentStatusCode |
INT |
FactQueueSegment |
SegmentStatusCode |
Identifies the detailed segment status reason and provides additional insight into queue-segment outcomes. |
SegmentStatus |
STRING |
FactQueueSegment |
SegmentStatus |
Displays the readable segment status label used in dashboard filters, reporting, and troubleshooting. |
Metric columns
Calculate engagement and abandonment rates, service levels, wait and handle times, and customer experience metrics from these counts and totals. The table doesn't store percentages or averages. The Queue segment metrics reference article provides metric definitions and DAX calculations.
Volume columns
Use these counts to assess queue demand, workload, engagement, abandonment, transfers, and service levels.
| Column | Type | Source | Source field or ETL logic | Description |
|---|---|---|---|---|
TotalSegments |
INT |
FactQueueSegment |
COUNT(*) |
Stores the total number of queue segments that entered the queue during the reporting interval. Provides the primary measure of queue workload and demand. |
EngagedSegments |
INT |
FactQueueSegment |
SUM(CASE IsEngaged = 1) |
Stores the number of queue segments associated with conversations accepted by a service representative. Indicates handled queue demand. |
AbandonedSegments |
INT |
FactQueueSegment |
SUM(CASE IsAbandoned = 1) |
Stores the number of queue segments that ended before a service representative accepted the interaction. Used to evaluate queue abandonment patterns. |
ShortAbandonedSegments |
INT |
FactQueueSegment |
SUM(CASE IsShortAbandoned = 1) |
Stores the number of segments abandoned within the configured short-abandon threshold. Helps distinguish immediate disconnects from longer queue waits. |
InSLASegments |
INT |
FactQueueSegment |
SUM(CASE IsInServiceLevel = 1) |
Stores the number of queue segments answered within the configured service-level target. Used as the basis for SLA reporting. |
TransferredInSegments |
INT |
FactQueueSegment |
SUM(CASE IsTransferredIn = 1) |
Stores the number of queue segments received from another queue. Helps identify transferred workload entering the queue. |
TransferredOutSegments |
INT |
FactQueueSegment |
SUM(CASE IsTransferredOut = 1) |
Stores the number of queue segments transferred to another queue. Helps identify queues that frequently reroute work. |
Duration and response columns
Use these cumulative values to measure customer waits, service representative effort, responsiveness, and interaction complexity. All durations are in seconds. Reports calculate averages at query time from the stored totals.
| Column | Type | Source field or ETL logic | Description |
|---|---|---|---|
TotalFirstWaitTimeInSeconds |
BIGINT |
SUM(FirstWaitTimeInSeconds) |
Stores cumulative customer wait time before a conversation is accepted by a service representative while in the queue. |
WaitTimeCount |
INT |
Count where FirstWaitTimeInSeconds isn't null and IsEngaged = 1 |
Stores the number of engaged segments that contributed wait-time values. Used as a denominator when calculating average wait-time metrics. |
TotalHandleTimeInSeconds |
BIGINT |
SUM(HandleTimeInSeconds) |
Stores the cumulative handling effort associated with engaged queue segments. |
TotalTalkTimeInSeconds |
BIGINT |
SUM(TalkTimeInSeconds) |
Stores the cumulative voice conversation time between customers and service representatives. |
TotalHoldTimeInSeconds |
BIGINT |
SUM(HoldTimeInSeconds) |
Stores the cumulative time customers spent on hold while interacting with a service representative. |
TotalActiveTimeInSeconds |
BIGINT |
SUM(ActiveTimeInSeconds) |
Stores the total time interactions were actively progressing. |
TotalInactiveTimeInSeconds |
BIGINT |
SUM(InactiveTimeInSeconds) |
Stores the total inactive time associated with queue segments. |
TotalActiveWrapupTimeInSeconds |
BIGINT |
SUM(ActiveWrapupTimeInSeconds) |
Stores the cumulative active wrap-up effort performed after interactions are completed. |
TotalResponseTimeInSeconds |
DOUBLE |
SUM(TotalResponseTimeInSeconds) |
Stores cumulative response time across all message exchanges associated with queue segments. |
MessageBlockCount |
INT |
SUM(MessageBlockCount) |
Stores the total number of message-exchange blocks used to calculate response-time metrics. |
TotalFirstResponseTimeInSeconds |
DOUBLE |
SUM(FirstResponseTimeInSeconds) |
Stores cumulative time between the customer's first message and the service representative's first response. |
FirstResponseTimeCount |
INT |
Count where FirstResponseTimeInSeconds isn't null |
Stores the number of segments that contributed first-response-time values. |
TotalFirstResponseTimeAfterAcceptanceInSeconds |
DOUBLE |
SUM(FirstResponseTimeAfterAcceptanceInSeconds) |
Stores cumulative time between service representative acceptance and the first response sent after acceptance. |
FirstResponseTimeAfterAcceptanceCount |
INT |
Count where FirstResponseTimeAfterAcceptanceInSeconds isn't null |
Stores the number of segments that contributed first-response-after-acceptance values. |
Quality columns
Survey values join to queue segments through ConversationId. A conversation can move through multiple queues, so the same customer feedback can contribute to multiple segments.
| Column | Type | Source field or ETL logic | Description |
|---|---|---|---|
Survey_TotalCSATScore |
DOUBLE |
SUM(Survey_CSATScore) through ConversationId |
Stores the cumulative customer satisfaction (CSAT) score associated with queue segments. |
Survey_CSATResponseCount |
INT |
Count where Survey_CSATScore isn't null |
Stores the number of customer satisfaction survey responses represented in the aggregated row. |
Survey_TotalNPSScore |
DOUBLE |
SUM(Survey_NPSScore) through ConversationId |
Stores the cumulative Net Promoter Score (NPS) associated with queue segments. |
Survey_NPSResponseCount |
INT |
Count where Survey_NPSScore isn't null |
Stores the number of NPS survey responses represented in the aggregated row. |
Metadata columns
Use these system-generated columns for partitioning, refresh monitoring, data lineage, troubleshooting, and data quality checks, rather than typical business reporting.
| Column | Type | Source | Source field or ETL logic | Description |
|---|---|---|---|---|
_AggregationDate |
DATE |
FactQueueSegment |
Date portion of SegmentStartDateTime |
Stores the date associated with the aggregation interval. Used for partitioning and joins to DimDate. |
_SourceRecordCount |
INT |
ETL | COUNT(*) |
Stores the number of source segment records combined to create the aggregated row. |
_LastRefreshedDateTimeUtc |
TIMESTAMP |
ETL | current_timestamp() |
Stores the UTC timestamp of the most recent table refresh and supports refresh monitoring and data-quality validation. |