엑셀 Power Pivot DAX 순환 종속성 오류 해결: 계산 열 참조 고리 찾기

엑셀 Power Pivot에서 계산 열을 추가하거나 데이터 모델을 새로 고칠 때 순환 종속성이 발견되었습니다 또는 Circular Dependency was detected 오류가 나타날 수 있습니다.

이 오류는 DAX 수식의 괄호나 쉼표가 잘못됐다는 뜻이 아닙니다. 계산 열 A가 계산 열 B를 필요로 하고, B가 다시 A를 필요로 하는 것처럼 계산 순서가 원래 열로 돌아오는 참조 고리가 만들어졌다는 뜻입니다.

엑셀 Power Pivot DAX 계산 열 사이에서 발생하는 순환 종속성 오류
계산 열이 자기 자신을 다시 참조하거나 두 계산 열이 서로를 참조하면 DAX가 계산 순서를 결정할 수 없어 순환 종속성 오류가 발생합니다.

이 글은 Microsoft의 DAX 컨텍스트, Power Pivot 계산 열·측정값, CALCULATE와 RELATED 공식 문서를 기준으로 작성했습니다. 예제의 테이블명과 열 이름은 실제 데이터 모델에 맞게 변경해야 합니다.

가장 먼저 새로 만든 계산 열을 확인하세요

순환 종속성 오류가 나타나기 직전에 새 계산 열을 만들었다면 해당 열부터 확인합니다.

  1. Excel 상단에서 Power Pivot → 관리를 선택합니다.
  2. 오류가 발생한 테이블을 선택합니다.
  3. 마지막으로 추가하거나 수정한 계산 열을 선택합니다.
  4. 화면 위쪽 수식 입력줄에서 참조하는 열 이름을 확인합니다.
  5. 참조한 열도 계산 열인지 원본 데이터 열인지 구분합니다.

먼저 수식에 포함된 열을 종이에 간단히 적어 보면 참조 방향을 찾기 쉽습니다.

참조 관계를 적는 방법

세후금액 → 세액
세액 → 세후금액

화살표를 따라갔을 때 처음 열로 다시 돌아오면 순환 참조입니다.

수식이 길더라도 먼저 계산 열 이름만 찾아 연결 관계를 확인하세요. 함수의 세부 동작을 분석하기 전에 참조 고리를 끊는 것이 우선입니다.

직접 자기 자신을 참조하는 계산 열

가장 단순한 형태는 현재 만들고 있는 계산 열이 수식 안에서 자기 자신을 다시 참조하는 경우입니다.

예를 들어 누적금액이라는 계산 열에 다음 수식을 입력하면 현재 열의 값을 알기 위해 다시 현재 열을 필요로 합니다.

=[누적금액] + [매출금액]

Excel 워크시트에서 위쪽 셀의 결과를 이어받는 방식과 달리 Power Pivot의 계산 열 수식은 테이블의 모든 행에 동일하게 적용됩니다. 이전 행의 결과를 순서대로 누적하는 일반 셀 수식처럼 사용할 수 없습니다.

누적 합계가 피벗 테이블에서 필요한 값이라면 계산 열보다 측정값으로 작성하는 방식을 검토해야 합니다.

두 계산 열이 서로를 참조하는 경우

직접 자기 자신을 쓰지 않았더라도 두 계산 열이 서로를 필요로 하면 같은 오류가 발생합니다.

다음은 순환 참조가 만들어지는 예입니다.

세후금액 계산 열

=[공급가액] - [세액]

세액 계산 열

=[세후금액] * 0.1

첫 번째 열은 세액이 있어야 계산되고, 두 번째 열은 세후금액이 있어야 계산됩니다. 어느 열도 먼저 계산할 수 없습니다.

원본 열을 기준으로 참조 방향을 한쪽으로 변경

세액을 공급가액에서 직접 계산하도록 바꾸면 참조 방향이 한쪽으로 정리됩니다.

세액 계산 열

