weekstart - 스크립트 및 차트 함수
이 함수는 date를 포함하는 캘린더 주의 첫 번째 날의 첫 번째 밀리초의 타임스탬프에 해당하는 값을 반환합니다. 기본 출력 형식은 스크립트에 설정된 DateFormat입니다.
구문:
WeekStart(date [, period_no[, first_week_day]])
반환 데이터 유형: dual
weekstart() 함수는 날짜가 속하는 주를 결정합니다. 그런 다음 해당 주의 첫 번째 밀리초에 대한 타임스탬프를 날짜 서식으로 반환합니다. 주의 첫 번째 요일은 FirstWeekDay 환경 변수에 의해 결정됩니다. 그러나 이는 weekstart() 함수의 first_week_day 인수로 대체될 수 있습니다.
인수 | 설명 |
---|---|
date | 평가할 날짜 또는 타임스탬프입니다. |
period_no | shift는 정수이며, 값 0은 date를 포함하는 주를 나타냅니다. shift가 음수 값일 경우 이전 주, 양수 값일 경우 다음 주를 나타냅니다. |
first_week_day |
주의 시작 요일을 지정합니다. 생략하면 변수 FirstWeekDay의 값이 사용됩니다. first_week_day에 가능한 값은 월요일에 0, 화요일에 1, 수요일에 2, 목요일에 3, 금요일에 4, 토요일에 5, 일요일에 6입니다. 시스템 변수에 대한 자세한 내용은 FirstWeekDay를 참조하십시오. |
사용 시기
weekstart() 함수는 일반적으로 사용자가 지금까지 경과된 주의 부분을 사용하여 계산하려고 할 때 표현식의 일부로 사용됩니다. 예를 들어, 사용자가 지금까지 한 주 동안 직원이 받은 총 급여를 계산하려는 경우 사용할 수 있습니다.
예 | 결과 |
---|---|
weekstart('01/12/2013') | 01/07/2013를 반환합니다. |
weekstart('01/12/2013', -1 ) | 11/31/2012를 반환합니다. |
weekstart('01/12/2013', 0, 1) | 01/08/2013를 반환합니다. |
국가별 설정
달리 지정하지 않는 한 이 항목의 예에서는 다음 날짜 형식을 사용합니다. YYYY/MM/DD. 날짜 형식은 데이터 로드 스크립트의 SET DateFormat 문에 지정됩니다. 기본 날짜 형식은 지역 설정 및 기타 요인으로 인해 시스템에서 다를 수 있습니다. 아래 예의 형식을 요구 사항에 맞게 변경할 수 있습니다. 또는 이러한 예와 일치하도록 로드 스크립트의 형식을 변경할 수 있습니다.
앱의 기본 국가별 설정은 Qlik Sense가 설치된 컴퓨터 또는 서버의 국가별 시스템 설정을 기반으로 합니다. 액세스하는 Qlik Sense 서버가 스웨덴으로 설정된 경우 데이터 로드 편집기는 날짜, 시간 및 통화에 대해 스웨덴 지역 설정을 사용합니다. 이러한 국가별 형식 설정은 Qlik Sense 사용자 인터페이스에 표시되는 언어와 관련이 없습니다. Qlik Sense는 사용 중인 브라우저와 동일한 언어로 표시됩니다.
예 1 – 추가 인수 없음
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
-
Transactions라는 테이블에 로드되는 2022년 트랜잭션 집합이 포함된 데이터 집합.
-
DateFormat 시스템 변수(MM/DD/YYYY) 서식으로 제공된 날짜 필드.
-
트랜잭션이 발생한 주의 시작에 대한 타임스탬프를 반환하는 필드 start_of_week 만들기.
로드 스크립트
SET FirstWeekDay=6;
Transactions:
Load
*,
weekstart(date) as start_of_week,
timestamp(weekstart(date)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
결과
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
start_of_week 필드는 weekstart() 함수를 사용하고 날짜 필드를 함수의 인수로 전달하여 선행 LOAD 문에서 만들어집니다.
weekstart() 함수는 날짜 값이 속하는 주를 초기에 식별하고 해당 주의 첫 번째 밀리초에 대한 타임스탬프를 반환합니다.
트랜잭션 8191은 2월 5일에 발생했습니다. FirstWeekDay 시스템 변수는 주의 첫 번째 요일을 일요일로 설정합니다. weekstart() 함수는 2월 5일 이전의 첫 번째 일요일(따라서 주의 시작)이 1월 30일임을 식별합니다. 따라서 해당 트랜잭션의 start_of_week 값은 해당 날짜의 첫 번째 밀리초, 즉 1월 30일 오전 12:00:00를 반환합니다.
예 2 – period_no
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
-
첫 번째 예와 동일한 데이터 집합 및 시나리오.
-
트랜잭션이 발생하기 전 분기 시작에 대한 타임스탬프를 반환하는 필드 previous_week_start 만들기.
로드 스크립트
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,-1) as previous_week_start,
timestamp(weekstart(date,-1)) as previous_week_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
결과
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.
-
date
-
previous_week_start
-
previous_week_start_timestamp
date | previous_week_start | previous_week_start_timestamp |
---|---|---|
1/7/2022 | 12/26/2021 | 12/26/2021 12:00:00 AM |
1/19/2022 | 01/09/2022 | 1/9/2022 12:00:00 AM |
2/5/2022 | 01/23/2022 | 1/23/2022 12:00:00 AM |
2/28/2022 | 02/20/2022 | 2/20/2022 12:00:00 AM |
3/16/2022 | 03/06/2022 | 3/6/2022 12:00:00 AM |
4/1/2022 | 03/20/2022 | 3/20/2022 12:00:00 AM |
5/7/2022 | 04/24/2022 | 4/24/2022 12:00:00 AM |
5/16/2022 | 05/08/2022 | 5/8/2022 12:00:00 AM |
6/15/2022 | 06/05/2022 | 6/5/2022 12:00:00 AM |
6/26/2022 | 06/19/2022 | 6/19/2022 12:00:00 AM |
7/9/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/22/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/23/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/27/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
8/2/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/8/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/19/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
9/26/2022 | 09/18/2022 | 9/18/2022 12:00:00 AM |
10/14/2022 | 10/02/2022 | 10/2/2022 12:00:00 AM |
10/29/2022 | 10/16/2022 | 10/16/2022 12:00:00 AM |
이 경우 weekstart() 함수에서 period_no -1을 오프셋 인수로 사용했으므로 이 함수는 먼저 트랜잭션이 발생한 주를 식별합니다. 그런 다음 1주일 전을 찾아 해당 주의 첫 번째 밀리초를 식별합니다.
트랜잭션 8196은 6월 15일에 발생했습니다. weekstart() 함수는 주가 6월 12일에 시작함을 식별합니다. 따라서 이전 주는 6월 5일 오전 12:00:00에 시작되었습니다. previous_week_start 필드에 대해 반환되는 값입니다.
예 3 – first_week_day
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
이 로드 스크립트에는 첫 번째 예와 동일한 데이터 집합 및 시나리오가 포함되어 있습니다. 그러나 이 예에서는 화요일을 근무 주의 첫 번째 요일로 설정해야 합니다.
로드 스크립트
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,0,1) as start_of_week,
timestamp(weekstart(date,0,1)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
결과
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/04/2022 | 1/4/2022 12:00:00 AM |
1/19/2022 | 01/18/2022 | 1/18/2022 12:00:00 AM |
2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
2/28/2022 | 02/22/2022 | 2/22/2022 12:00:00 AM |
3/16/2022 | 03/15/2022 | 3/15/2022 12:00:00 AM |
4/1/2022 | 03/29/2022 | 3/29/2022 12:00:00 AM |
5/7/2022 | 05/03/2022 | 5/3/2022 12:00:00 AM |
5/16/2022 | 05/10/2022 | 5/10/2022 12:00:00 AM |
6/15/2022 | 06/14/2022 | 6/14/2022 12:00:00 AM |
6/26/2022 | 06/21/2022 | 6/21/2022 12:00:00 AM |
7/9/2022 | 07/05/2022 | 7/5/2022 12:00:00 AM |
7/22/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/23/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/27/2022 | 07/26/2022 | 7/26/2022 12:00:00 AM |
8/2/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/8/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/19/2022 | 08/16/2022 | 8/16/2022 12:00:00 AM |
9/26/2022 | 09/20/2022 | 9/20/2022 12:00:00 AM |
10/14/2022 | 10/11/2022 | 10/11/2022 12:00:00 AM |
10/29/2022 | 10/25/2022 | 10/25/2022 12:00:00 AM |
이 경우 weekstart() 함수에서 first_week_date 인수 1을 사용하므로 주의 첫 번째 날을 화요일로 설정합니다.
트랜잭션 8191은 2월 5일에 발생했습니다. weekstart() 함수는 이 날짜 이전의 첫 번째 화요일(따라서 주의 시작 및 반환된 값)이 2월 1일 오전 12:00:00임을 식별합니다.
예 4 – 차트 개체 예
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
이 로드 스크립트에는 첫 번째 예와 동일한 데이터 집합 및 시나리오가 포함되어 있습니다.
그러나 이 예에서는 변경되지 않은 데이터 집합이 응용 프로그램에 로드됩니다. 트랜잭션이 발생한 주의 시작에 대한 타임스탬프를 반환하는 계산은 응용 프로그램의 차트 개체에서 측정값으로 만들어집니다.
로드 스크립트
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
결과
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 이 필드를 차원으로 추가합니다. date.
트랜잭션이 발생한 주의 시작을 계산하려면 다음 측정값을 추가합니다.
-
=weekstart(date)
-
=timestamp(weekstart(date))
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
start_of_week 측정값은 weekstart() 함수를 사용하고 date 필드를 함수의 인수로 전달하여 차트 개체에서 만들어집니다.
weekstart() 함수는 날짜 값이 속하는 주를 초기에 식별하고 해당 주의 첫 번째 밀리초에 대한 타임스탬프를 반환합니다.
트랜잭션 8191은 2월 5일에 발생했습니다. FirstWeekDay 시스템 변수는 주의 첫 번째 요일을 일요일로 설정합니다. weekstart() 함수는 2월 5일 이전의 첫 번째 일요일(따라서 주의 시작)이 1월 30일임을 식별합니다. 따라서 해당 트랜잭션의 start_of_week 값은 해당 날짜의 첫 번째 밀리초, 즉 1월 30일 오전 12:00:00를 반환합니다.
예 5 – 시나리오
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
-
Payroll라는 테이블에 로드되는 데이터 집합.
-
직원 ID, 직원 이름, 직원별 일일 급여로 구성된 데이터.
직원들은 월요일에 근무를 시작하여 주 6일 근무합니다. FirstWeekDay 시스템 변수는 수정하면 안 됩니다.
최종 사용자는 직원 ID 및 직원 이름별로 해당 주부터 현재까지 번 임금을 표시하는 차트 개체를 원합니다.
로드 스크립트
Payroll:
Load
*
Inline
[
employee_id,employee_name,day_rate
182,Mark, $150
183,Deryck, $125
184,Dexter, $125
185,Sydney,$270
186,Agatha,$128
];
결과
다음과 같이 하십시오.
-
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.
-
employee_id
-
employee_name
-
-
다음으로 해당 주부터 현재까지 번 임금을 계산하는 측정값을 만듭니다.
=if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6)
-
측정값의 숫자 형식을 화폐로 설정합니다.
employee_id | employee_name | =if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6) |
---|---|---|
182 | Mark | $600.00 |
183 | Deryck | $500.00 |
184 | Dexter | $500.00 |
185 | Sydney | $1080.00 |
186 | Agatha | $512.00 |
weekstart() 함수는 오늘 날짜를 첫 번째 인수로 사용하고 0을 세 번째 인수로 사용하여 월요일을 주의 첫 번째 요일로 설정하고 현재 주의 시작 날짜를 반환합니다. 현재 날짜에서 해당 결과를 빼면 이 표현식은 이번 주에 지금까지 경과한 일 수를 반환합니다.
그런 다음 이 조건은 이번 주에 6일보다 많이 있었는지 여부를 평가합니다. 그렇다면 직원의 day_rate에 6일을 곱합니다. 그렇지 않으면 day_rate에 이번 주에 지금까지 발생한 일 수를 곱합니다.