- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀 데이터 모델 손상으로 인해 발생하는 각종 오류를 체계적으로 진단하고, 안전하고 재현 가능한 복구 절차를 제시하여 현장에서 즉시 문제를 해결할 수 있도록 돕는 것이다.
데이터 모델 손상 증상의 전형적 징후 정리
데이터 모델 손상은 다음과 같은 형태로 나타나는 경우가 많다.
- 통합문서 열기 시 “읽을 수 없는 콘텐츠가 발견되어 복구하였다” 메시지가 반복 표시되거나 파일이 읽기 전용으로 열린다.
- 피벗테이블 필드 목록이 비어 있거나, 기존 피벗이 “데이터 모델을 로드할 수 없다” 메시지와 함께 작동하지 않는다.
- Power Pivot 창이 열리지 않거나 “Workbook Model” 초기화 실패 오류가 발생한다.
- 파워쿼리 새로고침이 일부 단계에서 즉시 실패하며, 관계가 사라지거나 예상치 못한 중복 키 충돌이 발생한다.
- 데이터 연결이 유효해 보이지만 새로고침 시 “개체 참조가 개체 인스턴스로 설정되지 않았다”와 유사한 오류가 간헐적으로 발생한다.
- 피벗 계산 필드 혹은 측정값이 갑자기 비어 있거나 #N/A, #ERROR 형태로 표출된다.
주의 :
위 증상은 파일 손상 이외에 추가기능 충돌, 권한·경로 문제, 외부 데이터 원본 변경 등으로도 유발될 수 있으므로, 복구 전에 원인 분리를 위한 기초 점검을 반드시 수행해야 한다.
사전 준비: 안전한 복구 환경 만들기
- 원본 파일을 즉시 복제하여 날짜·시간 스탬프를 붙인 백업본을 만든다.
- 가능하면 로컬 디스크 경로로 파일을 옮긴 뒤, 파일명·경로에 특수문자를 제거한다.
- 엑셀을 안전 모드로 시작하여 추가기능 영향을 배제한다.
- 신뢰 센터 설정에서 보호된 보기 여부를 확인하고, 네트워크·인터넷에서 내려받은 파일이면 차단 해제 후 복구를 진행한다.
빠른 복구 10단계 표준 절차
- Open and Repair 기능으로 열기를 시도한다.
-
다른 이름으로 저장
에서 파일 형식을
.xlsx또는.xlsb로 전환하여 내부 구조를 재정렬한다. - 모든 연결 해제 후 점진 복원 을 위해 데이터 탭의 연결을 비활성화하고, 하나씩 다시 활성화하며 실패 지점을 찾는다.
- Power Pivot 창 을 열어 테이블별 행 수를 확인하고, 비정상 테이블을 비활성화하거나 삭제 후 재가져오기를 시도한다.
- 관계 관리자 에서 관계를 모두 내보내기 후 삭제하고, 키 컬럼 정합성을 확인한 뒤 관계를 재생성한다.
- 피벗 캐시 초기화 를 위해 모든 피벗테이블을 새로고침하고, 실패하는 피벗을 임시 제거 후 다시 작성한다.
- 파워쿼리 단계 검증 을 위해 각 쿼리의 적용 단계에서 오류 행을 격리하고 형변환·추가열 로직을 재적용한다.
- DAX 측정값 을 빈 통합문서로 임시 백업한 뒤, 의존 테이블 복원이 끝난 후 다시 붙여넣는다.
- 이름 관리자 에서 데이터 모델 관련 숨김 이름을 정리한다.
- 종합 새로고침 을 실행하여 실패 단계 로그를 확보하고, 실패 지점만 반복 보정한다.
파일 구조 분석을 통한 수동 복구 전략
.xlsx
는 ZIP 구조를 가지므로 구조적 손상 추정 시 파일 사본을 대상으로 구조 점검을 수행한다.
-
사본의 확장자를
.zip으로 변경한 뒤 압축을 해제한다. -
xl/model/또는xl/pivotCache/,xl/connections.xml등 핵심 파일의 존재를 확인한다. - 분명한 손상 흔적이 있는 경우, 동일 구조를 가진 정상 파일의 해당 부분을 참고하여 최소 교체 전략을 적용한다.
-
압축을 다시 생성한 후 확장자를
.xlsx로 원복하고 열어 본다.
주의 :
수동 편집은 고급 시나리오이다. 원본 백업을 여러 개 보유하고, 작업 로그를 남기며, 변경 단위를 매우 작게 나누어야 한다.
Power Pivot 관점의 손상 원인과 복구 포인트
- 관계 불일치 로 인한 로드 실패가 잦다. 관계에 사용된 키 컬럼에서 공백·Null·중복이 없는지 확인한다.
- 열 데이터 형식 변동 으로 VertiPaq 인덱싱이 실패할 수 있다. 형식을 텍스트·정수·실수로 명시하고, 혼합형을 제거한다.
- 삭제된 열 참조 가 DAX 측정값·계산 열에 남아 있으면 로드 중단이 발생한다. 의존도 뷰로 끓어진 참조를 찾아 수정한다.
- 모델 크기 과대 로 메모리 부족이 발생할 수 있다. 고중복 텍스트 열을 해시키로 치환하고 요약 테이블을 별도 생성한다.
파워쿼리 새로고침 실패의 체계적 분해
파워쿼리 오류는 대체로 스키마 변경, 경로·권한, 크리덴셜 만료, 형변환 실패에서 기인한다.
- 소스 단계 에서 경로·URL·드라이버를 재확인한다.
- 형변환 단계 에서 오류 행만 필터링하여 데이터 품질 이슈를 수정한다.
- 열 이름 변경 이나 열 삭제 가 상위 단계에 영향을 주지 않는지 의존성을 검토한다.
- 병합·조인 단계에서는 조인 키의 트리밍·대소문 일치 여부를 점검한다.
- 증분 새로고침 을 쓰는 경우 날짜 경계 조건 변동을 확인한다.
관계·키 무결성 점검 체크리스트
| 점검 항목 | 권장 조치 | 도구 |
|---|---|---|
| 기본키 중복 | 중복 제거 후 누락 레코드 별도 테이블로 격리 | 파워쿼리 중복 제거 |
| Null 키 | 임시 대체값 부여 또는 레코드 제외 | 조건열, 채우기 |
| 데이터 형식 혼합 | 형식 사전 지정, 오류 행 수집 | 형식 변경, 오류로 이동 |
| 관계 방향성 | 1:* 구조 재검토, 양방향 최소화 | 관계 관리자 |
| 시간 차원 연결 | 캘린더 테이블 도입, 날짜 키 정규화 | DAX 캘린더 |
DAX 측정값과 계산 열 복구 원칙
- 모델 로드가 불안정하면 계산 열부터 비활성화하고 측정값만 유지한다.
-
삭제된 열을 참조하는 DAX는
SELECTEDVALUE혹은COALESCE로 안전 장치를 둔다. - 시간 지능 함수는 기준 날짜 테이블이 마크된 상태인지 확인한다.
-- 예시: 누락 가능 열을 안전 처리한 매출 합계 Sales Safe := CALCULATE ( SUMX ( 'Sales', VALUE ( COALESCE ( 'Sales'[Amount], 0 ) ) ), KEEPFILTERS ( NOT ISEMPTY ( 'Sales' ) ) )
연결·캐시 정리 및 자동 점검 VBA 스크립트
연결 정리와 단계적 새로고침을 자동화하면 실패 지점 파악이 쉬워진다.
Option Explicit
Sub CleanAndRefreshModel()
Dim cn As WorkbookConnection
Dim pt As PivotTable
Dim ws As Worksheet
'1) 끊어진 연결 비활성화
For Each cn In ThisWorkbook.Connections
On Error Resume Next
cn.Refresh
If Err.Number <> 0 Then
Debug.Print "Disable: "; cn.Name
Err.Clear
cn.Delete
End If
On Error GoTo 0
Next cn
'2) 피벗 캐시 초기화
For Each ws In ThisWorkbook.Worksheets
For Each pt In ws.PivotTables
On Error Resume Next
pt.RefreshTable
If Err.Number <> 0 Then
Debug.Print "Pivot remove: "; pt.Name
Err.Clear
pt.TableRange2.ClearContents
End If
On Error GoTo 0
Next pt
Next ws
'3) 전체 새로고침
ThisWorkbook.RefreshAll
End Sub
주의 :
상기 매크로는 끊어진 연결을 삭제하므로, 반드시 백업 사본에서 실행해야 한다.
파워쿼리 오류 행 자동 추출 예시(M 코드)
// 파워쿼리: 형변환 오류 행을 별도 쿼리로 격리 let Source = Excel.CurrentWorkbook(){[Name="Table_Sales"]}[Content], Typed = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Amount", type number}}), Errors = Table.SelectRows(Typed, each List.NonNullCount(Record.FieldValues(Record.SelectFields(_, {"Date","Amount"}))) < 2 or not Value.Is([Amount], type number)) in Errors
모델 재구축이 필요한 경우의 안전한 마이그레이션 절차
- 모든 파워쿼리 스크립트를 고정 문자열로 내보내어 버전 관리한다.
- 모든 DAX 측정값을 텍스트 파일로 백업한다.
- 관계 스키마를 스크린샷과 표로 기록한다.
- 새 통합문서에서 원본 쿼리부터 순서대로 복원하고, 데이터 품질 검사를 통과한 테이블만 모델에 로드한다.
- 피벗은 마지막에 작성한다.
성공률을 높이는 데이터 모델 경량화 팁
- 텍스트 고중복 열은 정규화하여 키와 루크업 테이블로 분리한다.
- 필요 없는 열은 쿼리 단계에서 제거하고, 보고서에 쓰이지 않는 계산 열은 측정값으로 대체한다.
- 날짜·시간은 정수 키로 변환하고, 장문 텍스트는 별도 상세 테이블로 분리한다.
자주 쓰는 복구 명령·옵션 모음
| 기능 | 경로 | 용도 |
|---|---|---|
| 열기 및 복구 | 파일 > 열기 > 파일 선택 > 열기 버튼 옆 화살표 | 기본 손상 자동 복구 |
| 연결 관리 | 데이터 탭 > 쿼리 및 연결 | 끊어진 연결 탐지·삭제 |
| 관계 보기 | 데이터 탭 > 관계 | 키 무결성 점검 |
| Power Pivot 창 | Power Pivot 탭 > 관리 | 테이블 상태·열 형식 확인 |
| 이름 관리자 | 수식 탭 > 이름 관리자 | 깨진 정의 정리 |
문제 유형별 원인 진단 매트릭스
| 증상 | 가능 원인 | 우선 조치 | 대체 경로 |
|---|---|---|---|
| 피벗 필드 목록 공백 | 모델 로드 실패, 관계 불일치 | 관계 제거 후 단계적 복원 | 새 통합문서로 테이블 재가져오기 |
| 새로고침 즉시 실패 | 스키마 변경, 크리덴셜 만료 | 소스 단계 재설정 | CSV/파케이로 임시 덤프 후 로드 |
| 간헐 오류 | 추가기능 충돌, 메모리 부족 | 안전 모드·64비트 확인 | 대용량 열 정규화·요약 |
| 열 형식 깨짐 | 혼합 데이터 타입 | 형식 선지정·오류 행 격리 | 스테이징 쿼리 도입 |
| DAX 참조 오류 | 삭제 열·이름 변경 | DAX 일괄 검색·치환 | 측정값만 우선 복원 |
대용량·공유 환경에서의 추가 대책
- 공유 드라이브·클라우드 동기화 도중 편집을 중지하고, 동기화 완료 후 저장한다.
-
파일 크기가 커지면
.xlsb저장을 고려하여 로드 시간을 단축한다. - 동시 편집은 피하고, 배포용은 데이터 모델을 제거한 경량 보고서로 분리한다.
예방을 위한 표준 운영 절차(SOP) 샘플
1) 쿼리·DAX 변경 전 사본 생성
2) 변경 내역 문서화: 쿼리 단계·DAX·관계 스냅샷
3) 스테이징 파일로 원천 데이터 고정
4) 일일 새로고침 시 에러 로그 아카이브
5) 월 1회 관계·형식 점검 체크리스트 수행
파일이 전혀 열리지 않을 때의 우회 경로
- Open and Repair로 열리지 않으면, 압축 구조 확인을 통해 워크시트와 모델 자산을 분리한다.
-
워크시트 데이터가 중요하면
xl/worksheets/에서 각 시트를 신속 추출한다. - 모델 복원은 새 통합문서에서 데이터만 재로딩하고, 관계와 DAX를 수동 재작성한다.
현장 적용 체크리스트
| 단계 | 작업 | 완료 |
|---|---|---|
| 백업 생성 | 사본 파일, 경로 정리 | □ |
| 안전 모드 | 추가기능 영향 배제 | □ |
| Open and Repair | 파일 구조 자동 복구 | □ |
| 연결 점검 | 끊어진 연결 삭제 | □ |
| 관계 재작성 | 키 무결성 보정 | □ |
| 파워쿼리 검증 | 오류 행 격리 | □ |
| DAX 복원 | 측정값 재적용 | □ |
| 최종 새로고침 | 로그 확인 | □ |
FAQ
데이터 모델만 제거하고 워크시트는 살릴 수 있나?
가능하다. 새 통합문서를 만들고, 기존 파일에서 워크시트를 복사한 뒤 모든 피벗과 모델 연결을 제거하고 필요한 표만 다시 데이터 모델로 로드하면 된다.
관계가 많아 복구가 어렵다. 우선순위는 무엇인가?
사실 테이블과 핵심 차원부터 복원하고, 조인 키 품질을 확보한 다음 비핵심 차원을 단계적으로 추가하는 순서를 따른다.
파일 크기가 급증하며 불안정하다. 어떻게 줄이나?
불필요 열 제거, 텍스트 열 정규화, 계산 열의 측정값 전환, 날짜 키 정수화, 요약 테이블 도입으로 압축 효율을 높인다.
파워쿼리 스키마가 자주 바뀐다. 깨지지 않게 구성할 수 있나?
스테이징 쿼리를 두고 열 이름 표준화, 필수 열 유효성 검사, 안전한 조인 키 전처리로 변경 내성을 확보한다.
피벗이 자주 망가진다. 대체 시나리오가 있나?
핵심 지표는 큐브 함수나 테이블 형태의 요약 시트를 별도로 구성하여 피벗 의존도를 낮춘다.