=[공급가액] * 0.1

세후금액 계산 열

=[공급가액] - [세액]

이제 참조 관계는 공급가액 → 세액 → 세후금액으로만 이어지고 처음 열로 돌아오지 않습니다.

두 계산 열이 반드시 필요하지 않다면 세후금액을 원본 열만 사용해 직접 계산할 수도 있습니다.

=[공급가액] - ([공급가액] * 0.1)

CALCULATE가 들어간 계산 열에서 발생하는 경우

계산 열은 현재 행을 기준으로 평가되는 행 컨텍스트를 갖습니다. CALCULATE를 계산 열에서 사용하면 이 행 컨텍스트가 필터 컨텍스트로 전환될 수 있습니다.

따라서 수식에 현재 계산 열의 이름이 직접 보이지 않더라도 같은 테이블의 여러 열에 대한 종속성이 예상보다 넓어질 수 있습니다.

다음과 같은 계산 열은 각 매출 행에 고객별 합계를 반복해서 저장하려는 수식입니다.

=CALCULATE(
    SUM('매출'[금액]),
    ALLEXCEPT(
        '매출',
        '매출'[고객코드]
    )
)

이 수식 하나가 항상 순환 종속성을 만든다는 뜻은 아닙니다. 하지만 같은 테이블에 CALCULATE를 사용하는 다른 계산 열이 있고 두 열이 서로 참조하거나 관계 계산에 사용되면 종속성이 복잡해질 수 있습니다.

합계가 피벗 테이블에만 필요하면 측정값으로 변경

고객별 합계를 각 원본 행에 저장할 필요가 없고 피벗 테이블에서만 확인하면 되는 경우에는 측정값이 더 자연스럽습니다.

총 매출:=SUM('매출'[금액])

피벗 테이블의 행 영역에 고객코드를 배치하고 값 영역에 총 매출 측정값을 넣으면 각 고객의 필터 컨텍스트에 따라 합계가 계산됩니다.

Power Pivot에서 측정값 만드는 위치

  1. Excel에서 Power Pivot → 측정값 → 새 측정값을 선택합니다.
  2. 측정값을 저장할 테이블을 선택합니다.
  3. 측정값 이름에 총 매출을 입력합니다.
  4. 수식에 =SUM('매출'[금액])을 입력합니다.
  5. 숫자 형식을 선택하고 확인을 누릅니다.

Excel 버전에 따라 Power Pivot 창 아래쪽의 계산 영역에서 측정값을 만들 수도 있습니다.

계산 열과 측정값을 구분하는 기준

행마다 저장되어 필터·행·열 항목으로 사용해야 하는 값은 계산 열을 검토합니다.

합계, 평균, 비율, 누계처럼 피벗 테이블의 선택에 따라 달라져야 하는 값은 측정값을 먼저 검토합니다.

ALLEXCEPT에 고유 키를 무조건 추가하지 마세요

순환 종속성 오류 해결 방법으로 ALLEXCEPT에 주문번호 같은 고유 키를 추가하라는 안내를 볼 수 있습니다.

예를 들면 다음과 같은 형태입니다.

ALLEXCEPT(
    '매출',
    '매출'[고객코드],
    '매출'[주문번호]
)

그러나 주문번호가 각 행마다 고유하다면 고객 단위 합계를 구하려던 원래 계산이 주문 단위 또는 행 단위 계산으로 달라질 수 있습니다.

오류 메시지만 없애는 것이 아니라 계산 결과의 단위가 유지되는지 확인해야 합니다. 고유 키를 추가하는 방법을 모든 순환 종속성에 적용할 수 있는 일반적인 해결책으로 사용하지 마세요.

RELATED를 사용하는 계산 열과 관계 점검

다른 테이블에서 한 행의 속성을 가져오려는 계산 열에는 RELATED를 사용할 수 있습니다.

예를 들어 매출 테이블에 고객 등급을 추가하려면 다음과 같이 작성할 수 있습니다.

