Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Referenzabfragen für den Connect Customer Data Lake
Dieses Thema enthält Athena-SQL-Abfragen (Trino Engine v3) zur Berechnung gängiger Connect Customer-Metriken aus Data Lake-Tabellen. Alle Abfragen verwenden Bezeichner in doppelten Anführungszeichen und gehen von einem Datenbanknamen aus. connect_datalake Passen Sie den Datenbanknamen an Ihre Glue-Katalogkonfiguration an.
Ersetzen Sie <YOUR_INSTANCE_ID> in jeder Abfrage durch Ihre Connect Customer-Instanz-ID.
Inhalt
Kennzahlen zu Kontakten und Warteschlangen
Abbruchrate
Definition: Prozentsatz der Kontakte, die vom Kunden getrennt wurden, während sie sich in der Warteschlange befanden. Rückrufe ausgeschlossen.
Quelltabelle: contact_statistic_record
SELECT "queue_id", CAST(SUM("is_abandoned") AS DOUBLE) / NULLIF(SUM("is_queued"), 0) * 100.0 AS "abandonment_rate_pct" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id" ORDER BY "abandonment_rate_pct" DESC;
Contacts abandoned (Abgebrochene Kontakte)
Definition: Anzahl der Kontakte, die der Kunde getrennt hat, während er in der Warteschlange wartete.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_abandoned") AS "contacts_abandoned" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Contacts abandoned in X seconds (Kontakte, die innerhalb von X Sekunden abgebrochen wurden)
Definition: Anzahl der Kontakte, die innerhalb von X Sekunden nach dem Einreihen in die Warteschlange aufgegeben wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM( CASE WHEN "is_abandoned" = 1 AND "queue_time_ms" <= 30000 THEN 1 ELSE 0 END ) AS "contacts_abandoned_in_30s" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Average queue abandon time (Durchschnittliche Warteschlangenabbruchzeit)
Definition: Durchschnittliche Zeit, in der Kontakte in der Warteschlange gewartet haben, bevor sie die Warteschlange verlassen haben.
Quelltabelle: contact_statistic_record
SELECT "queue_id", AVG("abandon_time_ms") / 1000.0 AS "avg_queue_abandon_time_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "is_abandoned" = 1 AND "abandon_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Durchschnittliche Warteschlangenantwortzeit
Definition: Durchschnittliche Zeit, in der Kontakte in der Warteschlange warteten, bevor sie von einem Agenten beantwortet wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", AVG("queue_answer_time_ms") / 1000.0 AS "avg_queue_answer_time_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "is_handled" = 1 AND "queue_answer_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Serviceniveau
Definition: Anzahl und Prozentsatz der Kontakte, die innerhalb von X Sekunden beantwortet wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM(CASE WHEN "is_handled" = 1 AND "queue_answer_time_ms" <= 20000 THEN 1 ELSE 0 END) AS "contacts_answered_in_20s", SUM("is_queued") AS "contacts_queued", CAST(SUM(CASE WHEN "is_handled" = 1 AND "queue_answer_time_ms" <= 20000 THEN 1 ELSE 0 END) AS DOUBLE) / NULLIF(SUM("is_queued"), 0) * 100.0 AS "service_level_20s_pct" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Contacts queued (Kontakte in Warteschlange)
Definition: Anzahl der Kontakte, die in eine Warteschlange gestellt wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_queued") AS "contacts_queued" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Contacts handled (Bearbeitete Kontakte)
Definition: Anzahl der Kontakte, die mit einem Agenten verbunden sind.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_handled") AS "contacts_handled" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Contacts transferred in (Weitergeleitete Kontakte ein)
Definition: Kontakte, die in eine Warteschlange übertragen wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_transferred_in") AS "contacts_transferred_in" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Contacts transferred out (Weitergeleitete Kontakte aus)
Definition: Kontakte, die aus einer Warteschlange übertragen wurden.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_transferred_out") AS "contacts_transferred_out", SUM("is_transferred_out_internal") AS "transferred_out_internal", SUM("is_transferred_out_external") AS "transferred_out_external" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Maximum queued time (Maximale Zeit in der Warteschlange)
Definition: Längste Zeit, die ein Kontakt in der Warteschlange verbracht hat.
Quelltabelle: contact_record
SELECT "queue_id", MAX("queue_duration_ms") / 1000.0 AS "max_queued_time_sec" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "queue_duration_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Durchschnittliche Kontaktdauer
Definition: Durchschnittliche Zeit von der Kontaktanbahnung bis zur Unterbrechung der Kontaktaufnahme.
Quelltabelle: contact_record
SELECT "queue_id", AVG( date_diff('millisecond', "initiation_timestamp", "disconnect_timestamp") ) / 1000.0 AS "avg_contact_duration_sec" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "initiation_timestamp" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Leistungskennzahlen für Agenten
Average handle time (Durchschnittliche Bearbeitungszeit)
Definition: Durchschnittliche Zeit von der Kontaktverbindung bis zum Abschluss des ACW-Vorgangs.
Quelltabelle: contact_statistic_record
SELECT "agent_id", AVG("handle_time_ms") / 1000.0 AS "avg_handle_time_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "is_handled" = 1 AND "handle_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "agent_id";
After contact work time (Kontaktnachbearbeitungszeit)
Definition: Gesamtzeit, die Agenten im ACW-Status verbracht haben.
Quelltabelle: contact_statistic_record
SELECT "agent_id", SUM("after_contact_work_time_ms") / 1000.0 AS "total_acw_time_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "after_contact_work_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "agent_id";
Customer hold time (Kundenhaltezeit)
Definition: Gesamtzeit, die Kunden nach der Verbindung mit dem Agenten in der Warteschleife verbracht haben.
Quelltabelle: contact_statistic_record
SELECT "agent_id", SUM("customer_hold_time_ms") / 1000.0 AS "total_hold_time_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "customer_hold_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "agent_id";
Agent idle time (Leerlaufzeit von Kundendienstmitarbeitern)
Definition: Zeit, die der Agent im Status Verfügbar verbracht hat, ohne Kontakte zu bearbeiten.
Quelltabelle: agent_statistic_record
SELECT "user_id" AS "agent_id", SUM("agent_idle_time") / 1000.0 AS "total_idle_time_sec" FROM "connect_datalake"."agent_statistic_record" WHERE "published_date" >= TIMESTAMP '2026-06-09 00:00:00' AND "published_date" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "user_id";
Occupancy (Auslastung)
Definition: Prozentsatz der Zeit, in der Agenten auf Kontakte aktiv waren, im Vergleich zu verfügbaren und aktiven Kontakten.
Quelltabelle: agent_statistic_record
SELECT "user_id" AS "agent_id", CAST(SUM("agent_on_contact_time") AS DOUBLE) / NULLIF(SUM("agent_on_contact_time") + SUM("agent_idle_time"), 0) * 100.0 AS "occupancy_pct" FROM "connect_datalake"."agent_statistic_record" WHERE "published_date" >= TIMESTAMP '2026-06-09 00:00:00' AND "published_date" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "user_id";
Kundendienstmitarbeiter non-response (Nichtbeantwortung des Kundendienstmitarbeiters)
Definition: Anzahl der Kontakte, die an den Agenten weitergeleitet, aber nicht beantwortet wurden.
Quelltabelle: agent_queue_statistic_record
SELECT "user_id" AS "agent_id", "queue_id", SUM("agent_non_response") AS "agent_non_response_count" FROM "connect_datalake"."agent_queue_statistic_record" WHERE "published_date" >= TIMESTAMP '2026-06-09 00:00:00' AND "published_date" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "user_id", "queue_id";
Agent answer rate (Antwortrate des Kundendienstmitarbeiters)
Definition: Prozentsatz der weitergeleiteten Kontakte, die vom Agenten beantwortet wurden.
Quelltabelle: agent_queue_statistic_record
SELECT "user_id" AS "agent_id", CAST(SUM("contacts_handled") AS DOUBLE) / NULLIF(SUM("contacts_offered"), 0) * 100.0 AS "agent_answer_rate_pct" FROM "connect_datalake"."agent_queue_statistic_record" WHERE "published_date" >= TIMESTAMP '2026-06-09 00:00:00' AND "published_date" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "user_id";
Online time (Online-Zeit)
Definition: Gesamtzeit, in der der Agent CCP auf einen anderen Status als Offline gesetzt wurde.
Quelltabelle: agent_statistic_record
SELECT "user_id" AS "agent_id", SUM("online_time") / 1000.0 AS "total_online_time_sec" FROM "connect_datalake"."agent_statistic_record" WHERE "published_date" >= TIMESTAMP '2026-06-09 00:00:00' AND "published_date" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "user_id";
Chat-Metriken
Durchschnittl. Zeit erste Reaktion Kundendienstmitarbeiter
Definition: Durchschnittliche Zeit, die ein Agent benötigt, um die erste Nachricht zu senden, nachdem er einen Chat-Kontakt erhalten hat.
Quelltabelle: contact_record
SELECT "queue_id", AVG("chat_contact_metrics_agent_first_response_time_ms") / 1000.0 AS "avg_agent_first_response_sec" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'CHAT' AND "chat_contact_metrics_agent_first_response_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Durchschnittl. Zeit Reaktion Kundendienstmitarbeiter
Definition: Durchschnittliche Zeit, die Agenten benötigen, um auf Kundennachrichten zu antworten.
Quelltabelle: contact_record
SELECT "queue_id", CAST(SUM("chat_agent_metrics_total_response_time_ms") AS DOUBLE) / NULLIF(SUM("chat_agent_metrics_num_responses"), 0) / 1000.0 AS "avg_agent_response_time_sec" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'CHAT' AND "chat_agent_metrics_total_response_time_ms" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Durchschnittliche Gesamtzahl der Nachrichten
Definition: Durchschnittliche Gesamtzahl der Nachrichten pro Chat-Kontakt.
Quelltabelle: contact_record
SELECT "queue_id", AVG(CAST("chat_contact_metrics_total_messages" AS DOUBLE)) AS "avg_total_messages" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'CHAT' AND "chat_contact_metrics_total_messages" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Abgebrochene Konversationen
Definition: Kontakte, bei denen der Chat vom Agenten oder Kunden abgebrochen wurde.
Quelltabelle: contact_record
SELECT "queue_id", COUNT(*) AS "conversations_abandoned" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'CHAT' AND ("chat_agent_metrics_conversation_abandon" = true OR "chat_customer_metrics_conversation_abandon" = true) AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id";
Metriken zur Konversationsanalyse
Durchschnittliche Gesprächszeit
Definition: Durchschnittliche kombinierte Gesprächszeit zwischen Agent und Kunde pro Sprachkontakt.
Quelltabelle: contact_lens_conversational_analytics
SELECT AVG("talk_time_total_ms") / 1000.0 AS "avg_talk_time_sec" FROM "connect_datalake"."contact_lens_conversational_analytics" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'VOICE' AND "instance_id" = '<YOUR_INSTANCE_ID>';
Durchschnittliche Nicht-Gesprächszeit
Definition: Durchschnittliche Wartezeit plus Ruhezeit pro Sprachkontakt.
Quelltabelle: contact_lens_conversational_analytics
SELECT AVG("non_talk_time_total_ms") / 1000.0 AS "avg_non_talk_time_sec" FROM "connect_datalake"."contact_lens_conversational_analytics" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'VOICE' AND "instance_id" = '<YOUR_INSTANCE_ID>';
Stimmungsbewertung
Definition: Gesamtstimmungswerte für Agenten und Kunden.
Quelltabelle: contact_lens_conversational_analytics
SELECT AVG("sentiment_overall_score_agent") AS "avg_agent_sentiment", AVG("sentiment_overall_score_customer") AS "avg_customer_sentiment", AVG("sentiment_end_score_agent") AS "avg_agent_end_sentiment", AVG("sentiment_end_score_customer") AS "avg_customer_end_sentiment" FROM "connect_datalake"."contact_lens_conversational_analytics" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>';
Durchschnittliche Kundendienstmitarbeiterunterbrechungen
Definition: Durchschnittliche Anzahl von Agentenunterbrechungen pro Kontakt.
Quelltabelle: contact_lens_conversational_analytics
SELECT AVG(CAST("interruptions_agent_count" AS DOUBLE)) AS "avg_agent_interruptions" FROM "connect_datalake"."contact_lens_conversational_analytics" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "channel" = 'VOICE' AND "instance_id" = '<YOUR_INSTANCE_ID>';
Kennzahlen für KI-Agenten
Erfolgsquote beim Aufrufen von AI-Agenten
Definition: Rate erfolgreicher AI-Agenten-Aufrufe.
Quelltabelle: ai_agent
SELECT "ai_agent_name", SUM(CASE WHEN "invocation_success" = true THEN 1 ELSE 0 END) AS "success_count", COUNT(*) AS "total_invocations", CAST(SUM(CASE WHEN "invocation_success" = true THEN 1 ELSE 0 END) AS DOUBLE) / NULLIF(COUNT(*), 0) * 100.0 AS "success_rate_pct" FROM "connect_datalake"."ai_agent" WHERE "creation_timestamp" >= CAST('2026-06-09' AS TIMESTAMP) * 1000 AND "instance_id" = '<YOUR_INSTANCE_ID>' AND "ai_agent_id" IS NOT NULL GROUP BY "ai_agent_name";
KI-Übergaberate
Definition: Rate der KI-Sitzungen, die an menschliche Agenten eskalierten.
Quelltabelle: ai_session
SELECT SUM(CASE WHEN "is_handed_off" = true THEN 1 ELSE 0 END) AS "ai_handoffs", COUNT(*) AS "ai_involved_contacts", CAST(SUM(CASE WHEN "is_handed_off" = true THEN 1 ELSE 0 END) AS DOUBLE) / NULLIF(COUNT(*), 0) * 100.0 AS "handoff_rate_pct" FROM "connect_datalake"."ai_session" WHERE "creation_timestamp" >= CAST('2026-06-09' AS TIMESTAMP) * 1000 AND "instance_id" = '<YOUR_INSTANCE_ID>' AND "ai_session_id" IS NOT NULL;
KI-Qualitätswerte
Definition: Durchschnittliche Werte für Erfolg, Treue und Vollständigkeit von Zielen.
Quelltabelle: ai_session
SELECT AVG("goal_success_rate") AS "avg_goal_success_rate", AVG("faithfulness_score") AS "avg_faithfulness_score", AVG("completeness_score") AS "avg_completeness_score" FROM "connect_datalake"."ai_session" WHERE "creation_timestamp" >= CAST('2026-06-09' AS TIMESTAMP) * 1000 AND "instance_id" = '<YOUR_INSTANCE_ID>' AND "goal_success_rate" IS NOT NULL;
Genauigkeit des KI-Tools
Definition: Genauigkeitswerte für die Verwendung, Auswahl und Nutzung von AI-Toolparametern.
Quelltabelle: ai_tool
SELECT "ai_tool_name", AVG("ai_tool_parameter_accuracy") AS "avg_parameter_accuracy", AVG("ai_tool_selection_accuracy") AS "avg_selection_accuracy", AVG("ai_tool_utilization_accuracy") AS "avg_use_accuracy" FROM "connect_datalake"."ai_tool" WHERE "creation_timestamp" >= CAST('2026-06-09' AS TIMESTAMP) * 1000 AND "instance_id" = '<YOUR_INSTANCE_ID>' AND "ai_tool_id" IS NOT NULL GROUP BY "ai_tool_name";
Flow-Metriken
Gestartete Flows
Definition: Anzahl der Flows, die mit der Ausführung begonnen haben.
Quelltabelle: contact_flow_events
SELECT "flow_resource_id", "flow_type", COUNT(*) AS "flows_started" FROM "connect_datalake"."contact_flow_events" WHERE "start_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "start_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "flow_resource_id", "flow_type";
Prozentsatz des Ergebnisses des Flusses
Definition: Prozentsatz jedes Flow-Ergebnistyps.
Quelltabelle: contact_flow_events
WITH flow_counts AS ( SELECT "flow_resource_id", "flow_outcome", COUNT(*) AS "outcome_count", SUM(COUNT(*)) OVER (PARTITION BY "flow_resource_id") AS "total_completed" FROM "connect_datalake"."contact_flow_events" WHERE "start_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "start_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "end_timestamp" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "flow_resource_id", "flow_outcome" ) SELECT "flow_resource_id", "flow_outcome", "outcome_count", CAST("outcome_count" AS DOUBLE) / "total_completed" * 100.0 AS "outcome_pct" FROM flow_counts ORDER BY "flow_resource_id", "outcome_pct" DESC;
Durchschnittliche Flow-Zeit
Definition: Durchschnittliche Dauer der Flow-Ausführungen.
Quelltabelle: contact_flow_events
SELECT "flow_resource_id", AVG( date_diff('millisecond', "start_timestamp", "end_timestamp") ) / 1000.0 AS "avg_flow_time_sec" FROM "connect_datalake"."contact_flow_events" WHERE "start_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "start_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "end_timestamp" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "flow_resource_id";
Bewertungsmetriken
Durchgeführte Evaluationen
Definition: Anzahl der eingereichten Bewertungen.
Quelltabelle: contact_evaluation_record
SELECT COUNT(DISTINCT "evaluation_id") AS "evaluations_performed" FROM "connect_datalake"."contact_evaluation_record" WHERE "evaluation_submitted_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "evaluation_submitted_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "item_type" = 'Form' AND "to_delete" = false AND ("evaluation_type" IS NULL OR "evaluation_type" != 'calibration') AND "instance_id" = '<YOUR_INSTANCE_ID>';
Durchschnittliches Bewertungsergebnis
Definition: Durchschnittliche Bewertungspunktzahl aller eingereichten Bewertungen.
Quelltabelle: contact_evaluation_record
SELECT AVG("score") AS "avg_evaluation_score_pct" FROM "connect_datalake"."contact_evaluation_record" WHERE "evaluation_submitted_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "evaluation_submitted_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "item_type" = 'Form' AND "to_delete" = false AND ("evaluation_type" IS NULL OR "evaluation_type" != 'calibration') AND "instance_id" = '<YOUR_INSTANCE_ID>';
Automatische Fehlschläge in Prozent
Definition: Prozentsatz der Bewertungen, die einen automatischen Fehlschlag ausgelöst haben.
Quelltabelle: contact_evaluation_record
SELECT CAST( COUNT(DISTINCT CASE WHEN "automatic_fail" = true THEN "evaluation_id" END) AS DOUBLE ) / NULLIF(COUNT(DISTINCT "evaluation_id"), 0) * 100.0 AS "automatic_fail_pct" FROM "connect_datalake"."contact_evaluation_record" WHERE "evaluation_submitted_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "evaluation_submitted_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "item_type" = 'Form' AND "to_delete" = false AND ("evaluation_type" IS NULL OR "evaluation_type" != 'calibration') AND "instance_id" = '<YOUR_INSTANCE_ID>';
Metriken für ausgehende Kampagnen
Kontakte zur Kampagne
Definition: Anzahl der ausgehenden Kampagnenkontakte.
Quelltabelle: contact_record
SELECT "campaign_id", COUNT(*) AS "campaign_contacts" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "campaign_id" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "campaign_id";
Mensch hat geantwortet
Definition: Ausgehende Kampagnenanrufe, die mit einem Live-Kunden verbunden sind.
Quelltabelle: contact_record
SELECT "campaign_id", COUNT(*) AS "human_answered" FROM "connect_datalake"."contact_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "campaign_id" IS NOT NULL AND "answering_machine_detection_status" = 'HUMAN_ANSWERED' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "campaign_id";
Kennzahlen zu Fällen
Erstellte Fälle
Definition: Gesamtzahl der in einem Zeitraum erstellten Fälle.
Quelltabelle: case_events
SELECT COUNT(DISTINCT "case_id") AS "cases_created" FROM "connect_datalake"."case_events" WHERE "event_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "event_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "event_type" = 'CASE.CREATED' AND "instance_id" = '<YOUR_INSTANCE_ID>';
Durchschnittliche Falllösungszeit
Definition: Durchschnittliche Zeit von der Erstellung des Falls bis zum Abschluss.
Quelltabelle: case_events
SELECT AVG( date_diff('hour', "created_timestamp", "last_closed_timestamp") ) AS "avg_resolution_time_hours" FROM "connect_datalake"."case_events" WHERE "last_closed_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "last_closed_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "created_timestamp" IS NOT NULL AND "instance_id" = '<YOUR_INSTANCE_ID>';
Bot-Metriken
Ergebnisse der Bot-Konversation
Definition: Prozentuale Aufschlüsselung der Ergebnisse von Bot-Konversationen.
Quelltabelle: bot_conversations
WITH bot_outcomes AS ( SELECT "bot_id", "bot_conversation_outcome", COUNT(*) AS "cnt", SUM(COUNT(*)) OVER (PARTITION BY "bot_id") AS "total" FROM "connect_datalake"."bot_conversations" WHERE "bot_conversation_start_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "bot_conversation_start_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "bot_id", "bot_conversation_outcome" ) SELECT "bot_id", "bot_conversation_outcome", "cnt", CAST("cnt" AS DOUBLE) / "total" * 100.0 AS "outcome_pct" FROM bot_outcomes;
Allgemeine Abfragemuster
Die folgenden Muster zeigen, wie mehrere Data Lake-Tabellen für umfassende Dashboards und Berichte kombiniert werden.
Dashboard mit täglicher Zusammenfassung
Definition: Umfassende Kennzahlen für die täglichen Warteschlangen, einschließlich des Serviceniveaus.
Quelltabelle: contact_statistic_record
SELECT "queue_id", SUM("is_queued") AS "contacts_queued", SUM("is_handled") AS "contacts_handled", SUM("is_abandoned") AS "contacts_abandoned", AVG(CASE WHEN "is_handled" = 1 THEN "queue_answer_time_ms" END) / 1000.0 AS "avg_answer_time_sec", AVG(CASE WHEN "is_handled" = 1 THEN "handle_time_ms" END) / 1000.0 AS "avg_handle_time_sec", CAST(SUM(CASE WHEN "is_handled" = 1 AND "queue_answer_time_ms" <= 20000 THEN 1 ELSE 0 END) AS DOUBLE) / NULLIF(SUM("is_queued"), 0) * 100.0 AS "sl_20s_pct" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY "queue_id" ORDER BY "contacts_queued" DESC;
Stündliche Trendanalyse
Definition: Stündliches Kontaktvolumen und Trends beim Serviceniveau.
Quelltabelle: contact_statistic_record
SELECT date_trunc('hour', "disconnect_timestamp") AS "hour", "queue_id", SUM("is_queued") AS "contacts_queued", SUM("is_handled") AS "contacts_handled", SUM("is_abandoned") AS "contacts_abandoned", CAST(SUM("is_abandoned") AS DOUBLE) / NULLIF(SUM("is_queued"), 0) * 100.0 AS "abandon_rate_pct", AVG(CASE WHEN "is_handled" = 1 THEN "handle_time_ms" END) / 1000.0 AS "aht_sec" FROM "connect_datalake"."contact_statistic_record" WHERE "disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND "disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND "instance_id" = '<YOUR_INSTANCE_ID>' GROUP BY date_trunc('hour', "disconnect_timestamp"), "queue_id" ORDER BY "hour";
Konversationsanalysen bereicherten Kontakte
Definition: Bereichern Sie Kontaktdatensätze mit Konversationsanalysen.
Quelltabelle: contact_record verknüpft mit contact_lens_conversational_analytics
SELECT cr."contact_id", cr."queue_id", cr."agent_id", cr."agent_interaction_duration_ms" / 1000.0 AS "interaction_sec", cl."talk_time_agent_ms" / 1000.0 AS "agent_talk_sec", cl."talk_time_customer_ms" / 1000.0 AS "customer_talk_sec", cl."sentiment_overall_score_agent", cl."sentiment_overall_score_customer" FROM "connect_datalake"."contact_record" cr JOIN "connect_datalake"."contact_lens_conversational_analytics" cl ON cr."contact_id" = cl."contact_id" AND cr."instance_id" = cl."instance_id" WHERE cr."disconnect_timestamp" >= TIMESTAMP '2026-06-09 00:00:00' AND cr."disconnect_timestamp" < TIMESTAMP '2026-06-10 00:00:00' AND cr."instance_id" = '<YOUR_INSTANCE_ID>' AND cr."channel" = 'VOICE';
Einhaltung des Zeitplans der Agenten (Aktivitätsebene)
Definition: Vergleicht den tatsächlichen Aktivitätsstatus (vonagent_statistic_record) eines Agenten mit seinen geplanten Schichtaktivitäten (aus Planungstabellen) für jedes Zeitintervall an einem Tag. Ermittelt für jedes Intervall die Einhaltung: IN (Agent hat getan, wofür er geplant war) oder OUT (er hat nicht getan).
Ausgabespalten: Agent, Datum, Beginn, Ende, Geplante Aktivität, Aktuelle Aktivität, Erfüllungsstatus, Dauer
Quelltabellen:
staff_shifts— Agentenwechsel im Tagesverlauf (neueste, nicht gelöschte Version)staff_shift_activities— Geplante Aktivitätsblöcke innerhalb jeder Schichtshift_activities— Suche nach Aktivitätsnamen (ordnet ARN einem für Menschen lesbaren Namen zu)agent_statistic_record— Tatsächlicher Agentenstatus pro Intervallusers— Agentenname und ARN-Auflösung
Adhärenzlogik (vereinfacht):
Geplante „Offen“ -Aktion — der Agent ist IN, wenn der Status Verfügbar, Bei Kontakt oder ACW lautet
Geplante „Pause“ — der Agent ist IN, wenn der Status Pause oder Mittagessen lautet
Geplante „Besprechung“ — Der Agent ist ANWESEND, wenn der Status Schulung oder Besprechung lautet
Andernfalls — RAUS
WITH latest_shift_versions AS ( -- Get the latest (non-deleted) shift version per shift_id SELECT shift_id, MAX(shift_version) AS max_version FROM "connect_datalake"."staff_shifts" WHERE is_deleted = false AND CAST(shift_start_timestamp AS DATE) = DATE '2026-06-10' -- SET REPORT DATE GROUP BY shift_id ), latest_shifts AS ( SELECT ss.shift_id, ss.agent_arn, ss.shift_start_timestamp, ss.shift_end_timestamp FROM "connect_datalake"."staff_shifts" ss INNER JOIN latest_shift_versions lsv ON ss.shift_id = lsv.shift_id AND ss.shift_version = lsv.max_version WHERE ss.is_deleted = false ), -- Get scheduled activity blocks with human-readable activity names scheduled_blocks AS ( SELECT ls.agent_arn, ssa.activity_start_timestamp, ssa.activity_end_timestamp, sa.shift_activity_name, CASE WHEN sa.shift_activity_name IN ('Work', 'Overtime') THEN 'Open' WHEN sa.shift_activity_name IN ('Break', 'Lunch') THEN 'Break' WHEN sa.shift_activity_name = 'Training' THEN 'Meeting' WHEN sa.shift_activity_name = 'PTO' THEN 'PTO' ELSE sa.shift_activity_name END AS scheduled_activity_label FROM "connect_datalake"."staff_shift_activities" ssa INNER JOIN latest_shifts ls ON ssa.shift_id = ls.shift_id INNER JOIN latest_shift_versions lsv ON ssa.shift_id = lsv.shift_id AND ssa.shift_version = lsv.max_version INNER JOIN "connect_datalake"."shift_activities" sa ON ssa.shift_activity_arn = sa.shift_activity_arn WHERE ssa.is_deleted = false ), -- Get actual agent state intervals for the day actual_states AS ( SELECT u.user_arn AS agent_arn, u.first_name, u.last_name, asr.interval_start_time, asr.interval_end_time, asr.agent_status_name, asr.online_time, asr.agent_idle_time, asr.agent_on_contact_time, asr.non_productive_time, CASE WHEN asr.agent_on_contact_time IS NOT NULL AND asr.agent_on_contact_time > 0 THEN 'On Inbound Call' WHEN asr.agent_idle_time IS NOT NULL AND asr.agent_idle_time > 0 THEN 'Available' WHEN asr.non_productive_time IS NOT NULL AND asr.non_productive_time > 0 THEN COALESCE(asr.agent_status_name, 'Non-Productive') WHEN asr.online_time IS NOT NULL AND asr.online_time > 0 THEN 'Available' ELSE COALESCE(asr.agent_status_name, 'Offline') END AS actual_activity_label FROM "connect_datalake"."agent_statistic_record" asr INNER JOIN "connect_datalake"."users" u ON asr.user_id = u.user_id WHERE asr.interval_start_time >= TIMESTAMP '2026-06-10 00:00:00' -- SET REPORT DATE (UTC) AND asr.interval_start_time < TIMESTAMP '2026-06-11 00:00:00' ), -- Join actual states with scheduled blocks activity_timeline AS ( SELECT act.first_name || ' ' || act.last_name AS agent_name, act.interval_start_time, act.interval_end_time, act.actual_activity_label, act.agent_status_name, COALESCE(sb.scheduled_activity_label, 'Open') AS scheduled_activity FROM actual_states act LEFT JOIN scheduled_blocks sb ON act.agent_arn = sb.agent_arn AND act.interval_start_time < sb.activity_end_timestamp AND act.interval_end_time > sb.activity_start_timestamp ) SELECT agent_name AS "AGENT", CAST(interval_start_time AS DATE) AS "DATE", DATE_FORMAT(interval_start_time, '%H:%i:%s') AS "BEGIN", DATE_FORMAT(interval_end_time, '%H:%i:%s') AS "END", scheduled_activity AS "SCHEDULED ACTIVITY", actual_activity_label AS "ACTUAL ACTIVITY", CASE WHEN scheduled_activity = 'Open' AND actual_activity_label IN ('Available', 'On Inbound Call', 'On Outbound Call', 'Call Ringing', 'Aftercall (ACW)') THEN 'IN' WHEN scheduled_activity = 'Break' AND agent_status_name IN ('Break', 'Lunch') THEN 'IN' WHEN scheduled_activity = 'Meeting' AND agent_status_name IN ('Training', 'Meeting') THEN 'IN' ELSE 'OUT' END AS "ADHERENCE STATE", CAST(DATE_DIFF('second', interval_start_time, interval_end_time) / 3600 AS VARCHAR) || ':' || LPAD(CAST((DATE_DIFF('second', interval_start_time, interval_end_time) % 3600) / 60 AS VARCHAR), 2, '0') || ':' || LPAD(CAST(DATE_DIFF('second', interval_start_time, interval_end_time) % 60 AS VARCHAR), 2, '0') AS "DURATION" FROM activity_timeline ORDER BY interval_start_time ASC;
Bewährte Methoden
Partitionsbereinigung — Schließen Sie immer Partitionsfilter (
disconnect_timestamppublished_date, odercreation_timestamp) ein, um die Scankosten zu minimieren.Deduplizierung — Connect Customer übermittelt Datensätze mindestens einmal. Wird für Primärschlüssel verwendet
DISTINCT, wenn genaue Zählungen erforderlich sind.Zeitzonen — Alle Zeitstempel sind in UTC angegeben.
AT TIME ZONEBeantragen Sie lokale Berichterstattung.Millisekunden — Die meisten Dauerfelder werden in Millisekunden gespeichert. Dividiere für Sekunden durch 1000,0.
Instanz-ID-Filter — In Umgebungen mit mehreren Instanzen immer nach
instance_iddem Filter filtern.Real-time Metriken — Für echte Echtzeit-Metriken verwenden Sie die
GetCurrentMetricDataAPI. Der Data Lake liefert nur historische Daten.