View a markdown version of this page

Connect Customer データレイクのリファレンスクエリ - Amazon Connect Customer

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Connect Customer データレイクのリファレンスクエリ

このトピックでは、データレイクテーブルから一般的な Connect Customer メトリクスを計算するための Athena SQL クエリ (Trino エンジン v3) について説明します。すべてのクエリは二重引用符で囲まれた識別子を使用し、connect_datalakeデータベース名を引き受けます。Glue カタログ設定に合わせてデータベース名を調整します。

各クエリ<YOUR_INSTANCE_ID>の を Connect Customer インスタンス ID に置き換えます。

問い合わせとキューのメトリクス

放棄済みレート

定義: キューに入っている間に顧客が切断した問い合わせの割合。コールバックは除外されます。

ソーステーブル: 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;

中止された問い合わせ

定義: キューで待機中に顧客が切断した問い合わせの数。

ソーステーブル: 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";

X 秒で中止された問い合わせ

定義: キューに入れられてから X 秒以内に中止された問い合わせの数。

ソーステーブル: 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";

平均キュー中止時間

定義: コンタクトがキューで待機してから中止するまでの平均時間。

ソーステーブル: 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";

平均キュー応答時間

定義: エージェントが応答するまでに問い合わせがキューで待機した平均時間。

ソーステーブル: 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";

サービスレベル

定義: X 秒以内に応答した問い合わせの数と割合。

ソーステーブル: 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";

キューに保存された問い合わせ

定義: キューに配置された問い合わせの数。

ソーステーブル: 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";

対応した問い合わせ

定義: エージェントに接続された問い合わせの数。

ソーステーブル: 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";

内部転送された問い合わせ

定義: キューに転送された問い合わせ。

ソーステーブル: 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";

外部転送されたコンタクト

定義: キューから転送された問い合わせ。

ソーステーブル: 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";

キューに入っている最大時間

定義: 問い合わせがキューでの待機に費やした最長時間。

ソーステーブル: 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";

平均コンタクト時間

定義: 問い合わせの開始から切断までの平均時間。

ソーステーブル: 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";

エージェントのパフォーマンスメトリクス

平均処理時間

定義: 問い合わせ接続から ACW 完了までの平均時間。

ソーステーブル: 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";

連絡作業後の時間

定義: エージェントが ACW 状態で費やした合計時間。

ソーステーブル: 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";

顧客の保留時間

定義: エージェントに接続した後に顧客が保留に費やした合計時間。

ソーステーブル: 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_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";

利用率

定義: エージェントがコンタクトに対してアクティブだった時間と、使用可能とアクティブを対比した時間の割合。

ソーステーブル: 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";

エージェント応答なし

定義: エージェントにルーティングされたが、応答されなかった問い合わせの数。

ソーステーブル: 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_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";

オンライン時間

定義: エージェント CCP がオフライン以外のステータスに設定された合計時間。

ソーステーブル: 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";

チャットメトリクス

エージェントの最初の平均応答時間

定義: チャットコンタクトを取得した後にエージェントが最初のメッセージを送信する平均時間。

ソーステーブル: 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";

エージェントの平均応答時間

定義: エージェントが顧客のメッセージに応答するのにかかる平均時間。

ソーステーブル: 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";

平均合計メッセージ数

定義: チャットコンタクトあたりの平均合計メッセージ数。

ソーステーブル: 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";

中止された会話

定義: エージェントまたは顧客によってチャットが中止された問い合わせ。

ソーステーブル: 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";

会話分析メトリクス

平均通話時間

定義: 音声問い合わせあたりのエージェントと顧客の通話時間の平均。

ソーステーブル: 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>';

平均非通話時間

定義: 音声コンタクトあたりの平均保留時間と無音時間。

ソーステーブル: 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>';

感情スコア

定義: エージェントと顧客の全体的な感情スコア。

ソーステーブル: 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>';

エージェントの平均中断回数

定義: 問い合わせあたりのエージェントの中断の平均数。

ソーステーブル: 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>';

AI エージェントメトリクス

AI エージェント呼び出しの成功率

定義: AI エージェント呼び出しの成功率。

ソーステーブル: 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";

AI ハンドオフレート

定義: ヒューマンエージェントにエスカレーションされた AI セッションのレート。

