-
7주 2일차 TIL 정리카테고리 없음 2023. 3. 21. 17:55
7주 2일차에는 Tableau 프로젝트에 대한 조언과 날짜 함수 및 ATTR에 대해 대략적으로 학습했다.
※ MTD(Month to Date) 만들기 ※
1. 날짜 매개변수를 기준으로 MTD 리스트 컨트롤
다음과 같이 날짜 매개변수를 만들고, '다음에서 값 추가'로 원하는 필드를 추가하면 해당 필드의 전체값이 범위로 지정된다.
매개변수를 사용하기 위해 계산된 필드를 생성해준다.
이는 필터로 사용하기 위함인데, 필터를 사용하지 않고 노출하려면 IF - THEN 을 사용해줄 수도 있다.
이때 계산된 필드는 이와 같은 코드를 가지는데,
DATEDIFF('month',[Order Date],[date_parameter])=0 and DATEDIFF('day',[Order Date],[date_parameter])>=0 // month는 차이가 없고 day는 0보다 커야 한다
date_parameter의 월데이터는 동일하되, 일데이터는 0보다 크게 설정한다.
필터로 사용할 경우 앞에서 생성한 MTD_calc를 필터에 넣은 후, 참값만을 표시해준다.
이후 그래프의 열 필드에 불연속형 Order Date 를 생성해 준 후,
원하는 데이터(예시에선 Sales)를 삽입한다.
이와 같은 방법으로 다음과 같이 매개변수를 컨트롤할 수 있다.
2. MTD, QTD, YTD 합산값의 날짜에 따른 컨트롤
문자열 매개변수 period를 만들어 다음과 같이 MTD, QTD, YTD를 각각 1, 2, 3에 할당해 표시해준다.
앞에서 만든 MTD_calc를 활용해 다음과 같이 만든다.
아래에 있는 QTD_calc과 YTD_calc는 첫줄의 'month'를 각각 'quarter'과 'year'로 변환한 필드이다.
필터와 행, 열에 든 모든 것들을 제외하고, period_calc를 텍스트 레이블에 삽입하면 다음과 같은 컨트롤이 가능하다.
※ 계산된 필드 사용 시 유의점 ※
1. avg(A) / avg(B) != avg(A /B)
A = [a, b]
B = [c, d]
로 가정할 때,
avg(A/B) = (a/c + b/d) / 2
avg(A)/avg(B) = ( (a+b) / 2 ) / ( (c+d) / 2 )
= a+b / c+d따라서 두 값은 다르므로 유의해야 한다.
2. 계산된 필드 집계오류의 해소
if [Region] = 'West' then sum([Sales]) end // 오류!!
↓
sum(if [Region] = 'West' then [Sales] end)
3. 테이블 계산에서 '옆으로', '아래로'등 의미
- 테이블 '옆으로'가 기본값
- 테이블 '옆에서 아래로': 지그재그로..(1행 1열 1행 2열 ... 1행 마지막열 2행 1열...)
- 패널 '옆으로': 패널 내에서만 계산
- 셀: 셀 하나하나에 대한 ~~ 계산 (보통 백분율 등. 차이같은건 안나옴)
※ ATTR ※
ATTR: 함수 (y=ax+b)
함수에는 로직이 존재한다.
*는 함수의 결과값 중 하나
ATTR의 정의는
if min(차원) = max(차원) then 차원 else * end → 하나의 값이 아닌 다중값이 오면 '*' 노출
if isnull(min([field])) = max([field]) then min([field]) else * end
ATTR은 집계함수이다. (VLOD(View Level Of Detail)에 따라 바뀔 수 있다.)
→ 현재의 VLOD에서 이 필드가 단 하나의 값을 가지느냐, 복수의 값을 가지느냐를 판정.
하나의 값을 가져오면 그것을 가져오고, 아니면 *을 가져와라.
ATTR 남발하면 느려진다!!!
<example>
Region을 넣고 ATTR(Country) 넣으면 세부성 높 → 낮 (value: * * usa)
Country를 넣고 ATTR(Region) 넣으면 세부성 낮 → 높 (value: asia europe europe asia asia northAmerica)
활용
if ATTR([Order Date]) = #2022-06-27# then count([Sales]) else null end