

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Connect Customer Analytics 데이터 레이크에서 데이터 예약
<a name="data-lake-scheduling"></a>

이 주제에서는 Connect Customer 데이터 레이크 예약 테이블의 내용을 자세히 설명합니다. 테이블에는 콘텐츠의 열, 유형 및 설명이 나열됩니다.

분석 데이터 레이크에 액세스하고 공유할 데이터를 구성하는 두 가지 방법이 있습니다.
+ [옵션 1: Connect Customer 콘솔 사용](access-datalake.md#option1-configure-data-to-be-shared)
+ [옵션 2: CLI 또는 CloudShell 사용](access-datalake.md#option2-configure-data-to-be-shared)

옵션 1을 사용하여 예약 테이블에 액세스할 수 없는 경우 옵션 2를 사용해 보세요.

**Topics**
+ [직원 일정 프로필](#data-lake-staff-scheduling-profile)
+ [교대 근무 활동](#data-lake-shift-activities)
+ [교대 근무 프로필](#data-lake-shift-profiles)
+ [인력 배치 그룹](#data-lake-staffing-groups)
+ [인력 그룹 - 예측 그룹](#data-lake-staffing-groups-forecast-groups)
+ [인력 그룹 - 감독자](#data-lake-staffing-groups-supervisors)
+ [직원 교대 근무](#staff-shifts)
+ [직원 교대 근무 활동](#data-lake-staff-shift-activities)
+ [직원 잔여 휴가 변경](#data-lake-staff-timeoff-balance-changes)
+ [직원 휴가](#data-lake-staff-timeoffs)
+ [직원 휴가 간격](#data-lake-staff-timeoff-intervals)
+ [직원 수요 그룹](#data-lake-staff_demand_group)
+ [인력 배치 그룹 수요 그룹](#data-lake-staffing-groups-demand-groups)
+ [직원 교대 근무 활동 할당](#data-lake-staff-shift-activity-allocation)
+ [스케줄 지표](#data-lake-schedule-metrics)
+ [목표 예약](#data-lake-schedule-goals)
+ [교대 근무 교체 패턴](#data-lake-shift-rotation-patterns)
+ [교대 근무 교체 단계](#data-lake-shift-rotation-steps)
+ [데이터 스키마](#data-lake-data-schema)
+ [샘플 쿼리](#data-lake-sample-queries)

## 직원 일정 프로필
<a name="data-lake-staff-scheduling-profile"></a>

**테이블 이름:** `staff_scheduling_profile`

**설명:** 인력 배치 그룹 할당, 교대 근무 프로필 또는 교대 근무 패턴 할당, 일정 유효 기간 등 에이전트 일정 구성을 포함합니다.

**기본 키:** `instance_id, agent_arn, staff_scheduling_profile_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `agent_arn` - 에이전트 이벤트에 참여, 고객 응대 레코드, staff\_shifts, staff\_timeoffs, 사용자() `user_arn`
+ `staffing_group_arn` - staffing\_groups, staffing\_group\_forecast\_groups, staffing\_group\_supervisors에 조인합니다.
+ `shift_profile_arn` - shift\_profiles에 조인
+ `shift_rotation_pattern_arn` - shift\_rotation\_patterns에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  agent\_arn  |  문자열 |  No  |  에이전트의 ARN입니다. | 
|  staff\_scheduling\_profile\_version  |  bigint  |  아니요  |  직원 일정 프로필 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  staffing\_group\_arn  |  문자열  |  예  |  에이전트가 할당된 인력 배치 그룹의 ARN입니다. | 
|  start\_timestamp  |  타임스탬프  |  예  |  직원 규칙에 구성된 에이전트의 StartTimestamp입니다(일정은 이 타임스탬프 이후에만 생성됨). | 
|  end\_timestamp  |  타임스탬프  |  예  |  직원 규칙에 구성된 에이전트의 EndTimestamp입니다(이 타임스탬프 이후에는 일정이 생성되지 않음). | 
|  shift\_profile\_arn  |  문자열  |  예  |  직원 내 에이전트 규칙에 할당된 교대 근무 프로필의 ARN입니다. 교대 근무 교체 패턴에는 상호 배타적입니다. | 
|  교대\_회전\_패턴\_arn  |  문자열  |  예  |  직원 내 에이전트 규칙에 할당된 교대 근무 교체 패턴의 ARN입니다. Shift Profile과 상호 배타적입니다. | 
|  shift\_rotation\_start\_step\_id  |  bigint  |  예  |  에이전트가 할당된 교대 근무 교체 패턴에서 시작하는 단계 ID입니다. | 
|  timezone  |  문자열  |  예  |  에이전트에 대해 구성된 시간대입니다. | 
|  is\_deleted  |  부울  |  예  |  에이전트가 삭제된 경우 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  직원 예약 프로필이 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 

## 교대 근무 활동
<a name="data-lake-shift-activities"></a>

**테이블 이름:** `shift_activities`

**설명:** 활동 유형(생산적, 비생산적, 휴가), 준수 추적 및 유료 상태를 포함하여 교대 근무 내에서 할당할 수 있는 활동 유형을 정의합니다.

**기본 키:** `instance_id, shift_activity_arn, shift_activity_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_activity_arn` - staff\_shift\_activities, staff\_timeoff\_balance\_changes, staff\_timeoffs에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  shift\_activity\_arn  |  문자열  |  No  |  교대 근무 활동의 ARN입니다. | 
|  shift\_activity\_version  |  bigint  |  아니요  |  교대 근무 활동 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  shift\_activity\_name  |  문자열  |  예  |  교대 근무 활동의 이름입니다. | 
|  type  |  문자열  |  예  |  교대 근무 활동의 유형입니다. 가능한 값은 PRODUCTIVE, NON\_PRODUCTIVE, LEAVE입니다. | 
|  sub\_type  |  문자열  |  예  | 교대 근무 활동의 하위 유형입니다. 이는 NON\_PRODUCTIVE 유형 활동에만 유효합니다. 가능한 값은 BREAK\_OR\_MEAL과 NONE입니다. | 
|  is\_adherence\_tracked  |  부울  |  예  |  교대 근무 활동이 준수 추적을 위해 구성된 경우 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  is\_paid  |  부울  |  예  |  교대 근무 활동이 유급으로 구성된 경우 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  is\_deleted  |  부울  |  예  |  교대 근무 활동이 삭제되면 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  | 교대 근무 활동이 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 교대 근무 프로필
<a name="data-lake-shift-profiles"></a>

**테이블 이름:** `shift_profiles`

**설명:** 에이전트에게 할당할 수 있는 교대 근무 프로필 템플릿을 정의하여 일정 생성을 위한 교대 근무 패턴을 지정합니다.

**기본 키:** `instance_id, shift_profile_arn, shift_profile_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_profile_arn` - staff\_scheduling\_profile, shift\_rotation\_steps에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  shift\_profile\_arn  |  문자열  |  No  |  교대 근무 프로파일의 ARN입니다. | 
|  shift\_profile\_version  |  bigint  |  아니요  |  교대 근무 프로필 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  shift\_profile\_name  |  문자열  |  예  |  교대 근무 프로파일의 이름입니다. | 
|  is\_deleted  |  부울  |  예  |  교대 근무 프로파일이 삭제되면 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  | 교대 근무 프로파일이 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 인력 배치 그룹
<a name="data-lake-staffing-groups"></a>

**테이블 이름:** `staffing_groups`

**설명:** 일정 목적으로 에이전트를 구성하고 인력 관리를 위한 기본 조직 단위 역할을 하는 인력 배치 그룹을 정의합니다.

**기본 키:** `instance_id, staffing_group_arn, staffing_group_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `staffing_group_arn` - staff\_scheduling\_profile, staffing\_group\_forecast\_groups, staffing\_group\_supervisors, staffing\_group\_demand\_group에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  staffing\_group\_arn  |  문자열  |  No  |  인력 배치 그룹의 ARN입니다. | 
|  staffing\_group\_version  |  bigint  |  아니요  |  인력 배치 그룹 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  staffing\_group\_name  |  문자열  |  예  |  인력 그룹의 이름입니다. | 
|  is\_deleted  |  부울  |  예  |  인력 배치 그룹이 삭제되면 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  인력 그룹이 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 인력 그룹 - 예측 그룹
<a name="data-lake-staffing-groups-forecast-groups"></a>

**테이블 이름:** `staffing_group_forecast_groups`

**설명:** 인력 용량과 수요 예측을 연결하여 인력 배치 그룹과 예측 그룹 간의 연결을 매핑합니다.

**기본 키:** `instance_id, staffing_group_arn, staffing_group_version, forecast_group_arn`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `staffing_group_arn, staffing_group_version` - staffing\_groups에 조인
+ `forecast_group_arn` - schedule\_metrics, schedule\_goals, staff\_shift\_activity\_allocations에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  staffing\_group\_arn  |  문자열  |  No  |  인력 배치 그룹의 ARN입니다. | 
|  staffing\_group\_version  |  bigint  |  아니요  |  인력 배치 그룹 버전입니다. | 
|  forecast\_group\_arn  |  문자열  |  No  |  인력 배치 그룹과 연결된 예측 그룹의 ARN입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  is\_deleted  |  부울  |  예  |  StaffingGroup-ForecastGroup 연결이 유효한 경우 False로 설정합니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  인력 그룹이 생성/업데이트된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 인력 그룹 - 감독자
<a name="data-lake-staffing-groups-supervisors"></a>

**테이블 이름:** `staffing_group_supervisors`

**설명:** 감독자 연결을 인력 배치 그룹에 매핑하여 각 인력 배치 그룹을 담당하는 감독자를 추적합니다.

**기본 키:** `instance_id, staffing_group_arn, staffing_group_version, supervisor_arn`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `staffing_group_arn, staffing_group_version` - staffing\_groups에 조인
+ `supervisor_arn` - 에이전트 이벤트에 조인( agent\_arn), 고객 응대 레코드( agent\_arn)


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  staffing\_group\_arn  |  문자열  |  No  |  인력 배치 그룹의 ARN입니다. | 
|  staffing\_group\_version  |  bigint  |  아니요  |  인력 배치 그룹 버전입니다. | 
|  supervisor\_arn  |  문자열  |  No  |  인력 그룹과 연결된 감독자의 에이전트 ARN입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  is\_deleted  |  부울  |  예  |  StaffingGroup-ForecastGroup 연결이 유효한 경우 False로 설정합니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  인력 그룹이 생성/업데이트된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 직원 교대 근무
<a name="staff-shifts"></a>

**테이블 이름:** `staff_shifts`

**설명:** 교대 근무 시작 및 종료 시간과 생성 메타데이터를 포함하여 에이전트에 할당된 개별 교대 근무 인스턴스를 포함합니다.

**기본 키:** `instance_id, shift_id, shift_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_id, shift_version` - staff\_shift\_activities, staff\_shift\_activity\_allocations에 조인
+ `agent_arn` - staff\_scheduling\_profile, 에이전트 이벤트, 고객 응대 레코드, 사용자()에 조인 `user_arn`


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  shift\_id  |  문자열  |  No  |  교대 근무의 ID입니다. | 
|  shift\_version  |  bigint  |  아니요  |  교대 근무 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  agent\_arn  |  문자열  |  예  |  에이전트의 ARN입니다. | 
|  shift\_start\_timestamp  |  타임스탬프  |  예  |  교대 근무 시작 시 타임스탬프입니다. | 
|  shift\_end\_timestamp  |  타임스탬프  |  예  | 교대 근무가 종료 시 타임스탬프입니다. | 
|  created\_timestamp  |  타임스탬프  |  예  |  교대 근무가 생성될 때의 타임스탬프입니다. | 
|  is\_deleted  |  부울  |  예  |  교대 근무가 삭제되면 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  교대 근무가 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 직원 교대 근무 활동
<a name="data-lake-staff-shift-activities"></a>

**테이블 이름:** `staff_shift_activities`

**설명:** 활동 시작 및 종료 시간, 초과 근무 플래그, 활동 상태를 포함하여 교대 근무 내의 개별 활동 블록을 포함합니다.

**기본 키:** `instance_id, shift_id, shift_version, activity_id`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_id, shift_version` - staff\_shifts에 조인
+ `activity_id` - staff\_shift\_activity\_allocations에 조인
+ `shift_activity_arn` - shift\_activities에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  shift\_id  |  문자열  |  No  |  교대 근무의 ID입니다. | 
|  shift\_version  |  bigint  |  아니요  |  교대 근무 버전입니다. | 
|  activity\_id  |  문자열  |  No  |  활동의 ID입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  activity\_start\_timestamp  |  타임스탬프  |  예  |  활동이 시작될 때의 타임스탬프입니다. | 
|  activity\_end\_timestamp  |  타임스탬프  |  예  | 활동이 종료될 때의 타임스탬프입니다. | 
|  shift\_activity\_arn  |  문자열  |  예  |  교대 근무 활동의 ARN입니다. shift\_activity\_arn이 null이면 '작업' 활동을 나타냅니다. | 
|  activity\_status  |  문자열  |  예  |  활동 상태입니다. 활동이 휴가와 겹치는 경우 비활성으로 설정됩니다. | 
|  is\_overtime  |  부울  |  예  |  활동이 초과 근무의 일부인 경우 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
|  is\_deleted  |  부울  |  예  |  교대 근무 활동이 유효하면 False로 설정합니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  | 교대 근무가 생성/업데이트된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 직원 잔여 휴가 변경
<a name="data-lake-staff-timeoff-balance-changes"></a>

**테이블 이름:** `staff_timeoff_balance_changes`

**설명:** 에이전트의 잔여 휴가 변경 사항을 추적하여 업로드, 요청 및 일정 게시를 포함한 다양한 소스의 크레딧 및 공제를 기록합니다.

**기본 키:** `instance_id, agent_arn, shift_activity_arn, timeoff_balance_version`

**파티션 키:** `last_created_timestamp` (매일)

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `agent_arn` - staff\_scheduling\_profile, staff\_shifts, 에이전트 이벤트, 고객 응대 레코드에 조인
+ `shift_activity_arn` - shift\_activities에 조인
+ `timeoff_id` - staff\_timeoffs에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  aws\_account\_id  |  문자열  |  예  |  AWS 계정의 ID입니다. | 
|  agent\_arn  |  문자열  |  No  |  에이전트의 ARN입니다. | 
|  shift\_activity\_arn  |  문자열  |  No  |  이 잔여 휴가가 할당된 교대 근무 활동의 ARN입니다. | 
|  timeoff\_balance\_version  |  bigint  |  아니요  |  잔여 휴가 버전은 변경 순서를 나타내는 증분 숫자입니다. | 
|  balance\_update\_소스  |  문자열  |  예  |  잔액 업데이트의 소스입니다. 가능한 값은 TIME\_OFF\_BALANCE\_UPLOAD, CONNECT\_TIME\_OFF\_REQUEST, SCHEDULE\_PUBLISH, CSV\_TIME\_OFF\_BALANCE\_DELETION, TIME\_OFF\_BALANCE\_BACKFILL, SYSTEM\_UPDATE입니다. | 
|  timeoff\_id  |  문자열  |  예  |  이 잔여 휴가가 있는 경우 이 잔여 휴가를 변경한 휴가의 ID입니다. | 
|  last\_updated\_by  |  문자열  |  예  |  이 잔여 휴가를 유발한 에이전트의 ARN이 있는 경우 변경됩니다. | 
|  balance\_change\_in\_hours  |  double  |  예  |  이 시간 변경을 통해 업데이트된 잔여 휴가 금액입니다. 이 값이 양수이면 이 변경으로 잔여 휴가가 누적됩니다. 이 값이 음수이면 이 변경으로 잔여 휴가가 공제됩니다. 이 값은 밸런스 업로드 및 삭제 이벤트에 대해 정의되지 않습니다. | 
|  remaining\_balance\_in\_hours  |  double  |  예  |  이 변경 이벤트 후 남은 잔여 휴가 시간입니다. 이 값은 잔여 휴가 삭제 이벤트에 대해 정의되지 않습니다. | 
|  last\_created\_timestamp  |  타임스탬프  |  예  |  잔여 휴가 변경 레코드가 생성된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 직원 휴가
<a name="data-lake-staff-timeoffs"></a>

**테이블 이름:** `staff_timeoffs`

**설명:** 승인 워크플로 및 유효 시간을 통한 상태 추적을 포함하여 에이전트에 대한 휴가 요청 및 승인을 기록합니다.

**기본 키:** `instance_id, timeoff_id, agent_arn, timeoff_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `timeoff_id, timeoff_version` - staff\_timeoff\_intervals에 조인
+ `agent_arn` - staff\_scheduling\_profile, staff\_shifts, 에이전트 이벤트, 고객 응대 레코드에 조인
+ `shift_activity_arn` - shift\_activities에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  timeoff\_id  |  문자열  |  No  |  휴가의 ID입니다. | 
|  agent\_arn  |  문자열  |  No  |  에이전트의 ARN입니다. | 
|  timeoff\_version  |  bigint  |  아니요  |  휴가의 버전입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  timeoff\_type  |  문자열  |  예  |  휴가의 유형입니다. 가능한 값은 TIME\_OFF 및 VOLUNTARY\_TIME\_OFF입니다. | 
|  timeoff\_start\_timestamp  |  타임스탬프  |  예  |  휴가가 시작될 때의 타임스탬프입니다. | 
|  timeoff\_end\_timestamp  |  타임스탬프  |  예  |  휴가가 종료될 때의 타임스탬프입니다. | 
|  timeoff\_status  |  문자열  |  예  |  휴가 상태입니다. 가능한 값은 PENDING\_CREATE, PENDING\_UPDATE, PENDING\_CANCEL, PENDING\_ACCEPT, PENDING\_APPROVE, PENDING\_DECLINE, APPROVED, ACCEPTED, REJECTED, CANCELLED, WAITING\_ACCEPT, WAITING\_APPROVE입니다. 대기 중 상태는 휴가가 사용자 작업을 기다리고 있음을 나타냅니다. 대기 중 상태는 휴가가 사용자 작업의 시스템 처리를 기다리고 있음을 나타냅니다. | 
|  shift\_activity\_arn  |  문자열  |  예  |  휴가에 사용되는 교대 근무 활동의 ARN입니다. | 
|  effective\_timeoff\_hours  |  double  |  예  |  총 유효 휴가 시간입니다. 유효 휴가 시간은 [휴가 공제 로직](https://docs.aws.amazon.com/connect/latest/adminguide/upload-timeoff-balance.html#how-system-calculates-time-off-deductions)을 기반으로 계산됩니다. 이는 TIME\_OFF 유형에 대해서만 설정됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  휴가가 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 

## 직원 휴가 간격
<a name="data-lake-staff-timeoff-intervals"></a>

**테이블 이름:** `staff_timeoff_intervals`

**설명:** 휴가 요청 내의 개별 시간 간격을 포함하며, 여러 날 또는 여러 기간 휴가를 간격당 유효 시간이 포함된 개별 간격으로 구분합니다.

**기본 키:** `instance_id, timeoff_id, timeoff_version, interval_id`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `timeoff_id, timeoff_version` - staff\_timeoffs에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  timeoff\_id  |  문자열  |  No  |  휴가의 ID입니다. | 
|  timeoff\_version  |  bigint  |  아니요  |  휴가의 버전입니다. | 
|  interval\_id  |  문자열  |  No  |  휴가 간격의 ID입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  timeoff\_interval\_start\_timestamp  |  타임스탬프  |  예  |  휴가의 특정 간격이 시작될 때의 타임스탬프입니다. | 
|  timeoff\_interval\_end\_timestamp  |  타임스탬프  |  예  |  휴가의 특정 간격이 끝날 때의 타임스탬프입니다. | 
|  interval\_effective\_timeoff\_hours  |  double  |  예  |  이 특정 휴가 간격의 유효 휴가 시간입니다. 유효 휴가 시간은 [휴가 공제 로직](https://docs.aws.amazon.com/connect/latest/adminguide/upload-timeoff-balance.html#how-system-calculates-time-off-deductions)을 기반으로 계산됩니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  휴가가 생성/업데이트/삭제된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 

## 직원 수요 그룹
<a name="data-lake-staff_demand_group"></a>

**테이블 이름:** `staff_demand_group`

**설명:** 에이전트를 우선 순위 할당이 있는 수요 그룹에 매핑하여 인력 배치 그룹 수준 기본값과 수요 할당을 위한 에이전트 수준 재정의를 모두 지원합니다.

**기본 키:** `instance_id, agent_arn, demand_group_arn, staff_demand_group_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `agent_arn` - staff\_scheduling\_profile, staff\_shifts, 에이전트 이벤트, 고객 응대 레코드에 조인
+ `demand_group_arn` - staffing\_group\_demand\_group, staff\_shift\_activity\_allocations에 조인합니다.


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
| instance-id  | 문자열  |  No  | Connect Customer 인스턴스의 ID입니다. | 
| agent\_arn  | 문자열  |  No  | 에이전트의 ARN입니다. | 
| demand\_group\_arn  | 문자열  |  No  | 수요 그룹의 ARN입니다. | 
| staff\_demand\_group\_version  | Long  |  아니요  | 이 에이전트가 그룹 연결을 요구하기 위한 버전  | 
| priority  | 문자열  |  예  | 이 에이전트에 대한 수요 그룹의 우선 순위입니다. LOW, MEDIUM 또는 HIGH일 수 있습니다. | 
| instance\_arn  | 문자열  |  예  | Connect Customer 인스턴스의 ARN입니다. | 
| is\_override  | 부울  |  예  | 에이전트-디맨드 그룹 연결이 에이전트 수준 재정의인 경우 'true'로 설정합니다. | 
| is\_deleted  | 부울  |  예  | 에이전트와 수요 그룹 연결이 삭제되면 true로 설정합니다. | 
| last\_updated\_timestamp  | 타임스탬프  |  예  | 에이전트-수요 그룹 연결이 생성/업데이트된 시점의 타임스탬프입니다. | 
| data\_lake\_last\_processed\_timestamp  | 타임스탬프  |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 인력 배치 그룹 수요 그룹
<a name="data-lake-staffing-groups-demand-groups"></a>

**테이블 이름:** `staffing_group_demand_group`

**설명:** 인력 배치 그룹과 수요 그룹 간의 연결을 우선순위로 매핑하여 조직 단위를 수요 할당 대상에 연결합니다.

**기본 키:** `instance_id, staffing_group_arn, demand_group_arn, staffing_group_demand_group_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `staffing_group_arn` - staffing\_groups, staff\_scheduling\_profile에 조인
+ `demand_group_arn` - staff\_demand\_group, staff\_shift\_activity\_allocations에 조인


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  staffing\_group\_arn  |  문자열  |  No  |  인력 배치 그룹의 ARN입니다. | 
|  demand\_group\_arn  |  문자열  |  No  |  수요 그룹의 ARN입니다. | 
|  인력\_그룹\_수요\_그룹\_버전  |  Long  |  아니요  | 이 인력 배치 그룹과 Demand 그룹 연결의 버전  | 
|  priority  |  문자열  |  예  |  이 인력 배치 그룹에 대한 수요 그룹의 우선 순위입니다. LOW, MEDIUM 또는 HIGH일 수 있습니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  is\_deleted  |  부울  |  예  |  수요 그룹 연결에 대한 인력 배치 그룹이 삭제되면 true로 설정합니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  인력 배치 그룹의 수요 그룹 연결이 created/updated/deleted 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 직원 교대 근무 활동 할당
<a name="data-lake-staff-shift-activity-allocation"></a>

**테이블 이름:** `staff_shift_activity_allocations`

**설명:** 교대 근무 활동을 수요 그룹에 할당하는 비율을 기록하여 단일 활동 내에서 여러 수요 그룹에 에이전트 용량을 비례적으로 할당할 수 있습니다.

**기본 키:** `instance_id, shift_id, shift_version, activity_id, demand_group_arn`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_id, shift_version` - staff\_shifts, staff\_shift\_activities에 조인
+ `activity_id` - staff\_shift\_activities에 조인
+ `demand_group_arn` - staff\_demand\_group, staffing\_group\_demand\_group에 조인
+ `forecast_group_arn` - staffing\_group\_forecast\_groups에 조인합니다(예측\_group\_arn으로).


|  열  |  유형  |  Nullable  |  설명  | 
| --- | --- | --- | --- | 
|  instance-id  |  문자열  |  No  |  Connect Customer 인스턴스의 ID입니다. | 
|  shift\_id  |  문자열  |  No  |  교대 근무의 ID입니다. | 
|  shift\_version  |  Long  |  아니요  |  교대 근무 버전입니다. | 
|  activity\_id  |  문자열  |  No  |  활동의 ID입니다. | 
|  demand\_group\_arn  |  문자열  |  No  |  수요 그룹의 ARN입니다. | 
|  instance\_arn  |  문자열  |  예  |  Connect Customer 인스턴스의 ARN입니다. | 
|  forecast\_group\_arn  |  문자열  |  예  |  예측 그룹의 ARN입니다. | 
|  할당\_백분율  |  double  |  예  |  Demand Group에 대한 활동 할당 비율입니다. | 
|  is\_deleted  |  부울  |  예  |  StaffingGroup-ForecastGroupassociation이 유효한 경우 False로 설정합니다. | 
|  last\_updated\_timestamp  |  타임스탬프  |  예  |  인력 그룹이 생성/업데이트된 시점의 타임스탬프입니다. | 
|  data\_lake\_last\_processed\_timestamp  |  타임스탬프  |  예  |  레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 안정적으로 결정하는 데 사용할 수 없습니다. | 

## 스케줄 지표
<a name="data-lake-schedule-metrics"></a>

**테이블 이름:** `schedule_metrics`

**설명:** 필요한 에이전트 수와 예약된 에이전트 수, 점유율, 서비스 수준 백분율, 평균 응답 속도를 포함하여 일정 성능 지표를 간격별로 포함합니다.

**기본 키:** `instance_id, metric_id, interval_start_timestamp`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `entity_arn` - staffing\_group\_forecast\_groups(예측\_group\_arn), staff\_demand\_group(수요\_group\_arn)에 조인합니다.


| 열 | 유형 | Nullable | 설명 | 
| --- | --- | --- | --- | 
| instance-id | 문자열 |  No  | Amazon Connect 인스턴스의 ARN입니다. | 
| instance\_arn | 문자열 |  예  | Amazon Connect 인스턴스의 ID입니다. | 
| metric\_id | 문자열 |  No  | 지표 값의 고유 식별자 | 
| aws\_account\_id | 문자열 |  예  | AWS 계정의 ID입니다. | 
| entity\_type | 문자열 |  예  | 지표가 예측 그룹 또는 수요 그룹에 대한 지표인지 여부를 나타냅니다. | 
| entity\_arn | 문자열 |  예  | 예측 그룹 또는 수요 그룹의 Arn | 
| 채널 | 문자열 |  예  | 음성, 채팅과 같은 미디어 채널을 나타냅니다. 행에 채널 수준이 아닌 지표가 포함된 경우 모두로 채워집니다. | 
| interval\_start\_timestamp | timestamp |  아니요  | 간격의 시작을 나타내는 타임스탬프 | 
| required\_agent\_count | 실수 |  예  | 필요한 에이전트 수를 나타냅니다. | 
| 예약된\_에이전트\_수 | 실수 |  예  | 예약된 에이전트 수를 나타냅니다. | 
| scheduled\_occupancy | 실수 |  예  | 점유율을 나타냅니다. | 
| 예약\_서비스\_레벨\_백분율 | 실수 |  예  | 예약된 인원 수를 기준으로 예상 서비스 수준 백분율을 나타냅니다. | 
| service\_level\_초 | 정수 |  예  | 서비스 수준 초를 나타냅니다. | 
| 예약된\_평균\_응답 속도 | 실수 |  예  | 예약된 인원을 기준으로 초 단위의 예상 평균 응답 속도를 나타냅니다. | 
| is\_deleted | 부울 |  예  | 지표 삭제 여부를 나타냅니다. | 
| last\_updated\_timestamp | timestamp |  예  | 지표 레코드가 생성된 시점의 타임스탬프입니다. | 
| data\_lake\_last\_processed\_timestamp | timestamp |  예  | 타임스탬프 - 데이터 레이크가 레코드를 마지막으로 처리한 시간을 표시합니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 
| projected\_average\_time\_to\_complete | 실수 |  예  | 평균 완료 시간을 시간 단위로 나타냅니다. | 
| projected\_backlog | 정수 |  예  | 백로그 항목을 나타냅니다. | 

## 목표 예약
<a name="data-lake-schedule-goals"></a>

**테이블 이름:** `schedule_goals`

**설명:** 목표 서비스 수준 백분율, 서비스 수준 초, 예측 또는 수요 그룹의 평균 응답 속도 등 일정에 대한 서비스 수준 목표를 저장합니다.

**기본 키:** `instance_id, goal_id`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `entity_arn` - staffing\_group\_forecast\_groups(예측\_group\_arn), staff\_demand\_group(수요\_group\_arn)에 조인합니다.


| 열 | 유형 | Nullable | 설명 | 
| --- | --- | --- | --- | 
| instance-id | 문자열 |  No  | Amazon Connect 인스턴스의 ARN입니다. | 
| instance\_arn | 문자열 |  예  | Amazon Connect 인스턴스의 ID입니다. | 
| goal\_id | 문자열 |  No  | 목표 값의 고유 식별자 | 
| aws\_account\_id | 문자열 |  예  | AWS 계정의 ID입니다. | 
| entity\_type | 문자열 |  예  | 목표가 예측 그룹인지 수요 그룹인지 나타냅니다. | 
| entity\_arn | 문자열 |  예  | 예측 그룹 또는 수요 그룹의 Arn | 
| 채널 | 문자열 |  예  | 음성, 채팅과 같은 미디어 채널을 나타냅니다. | 
| start\_date\_timestamp | timestamp |  예  | 목표의 시작을 나타내는 타임스탬프 | 
| end\_date\_timestamp | timestamp |  예  | 목표의 끝을 나타내는 타임스탬프 | 
| goal\_service\_level\_percentage | 실수 |  예  | 목표 서비스 수준 백분율을 나타냅니다. | 
| goal\_service\_level\_seconds | 정수 |  예  | 서비스 수준 초를 나타냅니다. | 
| goal\_average\_speed\_of\_answer | 실수 |  예  | 평균 응답 속도를 초 단위로 나타냅니다. | 
| is\_deleted | 부울 |  예  | 목표 삭제 여부를 나타냅니다. | 
| last\_updated\_timestamp | timestamp |  예  | 목표 레코드가 생성된 시점의 타임스탬프입니다. | 
| data\_lake\_last\_processed\_timestamp | timestamp |  예  | 타임스탬프 - 데이터 레이크가 레코드를 마지막으로 처리한 시간을 표시합니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 
| goal\_average\_time\_to\_complete | 실수 |  예  | 평균 완료 시간을 시간 단위로 나타냅니다. | 

## 교대 근무 교체 패턴
<a name="data-lake-shift-rotation-patterns"></a>

**테이블 이름:** `shift_rotation_patterns`

**설명:** 구성 가능한 시작 날짜를 사용하여 시간이 지남에 따라 에이전트가 다양한 교대 근무 프로파일을 순환하는 교대 근무 교체 패턴 구성을 정의합니다.

**기본 키:** `instance_id, shift_rotation_pattern_arn, shift_rotation_pattern_version`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_rotation_pattern_arn, shift_rotation_pattern_version` - shift\_rotation\_steps에 조인
+ `shift_rotation_pattern_arn` - staff\_scheduling\_profile에 조인


| 열 | 유형 | Nullable | 설명 | 
| --- | --- | --- | --- | 
| instance-id | 문자열 |  No  | Connect Customer 인스턴스의 ID입니다. | 
| 교대\_회전\_패턴\_arn | 문자열 |  No  | 교대 근무 교체 패턴의 ARN입니다. | 
| shift\_rotation\_pattern\_version | bigint |  아니요  | 교대 근무 교체 패턴 버전입니다. | 
| instance\_arn | 문자열 |  예  | Connect Customer 인스턴스의 ARN입니다. | 
| shift\_rotation\_패턴\_이름 | 문자열 |  예  | 교대 근무 교체 패턴의 이름입니다. | 
| start\_date | 문자열 |  예  | yyyy-mm-dd 형식으로 된 교대 근무 교체 패턴의 시작 날짜입니다. | 
| is\_deleted | 부울 |  예  | 교대 근무 교체 패턴이 삭제되면 True로 설정합니다. 그렇지 않으면 False로 설정됩니다. | 
| last\_updated\_by | 문자열 |  예  | 교대 근무 교체 패턴을 created/updated/deleted 사용자의 ARN입니다. | 
| last\_updated\_timestamp | 타임스탬프 |  예  | 교대 근무 교체 패턴이 created/updated/deleted 때의 타임스탬프입니다. | 
| data\_lake\_last\_processed\_timestamp | 타임스탬프 |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 

## 교대 근무 교체 단계
<a name="data-lake-shift-rotation-steps"></a>

**테이블 이름:** `shift_rotation_steps`

**설명:** 교대 근무 교체 패턴 내에서 개별 단계를 정의하며, 각 단계는 교대 근무 프로파일을 주 단위의 기간과 연결합니다(교체당 최대 52단계).

**기본 키:** `instance_id, shift_rotation_pattern_arn, shift_rotation_pattern_version, step_id`

**조인 키:**
+ `instance_id` - 모든 테이블에 조인
+ `shift_rotation_pattern_arn, shift_rotation_pattern_version` - shift\_rotation\_patterns에 조인
+ `shift_profile_arn` - shift\_profiles에 조인


| 열 | 유형 | Nullable | 설명 | 
| --- | --- | --- | --- | 
| instance-id | 문자열 |  No  | Connect Customer 인스턴스의 ID입니다. | 
| 교대\_회전\_패턴\_arn | 문자열 |  No  | 교대 근무 교체 패턴의 ARN입니다. | 
| shift\_rotation\_pattern\_version | bigint |  아니요  | 교대 근무 교체 패턴 버전입니다. | 
| step\_id | bigint |  아니요  | 교대 근무 교체 패턴 내 단계의 ID입니다. 단계는 순차적으로 번호가 매겨집니다(1, 2, 3, ... 최대 52). | 
| instance\_arn | 문자열 |  예  | Connect Customer 인스턴스의 ARN입니다. | 
| shift\_profile\_arn | 문자열 |  예  | 교체 단계와 연결된 Shift Profile의 ARN입니다. | 
| duration | bigint |  예  | 교체 단계의 주 단위 기간입니다. | 
| is\_deleted | 부울 |  예  | 교대 근무 교체 단계가 유효하면 False로 설정합니다. | 
| last\_updated\_by | 문자열 |  예  | 교대 근무 교체 패턴을 생성/업데이트한 사용자의 ARN입니다. | 
| last\_updated\_timestamp | 타임스탬프 |  예  | 교대 근무 교체 패턴이 생성/업데이트된 시점의 타임스탬프입니다. | 
| data\_lake\_last\_processed\_timestamp | 타임스탬프 |  예  | 레코드가 데이터 레이크와 마지막으로 접촉한 시간을 보여 주는 타임스탬프입니다. 여기에는 변환 및 채우기가 포함될 수 있습니다. 이 필드는 데이터 신선도를 결정하는 데 안정적으로 사용할 수 없습니다. | 

## 데이터 스키마
<a name="data-lake-data-schema"></a>

다음은 Connect Customer 데이터 레이크에서 테이블 예약 간의 구조와 관계를 보여주는 엔터티 관계 다이어그램입니다.

 각 테이블에는 프라이머리 키와 속성이 데이터 유형과 함께 표시됩니다. 다이어그램은 이러한 테이블이 외래 키 관계를 통해 서로 어떻게 연관되는지 보여 주며, 예약 데이터 모델에 대한 포괄적인 보기를 제공합니다.

![예약 테이블 간의 구조와 관계를 보여주는 개체 관계 다이어그램입니다.](https://docs.aws.amazon.com/ko_kr/connect/latest/adminguide/images/data-lake-scheduling-tables-overview-1.png)


## 샘플 쿼리
<a name="data-lake-sample-queries"></a>

### 1. 쿼리를 통해 특정 예측 그룹에서 작업하는 에이전트의 모든 예약된 교대 근무 활동 가져오기
<a name="query1"></a>

`SELECT * FROM agent_scheduled_shift_activities_view where forecast_group_name = 'AnyDepartmentForecastGroup'` 

다음 단계를 완료하여 위에서 언급한 `agent_scheduled_shift_activities_view`를 생성합니다.

 **1단계: 감독자 이름을 가져올 뷰 생성** 

```
CREATE OR REPLACE VIEW "latest_supervisor_names_view" AS
SELECT
  staffing_group_arn
, array_agg(supervisor_name ORDER BY supervisor_name ASC) supervisor_names
FROM
  (
   SELECT
     s.staffing_group_arn
   , CONCAT(u.first_name, ' ', u.last_name) supervisor_name
   FROM
     ((
      SELECT
        staffing_group_arn
      , supervisor_arn
      FROM
        (
         SELECT
           *
         , RANK() OVER (PARTITION BY staffing_group_arn ORDER BY staffing_group_version DESC) recency
         FROM
           staffing_group_supervisors
         WHERE (instance_id = 'YourAmazonConnectInstanceId')
      )  t
      WHERE (recency = 1)
   )  s
   INNER JOIN USERS u ON (s.supervisor_arn = u.user_arn))
)
GROUP BY staffing_group_arn
```

 **2단계: 에이전트와 연결된 인력 배치 그룹 및 예측 그룹을 가져오는 뷰 생성** 

```
CREATE OR REPLACE VIEW "latest_agent_staffing_group_forecast_group_view" AS
WITH
  latest_staff_scheduling_profile AS (
   SELECT
     agent_arn
   , staffing_group_arn
   , last_updated_timestamp
   FROM
     (
      SELECT
        *
      , RANK() OVER (PARTITION BY agent_arn ORDER BY staff_scheduling_profile_version DESC) recency
      FROM
        staff_scheduling_profile
      WHERE ((instance_id = 'YourAmazonConnectInstanceId') AND (is_deleted = false))
   )  t
   WHERE (recency = 1)
)
, latest_staffing_groups AS (
   SELECT
     staffing_group_name
   , staffing_group_arn
   FROM
     (
      SELECT
        *
      , RANK() OVER (PARTITION BY staffing_group_arn ORDER BY staffing_group_version DESC) recency
      FROM
        staffing_groups
      WHERE (instance_id = 'YourAmazonConnectInstanceId')
   )  t
   WHERE (recency = 1)
)
, latest_forecast_groups AS (
   SELECT
     forecast_group_arn
   , forecast_group_name
   FROM
     (
      SELECT
        *
      , RANK() OVER (PARTITION BY forecast_group_arn ORDER BY forecast_group_version DESC) recency
      FROM
        forecast_groups
      WHERE (instance_id = 'YourAmazonConnectInstanceId')
   )  t
   WHERE (recency = 1)
)
, latest_staffing_group_forecast_groups AS (
   SELECT
     staffing_group_arn
   , forecast_group_arn
   FROM
     (
      SELECT
        *
      , RANK() OVER (PARTITION BY staffing_group_arn ORDER BY staffing_group_version DESC) recency
      FROM
        staffing_group_forecast_groups
      WHERE (instance_id = 'YourAmazonConnectInstanceId')
   )  t
   WHERE (recency = 1)
)
SELECT
  ssp.agent_arn
, U.agent_username AS username
, U.agent_routing_profile_id AS routing_profile_id
, CONCAT(u.first_name, ' ', u.last_name) agent_name
, fg.forecast_group_arn
, fg.forecast_group_name
, sg.staffing_group_arn
, sg.staffing_group_name
FROM
 latest_staff_scheduling_profile ssp
INNER JOIN latest_staffing_groups sg ON ssp.staffing_group_arn = sg.staffing_group_arn
INNER JOIN latest_staffing_group_forecast_groups sgfg ON ssp.staffing_group_arn = sgfg.staffing_group_arn
INNER JOIN latest_forecast_groups fg ON fg.forecast_group_arn = sgfg.forecast_group_arn
INNER JOIN USERS u ON ssp.agent_arn = u.user_arn
```

 **3단계: 최신 교대 근무 활동 가져오기** 

```
CREATE OR REPLACE VIEW "latest_shift_activities_view" AS
SELECT
  shift_activity_arn
, shift_activity_name
, shift_activity_version
, type
, sub_type
, is_adherence_tracked
, is_paid
, last_updated_timestamp
FROM
  (
   SELECT
     *
   , RANK() OVER (PARTITION BY shift_activity_arn ORDER BY shift_activity_version DESC) recency
   FROM
     shift_activities
   WHERE (instance_id = 'YourAmazonConnectInstanceId')
)  t
WHERE (recency = 1)
```

 **4단계: 에이전트가 교대 근무 활동을 예약하도록 뷰 생성** 

```
CREATE OR REPLACE VIEW "agent_scheduled_shift_activities_view" AS
WITH
  latest_staff_shifts AS (
   SELECT
     agent_arn
   , shift_id
   , shift_version
   , shift_start_timestamp
   , shift_end_timestamp
   , created_timestamp
   , last_updated_timestamp
   , data_lake_last_processed_timestamp
   , recency
   FROM
     (
      SELECT
        RANK() OVER (PARTITION BY shift_id ORDER BY shift_version DESC) recency
      , *
      FROM
        staff_shifts sa
      WHERE (instance_id = 'YourAmazonConnectInstanceId')
   )  t
   WHERE ((recency = 1) AND (is_deleted = false))
)
SELECT
  asgfg.forecast_group_name
, array_join(sn.supervisor_names, ',') supervisor_names
, s.agent_arn
, u.first_name
, u.last_name
, asgfg.staffing_group_name
, ssa.activity_id
, (CASE WHEN (ssa.shift_activity_arn IS NULL) THEN COALESCE(sa.shift_activity_name, 'Work') ELSE sa.shift_activity_name END) shift_activity_name
, s.shift_start_timestamp
, s.shift_end_timestamp
, (CASE WHEN (ssa.shift_activity_arn IS NULL) THEN COALESCE(sa.type, 'PRODUCTIVE') ELSE sa.type END) type
, (CASE WHEN (ssa.shift_activity_arn IS NULL) THEN COALESCE(sa.is_paid, true) ELSE sa.is_paid END) is_paid
, ssa.activity_start_timestamp
, ssa.activity_end_timestamp
, ssa.last_updated_timestamp
, ssa.data_lake_last_processed_timestamp
, u.agent_username as username
, u.agent_routing_profile_id as routing_profile_id
FROM
  staff_shift_activities ssa
INNER JOIN latest_staff_shifts s ON s.shift_id = ssa.shift_id AND s.shift_version = ssa.shift_version
INNER JOIN USERS u ON s.agent_arn = u.user_arn
INNER JOIN latest_agent_staffing_group_forecast_group_view asgfg ON s.agent_arn = asgfg.agent_arn
LEFT JOIN latest_shift_activities_view sa ON sa.shift_activity_arn = ssa.shift_activity_arn
INNER JOIN latest_supervisor_names_view sn ON sn.staffing_group_arn = asgfg.staffing_group_arn
WHERE (ssa.is_deleted = false) AND (COALESCE(ssa.activity_status, ' ') <> 'INACTIVE') AND (ssa.instance_id = 'YourAmazonConnectInstanceId')
```

### 2. 쿼리를 통해 특정 예측 그룹에 있는 에이전트의 모든 휴가 요청 가져오기
<a name="query2"></a>

` SELECT * FROM agent_timeoff_report_view where forecast_group_name = 'AnyDepartmentForecastGroup' `

 다음 쿼리를 사용하여 위에서 언급한 `agent_timeoff_report_view`를 생성합니다.

```
CREATE OR REPLACE VIEW "agent_timeoff_report_view" AS
WITH latest_staff_timeoffs AS (
        SELECT t1.*,
            CAST((t1.effective_timeoff_hours * 60) AS INT) total_effective_timeoff_minutes
        FROM (
                SELECT RANK() OVER (
                        PARTITION BY timeoff_id
                        ORDER BY timeoff_version DESC
                    ) recency,
                    agent_arn,
                    timeoff_id,
                    shift_activity_arn,
                    timeoff_status,
                    timeoff_version,
                    effective_timeoff_hours,
                    timeoff_start_timestamp,
                    timeoff_end_timestamp,
                    last_updated_timestamp,
                    data_lake_last_processed_timestamp
                FROM staff_timeoffs
                WHERE (
                        instance_id = 'YourAmazonConnectInstanceId'
                    )
            ) t1
        WHERE (recency = 1)
    )
SELECT asgfg.forecast_group_name,
    to.agent_arn,
    asgfg.agent_name,
    asgfg.staffing_group_name,
    asgfg.username,
    sa.shift_activity_name,
    to.timeoff_start_timestamp,
    to.timeoff_end_timestamp,
    to.timeoff_status,
    array_join(sn.supervisor_names, ',') AS supervisor_names,
    sa.is_paid,
    to.last_updated_timestamp,
    to.data_lake_last_processed_timestamp,
    u.agent_routing_profile_id AS routing_profile_id,
    to.timeoff_id,

    to.shift_activity_arn,
    to.total_effective_timeoff_minutes
FROM latest_staff_timeoffs to
    INNER JOIN latest_agent_staffing_group_forecast_group_view asgfg ON asgfg.agent_arn = to.agent_arn
    INNER JOIN latest_shift_activities_view sa ON sa.shift_activity_arn = to.shift_activity_arn
    INNER JOIN latest_supervisor_names_view sn ON sn.staffing_group_arn = asgfg.staffing_group_arn
    INNER JOIN users u ON u.user_arn = to.agent_arn
```