ソーステーブル: 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;

AI 品質スコア

定義: 平均目標成功率、忠実度、完全性スコア。

ソーステーブル: 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;

AI ツールの精度

定義: AI ツールパラメータの使用、選択、使用率の精度スコア。

ソーステーブル: 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";

フローメトリクス

開始されたフロー

定義: 実行を開始したフローの数。

ソーステーブル: 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";

フロー結果の割合

定義: 各フロー結果タイプのパーセンテージ。

ソーステーブル: 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;

平均フロー時間

定義: フロー実行の平均期間。

ソーステーブル: 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";

評価メトリクス

実行された評価

定義: 送信された評価の数。

ソーステーブル: 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>';

平均評価スコア

定義: 送信された評価の平均評価スコア。

ソーステーブル: 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>';

オートフェイル率

定義: 自動失敗をトリガーした評価の割合。

ソーステーブル: 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>';

アウトバウンドキャンペーンメトリクス

キャンペーンの連絡先

定義: アウトバウンドキャンペーンコンタクトの数。

ソーステーブル: 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";

人間の応答数

定義: ライブカスタマーに接続されたアウトバウンドキャンペーンコール。

ソーステーブル: 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";

Cases メトリクス

作成されたケース

定義: 期間中に作成されたケースの合計。

ソーステーブル: 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>';

平均解決時間

定義: ケースの作成から終了までの平均時間。

ソーステーブル: 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_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;

一般的なクエリパターン

次のパターンは、複数のデータレイクテーブルを組み合わせて包括的なダッシュボードとレポートを作成する方法を示しています。

日次概要ダッシュボード

定義: サービスレベルを含む包括的な日次キューメトリクス。

ソーステーブル: 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;

時間単位の傾向分析

定義: 時間単位の問い合わせ量とサービスレベルの傾向。

ソーステーブル: 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";

Contact Lens 強化問い合わせ

定義: Contact Lens 分析を使用して問い合わせレコードを強化します。

ソーステーブル:contact_record結合 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';

エージェントスケジュールの遵守 (アクティビティレベル)

定義: エージェントの実際のアクティビティ状態 ( からagent_statistic_record) を、1 日の時間間隔ごとにスケジュールされたシフトアクティビティ (スケジュールテーブルから) と比較します。間隔ごとの準拠判定を生成します。IN (エージェントはスケジュールどおりに実行していました) または OUT (実行されていません)。

出力列: エージェント、日付、開始、終了、スケジュールされたアクティビティ、実際のアクティビティ、準拠状態、期間

ソーステーブル:

  • staff_shifts — その日のエージェントシフト (削除されていない最新バージョン)

  • staff_shift_activities — 各シフト内のスケジュールされたアクティビティブロック

  • shift_activities — アクティビティ名ルックアップ (ARN を人間が読める名前にマッピング)

  • agent_statistic_record — 間隔あたりの実際のエージェント状態

  • users — エージェント名と ARN 解決

準拠ロジック (簡略化):

  • スケジュールされた「オープン」 — ステータスが使用可能、コンタクト中、または ACW の場合、エージェントは IN です

  • スケジュールされた「休憩」 — ステータスが休憩または昼食の場合、エージェントは IN です

  • スケジュールされた「会議」 — ステータスがトレーニングまたは会議の場合、エージェントは IN です

  • それ以外の場合 — OUT

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;

ベストプラクティス

  • パーティションプルーニング — スキャンコストを最小限に抑えるために、常にパーティションフィルター (disconnect_timestamppublished_date、または creation_timestamp) を含めます。

  • 重複排除 — Connect Customer は少なくとも 1 回レコードを配信します。正確な数が必要な場合は、プライマリキーDISTINCTで を使用します。

  • タイムゾーン — すべてのタイムスタンプは UTC です。ローカルレポートAT TIME ZONEに を適用します。

  • ミリ秒 — ほとんどの期間フィールドはミリ秒単位で保存されます。秒数を 1000.0 で除算します。

  • インスタンス ID フィルター — マルチインスタンス環境では常に instance_idでフィルタリングします。

  • リアルタイムメトリクス — 真のリアルタイムメトリクスには、 GetCurrentMetricData API を使用します。データレイクは履歴データのみを提供します。