태블로 라인 차트에서 최대·최소·최근값 레이블 동시에 표시하기

태블로 라인 차트에서 최대·최소·최근값 레이블 동시에 표시하기

라인 차트를 활용해 트렌드를 분석할 때 사용자가 가장 먼저 찾는 핵심 정보는 대개 세 가지입니다. 바로 '가장 높았을 때(최대)', '가장 낮았을 때(최소)', 그리고 '지금 현재(최근값)'입니다. 하지만 태블로의 기본 마크 레이블 옵션은 최대/최소 또는 최근값 중 하나만 선택할 수 있도록 제한되어 있어, 이 세 가지 핵심 정보를 동시에 보여주는 데 한계가 있습니다.

이 문제를 해결하기 위해 가장 먼저 떠올릴 수 있는 직관적인 방법은 테이블 계산 함수를 활용해 각각의 조건을 하나의 식에 결합하는 것입니다. 최대값은 WINDOW_MAX, 최소값은 WINDOW_MIN, 최근값은 타임라인의 끝을 뜻하는 LAST() = 0 표현식을 사용하여 다음과 같이 간단한 기본 계산식을 작성할 수 있습니다.

이 수식은 매우 직관적이며 데이터의 변동이 크지 않을 때는 훌륭하게 작동합니다. 각각의 지점을 찾아내 OR 조건으로 연결했기 때문에 사용자가 원하는 세 가지 레이블이 한 차트에 모두 표시됩니다.

하지만 분석 기간이 길어지거나 데이터셋 내에 동일한 최대값 또는 최소값이 여러 번 발생하는 '중복 값' 문제가 생기면 차트가 복잡해지기 시작합니다. WINDOW_MAXWINDOW_MIN은 일치하는 모든 값을 최고점이나 최저점으로 인식하기 때문에, 매출이 동일한 최고점이나 최저점을 여러 번 기록했다면 차트 위에 불필요한 레이블이 여러 개 표시되어 시각적 노이즈가 발생합니다. 사용자는 대개 그중 가장 최근에 발생한 단 하나의 지점에만 깔끔하게 레이블이 남기를 원할 것입니다.

이처럼 중복 값으로 인해 차트가 지저분해지는 문제를 완벽하게 제어하기 위해서는 순위 함수인 RANKRANK_UNIQUE를 조합한 고도화된 논리가 필요합니다. 중복된 값 중에서도 가장 최근 날짜의 지점 하나만을 골라내기 위해 다음과 같이 계산식을 확장할 수 있습니다.

이 식은 다소 복잡해 보이지만, 구조를 나누어 보면 매우 정교하게 설계되었음을 알 수 있습니다. 크게 세 가지 논리 블록이 OR로 연결되어 있습니다.

  1. 첫 번째 블록은 최고점(Max)을 찾고 중복을 제거합니다. RANK(SUM([Sales]), 'desc')=1로 전체 데이터에서 가장 높은 매출을 기록한 지점들을 모두 마킹합니다. 만약 최고점이 여러 개라면 이 지점들의 Order DateIIF 함수로 추출하고 나머지는 NULL 처리합니다. 그리고 추출된 날짜들을 대상으로 다시 RANK_UNIQUE(..., 'desc')=1을 적용합니다. 날짜를 내림차순 정렬하여 고유한 순위를 매기기 때문에, 동일한 최고점 중에서도 '가장 최근에 발생한 날짜'에만 최종적으로 1등 순위가 부여되어 단 하나의 레이블만 남게 됩니다.
  2. 두 번째 블록은 최저점(Min)을 처리하며 정렬 기준만 오름차순('asc')으로 변경된 동일한 원리입니다. 여러 번 최저 매출을 기록했더라도 가장 최근에 그 값을 기록한 날짜에만 깔끔하게 레이블이 표시됩니다.
  3. 마지막 세 번째 블록은 차트의 가장 우측 끝에 위치한 최근값(Latest)을 고르는 로직입니다. 전체 타임라인에서 Order Date를 내림차순으로 고유 정렬하여 가장 최신 날짜 한 곳만 정확히 지정합니다.