=RELATED('고객'[고객등급])

이 수식이 작동하려면 매출 테이블과 고객 테이블 사이에 올바른 관계가 있어야 합니다.

순환 종속성 오류가 관계를 추가하거나 변경한 뒤 발생했다면 다음 항목을 확인하세요.

  • 관계에 사용하는 키가 원본 열인지 계산 열인지
  • 계산 열이 관계를 통해 다시 원래 테이블을 참조하는지
  • 관계의 ‘1’ 쪽 열에 중복 값이 있는지
  • 고객코드·상품코드 같은 키를 다른 계산 결과로 만들고 있지 않은지
  • 같은 정보를 가져오기 위해 RELATED와 CALCULATE를 중복 사용하지 않는지

관계를 연결하는 키는 가능하면 Power Query나 원본 데이터에서 만든 안정적인 열을 사용하는 편이 관리하기 쉽습니다.

참조 고리를 찾기 어려울 때 끊어내는 순서

계산 열이 많아 어느 열이 원인인지 찾기 어렵다면 가장 최근에 만든 열부터 하나씩 참조를 끊습니다.

  1. 원본 Excel 파일을 복사해 점검용 파일을 만듭니다.
  2. 마지막으로 만든 계산 열의 기존 수식을 별도 메모장에 복사합니다.
  3. 해당 계산 열의 수식을 임시로 =BLANK()로 변경합니다.
  4. 순환 종속성 오류가 사라지는지 확인합니다.
  5. 오류가 사라지면 기존 수식이 참조하던 계산 열을 확인합니다.
  6. 각 계산 열을 원본 열만 참조하도록 바꿀 수 있는지 확인합니다.
  7. 합계나 비율 계산이라면 측정값으로 옮깁니다.
  8. 수식을 하나씩 되돌려 어떤 시점에 오류가 다시 발생하는지 확인합니다.
계산 열을 바로 삭제하지 마세요
다른 계산 열, 피벗 테이블 또는 관계에서 해당 열을 사용하고 있을 수 있습니다. 먼저 수식을 복사해 보관하고 BLANK() 같은 임시 수식으로 참조 고리만 끊어 확인하세요.

수정한 뒤 계산 결과까지 확인하세요

순환 종속성 오류가 사라졌다는 사실만으로 수정이 완료된 것은 아닙니다. 참조 열을 제거하거나 필터 범위를 바꾸면서 계산 결과의 단위가 달라질 수 있습니다.

다음 내용을 확인하세요.

행별 계산 열
임의의 몇 행을 선택해 원본 숫자로 직접 계산한 결과와 비교합니다.
측정값
피벗 테이블의 전체 합계와 고객·부서·날짜별 부분 합계를 비교합니다.
관계 변경
슬라이서나 행 필터를 선택했을 때 관련 테이블의 값이 함께 필터링되는지 확인합니다.
ALLEXCEPT 수정
고객 단위, 주문 단위 또는 행 단위 중 원래 필요했던 집계 수준이 유지되는지 확인합니다.

어떤 방식으로 다시 설계해야 하는가?

현재 행의 분류나 표시값이 필요함
원본 열 또는 RELATED를 사용하는 계산 열로 작성합니다.
피벗 테이블에서 합계·평균·비율이 필요함
계산 열보다 측정값을 먼저 사용합니다.
두 계산 열이 서로를 참조함
한 열을 원본 열에서 직접 계산하거나 두 계산을 하나의 수식으로 합칩니다.
관계 키를 계산 열로 만들고 있음
가능하면 Power Query 또는 원본 데이터 단계에서 키를 만들어 가져옵니다.
CALCULATE가 들어간 계산 열이 여러 개임
참조하는 열을 확인하고 보고서 집계용 계산은 측정값으로 분리합니다.

내용 확인에 사용한 Microsoft 공식 자료

공식 문서 확인일: 2026년 7월 28일

Post a Comment

다음 이전